为什么不读取文件中的下一行?

时间:2016-12-06 12:19:25

标签: c#

我正在尝试将字符串设置为从txt文件中读取一行,该文件提供文件的位置以进行其工作但由于某种原因它不想读取下一行并继续生成相同的结果相当于第0行。

private void GetRaceNameButton_Click(object sender, EventArgs e)
    {
        string TestRaceNameFile = "g:\\Racing App\\RaceTestFile.s";
        string TestRaceNameFileUnknown = "g:\\Racing App\\RaceTestFileUnknown.s";

        System.IO.File.WriteAllText(TestRaceNameFile, string.Empty);
        System.IO.File.WriteAllText(TestRaceNameFileUnknown, string.Empty);
        var LinePosition2 = 0;
        String UpdateFileName = File.ReadLines(@"G:\\Racing App\\Update\\all.info").ElementAtOrDefault(LinePosition2);

        StreamReader sr;
        sr = new StreamReader(UpdateFileName);
        var set = sr.ReadToEnd();

        using (StreamReader su = File.OpenText(UpdateFileName))
        {
            string f = String.Empty;
            while ((f = su.ReadLine()) != null)
            {
                var GetRace = new Regex(@"(?<=headline: "")(.*?)(?=""[,])").Matches(set);
                foreach (var Race in GetRace)
                {
                    string RaceToString = Race.ToString();

                    //Sweepstakes                        if (RaceToString.Contains("Sweepstakes") && !RaceToString.Contains("Juvenile") && !RaceToString.Contains("Mares") && !RaceToString.Contains("Apprentice") && !RaceToString.Contains("Amateur") && !RaceToString.Contains("Maiden") && !RaceToString.Contains("Fillies") && !RaceToString.Contains("INH") && !RaceToString.Contains("Beginners") && !RaceToString.Contains("Classified") && !RaceToString.Contains("Conditional") && !RaceToString.Contains("Conditioning") && !RaceToString.Contains("Conditions") && !RaceToString.Contains("National Hunt") && !RaceToString.Contains("Novices") && !RaceToString.Contains("Selling") && !RaceToString.Contains("Handicap") && !RaceToString.Contains("Intermediate") && !RaceToString.Contains("Hunter") && !RaceToString.Contains("Claiming") && !RaceToString.Contains("Hurdle") && !RaceToString.Contains(" Stakes") && !RaceToString.Contains("Chase") && !RaceToString.Contains("Flat"))
                    {
                        File.AppendAllText(TestRaceNameFile, RaceToString + Environment.NewLine);
                        File.AppendAllText(TestRaceNameFile, "Sweepstakes" + Environment.NewLine);
                        File.AppendAllText(TestRaceNameFile, Environment.NewLine);
                    }

                }

            LinePosition2++;
            Console.WriteLine(LinePosition2);

//Sweepstakes标签是222中的一个,因为有这么多组合所以我只显示了1。 据我所知,我认为这是正确的,但不起作用。 它搜索的文本文件就像这样

  

G:\分析器\ HT4 \ 1996 \八月\ 01-15 \ 1996年1月8日\古德伍德\结果\ 130988 \权益金融集合-苗圃赌注-handicap.ht4

210000行+  它只是一遍又一遍地将相同的2行文本添加到输出文件中。

这是一件简单的事情我做错了还是我错了?

2 个答案:

答案 0 :(得分:1)

您应该将正则表达式对象GetRace应用于变量f,如下所示:

var matchesFound = GetRace.Matches(f);

然后根据if的内容生成matchesFound - 语句 请参阅 MSDN reference

同样昂贵且不需要反复创建GetRace Regex对象。在.NET中,可以安全地多次使用Regex对象。因此,最好将行var GetRace = new Regex(....);放在while循环之前。

答案 1 :(得分:1)

在循环中,您始终在set上应用RegEx,但该变量永远不会更改。

相反,f保存当前行的内容,但该变量永远不会在循环中使用。