0

私が抱えているエラーを表すためにこのコードを書きました。良いです。ファイル入力に移動すると、try / catchに落ち、画面に表示されるだけです。行は無効な文字です...良い、私は知っていますエラーは無効な文字ですが、エンコーディングにはこの形式を使用する必要があり、私たちの言語にはアクセントがあり、それらを正しく処理する必要があります....しかし、文字が無効な場合、linq.

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                var lines = File.ReadAllLines(args[0], Encoding.GetEncoding(1252));

                var sortedLines = lines.Skip(1)
                          .Where(x => !Regex.IsMatch("[\r\n]+", x))
                          .Take(lines.Length - 1)
                          .ToArray();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
}

ファイル入力サンプル:

014082013  
1BR 116 S\N
9      

無効な文字は次のとおりです。\

それで、どうすればこれを解決できますか?

4

1 に答える 1

4

エラーは、LINQ ではなく、正規表現から発生しています。

行をパターンとして渡したので、「\N」は無効なエスケープ シーケンスです。大文字と小文字が区別されることに注意してください。そのような行がある場合:

1BR 116 S\n

既存のコードでエラーが発生することはありません。

とにかく、これを解決するには、引数の順序を入れ替えるだけです:

.Where(x => !Regex.IsMatch(x, "[\r\n]+"))

経験則として、try..catchブロックに複数の行がある場合は、例外メッセージのみを表示することはありません。常にスタック トレースを含む例外全体を表示して、エラーの原因を推測する代わりに、これらのエラーを適切にデバッグできるようにします。

于 2013-08-20T12:45:18.907 に答える