1

我有一个正在搜索的文本文件,我想跳过每行的前 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 是未处理的索引,并且计数必须引用字符串中的位置

它指向字符串 a = line.remove(0, 10)

希望这已经足够了。

4

3 回答 3

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);
        ...
    }
}
于 2013-06-25T21:09:23.413 回答
4

如果您只想处理带有数字的行:

foreach (string line in lines.Where(l => l.Length >= 10))

这会跳过少于 10 个字符的行。

你开始了ArgumentOutOfRangeExceptionstring.Remove因为(MSDN):

startIndex 或 count 都小于零。-或 - startIndex 加上 count 指定此实例之外的位置

于 2013-06-25T21:10:17.607 回答
0

我看到你已经接受了答案,但无论如何我都会把它留在这里。

你的问题有点模棱两可,听起来正则表达式不是你唯一的选择。如果您只想始终跳过前 10 个字符,则可以使用子字符串并跳过正则表达式。在此处查看此示例以获取子字符串。

这是一个简单的例子:

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);
}
于 2013-06-25T21:29:09.400 回答