Проблема регулярного выражения в C # - PullRequest
0 голосов
/ 21 января 2010

У меня есть файл конфигурации с сотнями строк в следующем формате:

Строка ввода: FHF02030304 | C: \ sd \ dad \ qwe \ re | {203-207} .TXT |5`

Формат: ID|Directory|Text|# txts

Формула для дополнительных строк: Текст (в примере 203) +1 -1.

, поэтому в следующем примере203 +1 -1 = 203 (первый файл) 203 + 2-1 = 204 (2-й файл) Мне нужно перевести это в пример вывода:
FHF02030304 | C: \ sd \ dad \ qwe \ re | 203.txt
FHF02030305 | C: \ sd \ dad \ qwe \ re | 204.txt
FHF02030306 | C: \ sd \ dad \ qwe \ re | 205.txt
FHF02030307 | C: \ sd \dad \ qwe \ re | 206.txt
FHF02030308 | C: \ sd \ dad \ qwe \ re | 207.txt

Поэтому мне в основном приходится переводить одну строку файла в дополнительные строки длякаждый # файлов.

Что я пытаюсь сделать, это взять файл конфигурации и превратить его в полный путь к файлу.так в примере FHF02030304 | C: \ sd \ dad \ qwe \ re | 203.txt
FHF02030305 | C: \ sd \ dad \ qwe \ re | 204.txt
FHF02030306 | C: \ sd \ dad\ qwe \ re | 205.txt
FHF02030307 | C: \ sd \ dad \ qwe \ re | 206.txt
FHF02030308 | C: \ sd \ dad \ qwe \ re | 207.txt

другими словами C: \ sd \ dad \ qwe \ re \ 203.txt - это полный путь.Причина последнего числа после последнего |Это так важно, вот сколько файлов связано с этим файлом.Так что, если бы было | 200, это означало бы, что есть 200 файлов, и мне нужно начинать после первого числа, и идти от # +199 (и это плюс 199, потому что формула это число +1 -1).

Ответы [ 2 ]

0 голосов
/ 21 января 2010

Этот код в C #

public void Run()
{
    string filename = "MikeD.txt";
    using (var tr = new StreamReader(filename))
    {
        string line = null;
        while ((line= tr.ReadLine()) != null)
        {
            System.Console.WriteLine("#orig: {0}",line);
            var tokens = line.Split('|');
            if (tokens.Length == 4)
            {
                // find first numeric digit in tokens[0]
                int n=0;
                while(tokens[0][n]<'0' || tokens[0][n]>'9') n++;

                // get the base for the first output argument
                int b1 = Int32.Parse(tokens[0].Substring(n));

                // get the prefix for the first output arg
                string prefix = tokens[0].Substring(0,n);

                // find the beginning index in tokens[2]
                var p1 = tokens[2].Substring(1).Split('-');
                int b2 = Int32.Parse(p1[0]);

                // find the extension in tokens[2]
                var p2 = tokens[2].Split('.');
                string ext = p2[1];

                // determine how many lines to output
                int x = Int32.Parse(tokens[3]);

                // output the lines
                for (int i=0; i < x; i++)
                {
                    System.Console.WriteLine("{0}{1}|{2}|{3}.{4}",
                                             prefix,
                                             b1+i,
                                             tokens[1],
                                             b2+i,
                                             ext
                                             );
                }

            }
            else
            {
                System.Console.WriteLine("-bad input-");
            }
        }
    }
}

Результат:

#orig: FHF02030304|C:\sd\dad\qwe\re|{203-207}.TXT|5
FHF2030304|C:\sd\dad\qwe\re|203.TXT
FHF2030305|C:\sd\dad\qwe\re|204.TXT
FHF2030306|C:\sd\dad\qwe\re|205.TXT
FHF2030307|C:\sd\dad\qwe\re|206.TXT
FHF2030308|C:\sd\dad\qwe\re|207.TXT
0 голосов
/ 21 января 2010

Это не имеет ничего общего с регулярными выражениями. Я предлагаю вам разбить строки на '|', а затем сгенерировать дополнительные строки в вашей программе. Если я правильно понимаю логику вашего текстового поля (ваше объяснение все еще не ясно), это будет основной алгоритм:

foreach line:
    values = line.split('|')
    text   = values[2]
    number, plus, minus = parse_text(text)
    end = start = number
    end = end + plus - minus
    for (i = start; i != end; i++)
        print values[0], values[1], i, values[3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...