StreamReader从文本文件中读取一行并选择一个符合条件的单词

时间:2018-07-26 20:02:02

标签: c# streamreader

我正在用C#编写一个程序,以使用流读取器读取文本文件。  一行显示“数据集WORK.Test具有0个观察值和5个变量”。 流阅读器必须阅读此行,并根据观察数进入“ if else循环”。 。我如何使流阅读器选择0观察值或不选择观察值。

System.IO.StreamReader file = new System.IO.StreamReader(@FilePath);
List<String> Spec = new List<String>();
while (file.EndOfStream != true)
{
    string s = file.ReadLine();
    Match m = Regex.Match(s, "WORK.Test has");
    if (m.Success)
    {
        // Find the number of observations  
        // and send an email if there are more than 0 observations.
    }
}

2 个答案:

答案 0 :(得分:0)

我不清楚您想要实现什么。在您的示例中,您只想获取“有”和“服从”之间的数字?为什么不使用Regex? 顺便说一句,您提供的那个错误的是“”。匹配任何东西。您宁可尝试int gcd(int a, int b) => b == 0 ? a : gcd(b, a % b); public int[] solution(int[] A, int K) { for (var i = 0; i < gcd(A.Length, K); i++) { for (var j = i; j < A.Length - 1; j++) { var destIndex = ((j-i) * K + K + i) % A.Length; if (destIndex == i) break; var destValue = A[destIndex]; A[destIndex] = A[i]; A[i] = destValue; } } return A; }

答案 1 :(得分:0)

您应该修改Regex

C# Regex类中,您在( )中放入的任何内容都将被捕获到一个组项目中。因此,假设您的输入字符串看起来像您指定的数字(数字除外),则可以使用\d+捕获观测值和变量。

\d-搜索一个数字。

\d+-搜索一个或多个数字。

using (FileStream fs = new FileStream("File.txt", FileMode.Open, FileAccess.Read))
{
    using (StreamReader sr = new StreamReader(fs))
    {
        while (!sr.EndOfStream)
        {
            var line = sr.ReadLine();
            var match = Regex.Match(line, @"WORK.Test has (\d+) observations and (\d+) variables");
            if (match.Success)
            {
                int.TryParse(match.Groups[1].Value, out int observations);
                int.TryParse(match.Groups[2].Value, out int variables);
                // Send EMail etc.
            }
        }
    }
}