1

文字列をテキストファイルから配列に分割して、クラスに格納できるようにしようとしていますが、機能していません。分割せず、textfile.txtで同じ形式を返します

using (StreamReader reader = new StreamReader("textfile.txt"))
{
  string line;
  while ((line = reader.ReadLine()) != null)
  {
    char[] delimiters = new char[] { '\t' };
    string[] parts = line.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
    for (int i = 0; i < parts.Length; i++)
    {
      MessageBox.Show(parts[i]);
    }

  }
}

テキストファイルには次のものが含まれます。

George\t15\tStudent\tAddress\tB:\temp\profilepic.png

私はそれをこのように見せたい(分割後):

George
15
Student
Address
profilepic.png

任意のアイデアや助けていただければ幸いです。

4

4 に答える 4

6

「\t」は「タブ」を意味する特殊文字です。\t実際に使用する必要のある文字列を探したい場合は、"\\t"または@"\t"。それをchar配列にする必要もありません。文字列に過負荷があります。

于 2012-04-20T19:14:38.897 に答える
1

"\\t"分割文字列として使用する必要があります。取得する必要があります:
George
15
Student
Address
B:
emp \ profilepic.png

profilepic.pngではありません

編集:私の答えの"\\t"ように表示されました"\t"

于 2012-04-20T19:17:36.873 に答える
1

提供したサンプルラインを使用すると、おそらく次の正規表現を使用するのが最も近いと思います。これを試してみると、パスが表示されないようにすることができます。または、ループ内で次のチェックを行うこともできます。パスしてスキップします。これにより、パスかどうかがわかります。[a-zA-Z]:\\\w*?\\

string[] results = Regex.Split(line, @"(?<!B:)\\t|(?<=B:\\\w*?\\)");

次のリストが作成されます。

  • ジョージ
  • 15
  • 学生
  • 住所
  • B:\ temp \
  • profilepic.png
于 2012-04-20T20:41:25.930 に答える
0

ここで発生している問題は、エスケープシーケンスにあります。''で始まる文字の組み合わせ\はエスケープシーケンスと見なされ、通常の文字列とは動作が異なります。リンクの表からわかるように、' \t'は水平タブを表します。したがって、C#\tで区切り文字として''を使用すると、水平タブが検索されますが、プレーンテキストには実際の文字シーケンス' \t'が含まれています。これは、探しているものです。

\t問題は、区切り文字として使用するときに水平タブを検索する場合、どうすれば''を見つけることができるかということです。答えはリンクにも示されています。' \\'は''の表現です\(それについて考える場合は必要です。そうでない場合は、' \(anything)'をどのように探すことができますか。したがって、区切り文字は' \\t'である必要があります。

(すべてを文字配列に変換せずに、文字列でもこれを実行できることに注意してください。原則は引き続き適用されます)

于 2012-04-20T19:24:14.263 に答える