1

タブで区切られた多くの行と 18 列のデータで構成されるテキスト ファイルがあります。このコードを使用すると、データ全体が 1 つの列に表示されます。私が必要とするのは、データを列に表示することです。

public static List<string> ReadDelimitedFile(string docPath)
{
    var sepList = new List<string>();           

    // Read the file and display it line by line.
    using (StreamReader file = new StreamReader(docPath))
    {
        string line;

        while ((line = file.ReadLine()) != null)
        {

            var delimiters = new char[] { '\t' };
            var segments = line.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);

            foreach (var segment in segments)
            {
                //Console.WriteLine(segment);
                sepList.Add(segment);
            }

        }

        file.Close();
    }
    // Suspend the screen.
    Console.ReadLine();
    return sepList;
}
4

4 に答える 4

0

次のようにすべてを 1 つの列に出力しています (構造を説明するための疑似コード)。

while (reading lines)
  for (reading entries)
    WriteLine(entry)

つまり、ファイルのすべての行とその行のすべてのエントリに対して、新しい行を出力します。代わりに、ファイル内のすべての行に対して新しい行のみを書き込み、エントリをセパレータ (タブ?) で書き込みます。このようなもの:

while (reading lines)
  for (reading entries)
    Write(entry)
  WriteLine(newline)

そうすれば、ファイル内の特定の行のすべてのエントリが出力の同じ行に表示されます。

もちろん、出力でこれらのエントリをどのように区切るかは、あなた次第です。そして、キャリッジ リターンを書くのは のように簡単かもしれませConsole.WriteLine(string.Empty)んが、それを行う方法は他にもたくさんあるに違いありません。

于 2013-11-09T13:07:02.077 に答える
0

DataTableまたは同様のタイプを使用する必要がありますが、使用したい場合はList、次のように行と列を「エミュレート」できます。

var rows = new List<List<string>>();
foreach(var line in File.ReadAllLines(docPath))
{
    var columns = line.Split(new char[] { '\t' }, StringSplitOptions.RemoveEmptyEntries).ToList();
    rows.Add(columns);
}

これにより、行/列のような構造が得られます

foreach(var row in rows)
{
    foreach(var column in row)
    {
       Console.Write(column + ",");
    }
    Console.WriteLine();
}
于 2013-11-09T13:22:23.463 に答える