Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.IO;
  3. using System.Text;
  4. using System.Linq;
  5. using System.Text.RegularExpressions;
  6. using System.Collections;
  7. using System.Collections.Generic;
  8.  
  9. namespace PandoraBox
  10. {
  11.     //Плагин макроса, аналогичного UNIQLINE, но начинающего читать файл снова с начала по достижении конца
  12.     public class FileLinesPlugin : IPluginMacro
  13.     {        
  14.         // Регулярка которая ищет макрос
  15.         Regex _block = new Regex(@"\[FILELINES-\(([^)]+?)\)\]", RegexOptions.Compiled | RegexOptions.Multiline);
  16.  
  17.         // Основной метод, реализация которого выполняет обработку пользовательского макроса
  18.         public string Execute(string template, PluginMacroArgs args)
  19.         {  
  20.             //проверка регулярки
  21.             Match match = _block.Match(template);
  22.             //успешно применилась
  23.             if(match.Success)
  24.             {
  25.                 //папка из параметров
  26.                 String dir = match.Groups[1].Value;
  27.                 // папка лежит в data
  28.                 String path = Path.Combine("data", dir);
  29.                 // в ней рандомный файл
  30.                 String randFile = GetRandFile(path);
  31.                 // файлы есть еще
  32.                 if(randFile != null)
  33.                 {
  34.                     // из него строки по порядку
  35.                     List<String> lines = File.ReadAllLines(randFile, Encoding.GetEncoding(1251)).ToList();
  36.                    
  37.                     //обработка макроса
  38.                     template = _block.Replace(template, new MatchEvaluator(m =>
  39.                     {
  40.                         //если кончились строчки
  41.                         if (lines.Count == 0)
  42.                             return "[Строки кончились]";
  43.  
  44.                         //берем строчку
  45.                         String res = lines[0];
  46.                        
  47.                         //и удаляем
  48.                         lines.RemoveAt(0);
  49.  
  50.                         //возвращаем строчку
  51.                         return res;
  52.                     }));      
  53.                    
  54.                     // и удаляем файл
  55.                     File.Delete(randFile);                    
  56.                 }
  57.                 else
  58.                     //Файлы кончились
  59.                     return _block.Replace(template, new MatchEvaluator(m =>
  60.                     {
  61.                         return "[Файлы кончились]";
  62.                     }));                          
  63.             }
  64.            
  65.             return template;
  66.         }        
  67.        
  68.         // получение рандомного файла из папки
  69.         private string GetRandFile(String path)
  70.         {
  71.             String[] files = Directory.GetFiles(path);
  72.             if(files.Length == 0) return null;
  73.             String rndFile = files[Rnd.Next(0, files.Length - 1)];
  74.             return rndFile;
  75.         }
  76.  
  77.         // Уровень срабатывания плагина. Значения от 0 до 10. 0 - самый ранний уровень срабатывания, 10 - самый поздний
  78.         public ushort Level
  79.         {
  80.             get { return 10; }
  81.         }
  82.  
  83.         // Имя плагина для отладки. Выводится при ошибках в плагине на экран
  84.         public String Name
  85.         {
  86.             get { return "FileLinesPlugin"; }
  87.         }
  88.  
  89.     }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement