我有一个我正在搜索的文本文件,我想跳过每行中的10个第一个字符。
每一行以[10:16:01]
开头,这就是我想要跳过的内容,我想在行中找到下一个数字并将数字加在一起。
这是我到目前为止所做的事情
foreach (string line in lines)
{
string a = line.Remove(0, 10);
if (a.Contains("whateverimsearchingfor"))
{
string resultString = Regex.Match(a, @"\d+").Value;
int result = Int32.Parse(resultString);
total += result
}
提前致谢!
抱歉,当我尝试构建时,我得到:
ArgumentOutOfRangeException未处理 index和count必须引用字符串中的位置
它指向字符串a = line.remove(0,10)
希望这已经足够了。
答案 0 :(得分:5)
问题似乎是文件中的某些行太短,因此line.Remove
将失败,因为要删除的字符串中没有足够的字符。使用此代码可以跳过任何太短而无法处理的行:
foreach (string line in lines)
{
if (line.Length < 10)
continue;
string a = line.Remove(0, 10);
...
}
或者,如果您在发布的代码下面有其他处理,即使行太短,您也想要运行:
foreach (string line in lines)
{
if (line.Length >= 10)
{
string a = line.Remove(0, 10);
...
}
}
答案 1 :(得分:4)
如果您只想处理带有数字的行:
foreach (string line in lines.Where(l => l.Length >= 10))
这会跳过短于10个字符的行。
您ArgumentOutOfRangeException
上的string.Remove
是因为(MSDN):
startIndex或count小于零。 - 或者 - startIndex加上count指定此实例之外的位置。
答案 2 :(得分:0)
我看到你已经接受了答案,但无论如何我都会留在这里。
你的问题有点模糊,听起来像正则表达不是你唯一的选择。如果您只想跳过前10个字符,可以使用子字符串并跳过正则表达式。看at this example here for sub strings.
这是一个简单的例子:
String input = "0123456789Hello World";
String sub = input.Substring(10, input.Length - 10);
Console.WriteLine(sub);
第一个参数是您要开始子字符串的位置,第二个参数是您希望从原始字符开始的字符数。
在您的代码中:
foreach(String line in lines)
{
String sub = line.Substring(10, line.Length - 10);
}
编辑:
或者,您可以使用更简单的Substring调用。该调用将在给定索引之后返回整个字符串。
foreach(String line in lines)
{
String sub = line.Substring(10);
}