2011-12-05 51 views
1

テキストファイルから取り出された値を配列に格納しました。これらの配列値を以下のコードを持つデータテーブルに格納しようとしています。配列をデータテーブルに格納

最初の行に20個の値があり、2番目の行に23個の値がある場合、最後の20(1行目の列カウント)が空のデータテーブルに43個のセルが作成されるという問題があります。これは各行に対して継続されます。配列をデータテーブルに格納する他の方法はありますか?

var reader = new StreamReader(File.OpenRead(@"d:\er.txt")); 
var table = new DataTable("SampleTable"); 

while (!reader.EndOfStream) 
{ 
    var line = reader.ReadLine().Trim(); 
    var values = line.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries); 
    string[] ee = values; 
    var newRow = table.NewRow(); 
    for (int i = 0; i < ee.Length; i++) 
    { 
     table.Columns.Add(); 
     newRow[i] = ee[i].Trim().ToString(); // like sample [0,0] 
    } 
    table.Rows.Add(newRow); 
} 
+0

テーブルは長方形であるため、ここで何をしたいですか? 「成功」とは何でしょうか? –

+0

は、何をしようとしているのかを明らかにするために、出力テーブルの構造を示しています。あなたはDataTableで行うことはできません。 –

+0

ファイルが区切られている、FileHelpers.Netを使用してデータテーブルにまっすぐ行くことを検討 - あなたがしなければならない任意の解析を排除します。 1つの使用方法については、http://stackoverflow.com/questions/1898/csv-file-imports-in-netを参照してください。カンマだけでなく、任意の区切り文字を使用できます。 – dash

答えて

2

これは、テーブルに追加する値ごとに列を追加するためです。必要な場合は、別の列を追加するだけです。次のようなもので十分です。

var reader = new StreamReader(File.OpenRead(@"d:\er.txt")); 
var table = new DataTable("SampleTable"); 
int columnCount = 0; 
while (!reader.EndOfStream) 
{ 
    var line = reader.ReadLine().Trim(); 
    var values = line.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries); 
    string[] ee = values; 
    while (columnCount < ee.Length) 
    { 
    // Only add a new column if it's required. 
    table.Columns.Add(); 
    columnCount++; 
    } 
    var newRow = table.NewRow(); 
    for (int i = 0; i < ee.Length; i++) 
    { 
     newRow[i] = ee[i].Trim().ToString(); // like sample [0,0] 
    } 
    table.Rows.Add(newRow); 
} 
+0

それが正しい – Karthik

関連する問題