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 文字未満の行がスキップされます。

あなたは(MSDNArgumentOutOfRangeException )の理由でオンになっています:string.Remove

startIndex または count のいずれかが 0 未満です。- または - 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);

最初のパラメーターは部分文字列を開始する場所で、2 番目のパラメーターは元の文字列から必要な文字数です。

あなたのコードで:

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 に答える