3

このようなテキスト ファイルを検索する最良の方法は何でしょうか..?

イーフィー|| 番号| 住所| 名前 |電話|都市|都道府県|郵便番号
abc ||455|gsgd |first last|gsg |fef |jk |
0393 gjgj||jfj|ddg
|first last|fht |ree |hn |th ...more lines.. .

「|」をカウントすることを考えていたストリームリーダーを使用して、ファイルとそのすべてのコンテキストを読み取ることから始めました。部分文字列を使用して5番目と6番目の間のテキストを取得しますが、「|」のカウント方法がわかりません。または、誰かがより良いアイデアを持っている場合、私はそれを受け入れます. 次のようなことを試しました:

StreamReader file = new StreamReader(@"...");
        string line;
        int num=0;
        while ((line = file.ReadLine()) != null)
        {
            for (int i = 1; i <= 6; i++)
            {
                if (line.Contains("|"))
                {
                    num++;
                }
            }
            int start = line.IndexOf("|");

            int end = line.IndexOf("|");
            string result = line.Substring(start, end - start - 1);
        }

私が信じたいテキストは、常に 5 番目と 6 番目の "|" の間にあります。

4

4 に答える 4

2

次のように実行できます。

var res = File
    .ReadLines(@"FileName.txt")
    .Select(line => line.Split(new[]{'|'}, StringSplitOptions.None)[5])
    .ToList();

これによりList<strings>、ファイルから が生成されます。各文字列は、ファイルの対応する行の 5 番目と 6 番目の'|'区切り文字の間から取得された部分です。

于 2012-12-21T20:38:41.610 に答える
1

区切りファイルの場合は、パーサーを使用する必要がありMicrosoft.VisualBasic.FileIOます (名前空間にパーサーがあります)。ただし、一般的なFileHelpersTextFieldParserなどのサードパーティ ライブラリを調べることもできます。

より簡単な方法はstring.Split、文字に対して を使用し、|返された の対応するインデックスで値を取得することですが、string[]いずれかのフィールドがエスケープされ、|内部的に有効に含めることができる場合、これは失敗します。

于 2012-12-21T20:40:29.117 に答える
0

これはうまくいくはずです

string txt = File.ReadAllText("file.txt");
string res = Regex.Match(txt, "\\|*?{5}(.+?)\\|", RegexOptions.Singleline).Result("$1");
于 2012-12-21T20:41:21.003 に答える
0

各行を配列に分割できます。

while ((line = file.ReadLine()) != null)
{
    var values = line.Split('|');
}
于 2012-12-21T20:37:09.093 に答える