Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.IO;
- using System.Text;
- using System.Linq;
- using System.Text.RegularExpressions;
- using System.Collections;
- using System.Collections.Generic;
- namespace PandoraBox
- {
- //Плагин макроса, аналогичного UNIQLINE, но начинающего читать файл снова с начала по достижении конца
- public class FileLinesPlugin : IPluginMacro
- {
- // Регулярка которая ищет макрос
- Regex _block = new Regex(@"\[FILELINES-\(([^)]+?)\)\]", RegexOptions.Compiled | RegexOptions.Multiline);
- // Основной метод, реализация которого выполняет обработку пользовательского макроса
- public string Execute(string template, PluginMacroArgs args)
- {
- //проверка регулярки
- Match match = _block.Match(template);
- //успешно применилась
- if(match.Success)
- {
- //папка из параметров
- String dir = match.Groups[1].Value;
- // папка лежит в data
- String path = Path.Combine("data", dir);
- // в ней рандомный файл
- String randFile = GetRandFile(path);
- // файлы есть еще
- if(randFile != null)
- {
- // из него строки по порядку
- List<String> lines = File.ReadAllLines(randFile, Encoding.GetEncoding(1251)).ToList();
- //обработка макроса
- template = _block.Replace(template, new MatchEvaluator(m =>
- {
- //если кончились строчки
- if (lines.Count == 0)
- return "[Строки кончились]";
- //берем строчку
- String res = lines[0];
- //и удаляем
- lines.RemoveAt(0);
- //возвращаем строчку
- return res;
- }));
- // и удаляем файл
- File.Delete(randFile);
- }
- else
- //Файлы кончились
- return _block.Replace(template, new MatchEvaluator(m =>
- {
- return "[Файлы кончились]";
- }));
- }
- return template;
- }
- // получение рандомного файла из папки
- private string GetRandFile(String path)
- {
- String[] files = Directory.GetFiles(path);
- if(files.Length == 0) return null;
- String rndFile = files[Rnd.Next(0, files.Length - 1)];
- return rndFile;
- }
- // Уровень срабатывания плагина. Значения от 0 до 10. 0 - самый ранний уровень срабатывания, 10 - самый поздний
- public ushort Level
- {
- get { return 10; }
- }
- // Имя плагина для отладки. Выводится при ошибках в плагине на экран
- public String Name
- {
- get { return "FileLinesPlugin"; }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement