我正在用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.
}
}
答案 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.
}
}
}
}