Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#格式化正则表达式问题_C#_Regex - Fatal编程技术网

C#格式化正则表达式问题

C#格式化正则表达式问题,c#,regex,C#,Regex,我的配置文件有100行,格式如下: 输入行:FHF02030304|C:\sd\dad\qwe\re{203-207}.TXT|5` 格式为:ID |目录|文本|#txts 附加行的公式是Text(在示例203中)+1-1 所以在下面的例子203+1-1=203(第一个文件) 203+2-1=204(第二个文件) 我需要把它翻译成 示例输出: FHF02030304|C:\sd\dad\qwe\re|203.txt FHF02030305|C:\sd\dad\qwe\re|204.txt FHF

我的配置文件有100行,格式如下:

输入行:FHF02030304|C:\sd\dad\qwe\re{203-207}.TXT|5`

格式为:
ID |目录|文本|#txts

附加行的公式是Text(在示例203中)+1-1

所以在下面的例子203+1-1=203(第一个文件) 203+2-1=204(第二个文件) 我需要把它翻译成 示例输出:
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)。

这与正则表达式无关。我建议您在“|”处拆分行,然后在程序中生成附加行。如果我正确理解了文本字段背后的逻辑(您的解释仍然不清楚),这将是基本算法:

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]
这段代码是用C编写的#


我读了几遍,我不明白你所说的“文本分割公式”是什么意思。你举了203+1-1=203这样的例子,这很好,但我不明白你在说什么。我也不知道你所说的“把文件的一行翻译成其他行”是什么意思。也许可以举个例子:XXX是输入,YYY是期望的输出。@Cheeso我做了一个编辑,我看你已经编辑了这个问题。这更清楚。但我还是不清楚。你还要多少行?#txts是否与原始行中的{203-207}冗余?为什么需要将大括号中的数字指定为一个范围?难道你不能列出第一个,并假设“#txts”将指定你需要多少?如果“#txts”大于或小于“Text”中指定的范围,会发生什么情况?谢谢,我可以看到您将如何使用它。然而,在我的第一篇专栏中,它删掉了00。。。就像FHF00023540正在变成FHF23540一样
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