2016-03-31 26 views
-1

にbreak文を入れたときに、それはすべきではないという情報を返しますこのコードを持っている:は、私は例が</p> <pre><code>COL1 COL2 A X A X A X A X A X B X B X B X C X C X C X </code></pre> <p>Iされて、私はタイプA、BおよびCを持つSQLデータベースから情報を取得しようとしている

StringBuilder sb = new StringBuilder(); 
     string line = ""; 
     string d = ","; 
     foreach (DataColumn c in T.Columns) 
     { 
      line = line + c.ColumnName + d; 
     } 
     sb.AppendLine(line); 
     foreach (DataRow r in T.Rows) 
     { 
      line = ""; 
      for (int i = 0; i < T.Columns.Count; i++) 
      { 
       DataRow R = T.Rows[i]; 
       if (R[0].ToString() != "A") 
       { 
        break; 
       } 
       line = line + r[i].ToString() + d; 
      } 
      sb.AppendLine(line); 
     } 

     File.WriteAllText(filePath, sb.ToString()); 

私はこれを実行すると、私の出力(CSVファイル)を取得しようとすると、私はちょうどそれがAの値を返すと、停止したいとき、それはすべての行とA、BおよびCの値を返します。

アドバイスはありますか?

+0

は)[I] .ToString(line =行+ rはそれを置きます+ d;内部でif(R [0] .ToString()== "A")文を削除してからブレークを取り除く – rashfmnb

+0

'i'が列のインデックスであれば、' DataRow R = T.Rows [i ] '? 1つの行と5つの列がある場合はどうなりますか?それは例外をスローします。 – juharr

+0

私の謝罪juharr、私は完全なクラスを見ることができるようにあなたのためのコードを更新します – Nonagon

答えて

0

最初の列をチェックして、行を出力するかどうかを決定してください。

foreach (DataRow r in T.Rows) 
{ 
    if(r[0]=="A") 
    { 
     line = ""; 
     for (int i = 0; i < T.Columns.Count; i++) 
     { 
      line = line + r[i].ToString() + d; 
     } 
     sb.AppendLine(line); 
    } 
} 
File.WriteAllText(filePath, sb.ToString()); 

あなたの行を発注し、あなたがAで始まらない最初の行の後に停止することができます知っている場合:

foreach (DataRow r in T.Rows) 
{ 
    if(r[0]!="A") break; 

    line = ""; 
    for (int i = 0; i < T.Columns.Count; i++) 
    { 
     line = line + r[i].ToString() + d; 
    } 
    sb.AppendLine(line); 
} 
File.WriteAllText(filePath, sb.ToString()); 
+0

こんにちはスティーブン r [0]をr [0]に変更する必要がありました.ToString()は動作するようにしましたが、魅力的に機能しました ありがとう – Nonagon

関連する問題