2016-04-19 10 views
0

私の問題は、リストにすべてのデータ行を保存してからリストからTXTを作成するforeachループがあることです。問題は自分のデータがこの形式のTXT:括弧foreachループ内の各データ行へ

["ROW1","DATA1","DATA2","DATA3","ROW2","DATA4","DATA5","DATA6"] 

と私は、このようなデータを持っている私のTXTを作りたい:

[["ROW1","DATA1","DATA2","DATA3"],["ROW2","DATA4","DATA5","DATA6"]] 

別のaditional括弧括弧(「[]」)、どのようにそれぞれの行を取得します別のリストを使わずにこれを行うことはできますか?

これは私のForeachループである:

List<string> listaprocedure = new List<string>(); 
    foreach (DataRow dato in myTable.Rows) 
    { 
     foreach (DataColumn datoC in myTable.Columns) 
     { 
      listaprocedure.Add(dato[datoC].ToString()); 
     } 
    } 

    json4 = JsonConvert.SerializeObject(procedimiento2); 
    System.IO.File.WriteAllText(@"C:\procedure.txt", json4); 
+2

"別のリストを使用しない" - なぜですか?リストのリストは、直列化中に配列を分割するいくつかの奇妙なカスタムコードを思い付くデフォルトのJSONシリアライザでシリアライズするのがずっと簡単です... –

+0

リストのリストを使用すると、私のデータは大きなものであるためSystemutofmmemory exeptionが得られます私はそれを逆転させるために3回それをunlesする私は間違っている@AlexeiLevenkov –

+0

それは奇妙な - 1つの巨大なリストを構築するのは、リストのリストを構築するよりも高価ですメモリの...) –

答えて

1

手動で(最後の行を除く)、それの後に,を追加し、あなたがそれを読んだとして、それぞれ1を書くこと、行を反復処理することができます。さらに、最初と最後に[]を追加します。

非常に醜いですが、本当に大きなテーブルを扱うと助けになります。 ただし、List<List<string>>(またはstring[,])を入力することをお勧めします。とにかくここ

は実施例である:

あなたのサンプルデータが与えられ
using (var reader = File.CreateText("C:\\procedure.txt")) 
{ 
    // Starting outer json array 
    reader.WriteLine("["); 

    for (var rowIndex = 0; rowIndex < myTable.Rows.Count; rowIndex++) 
    { 
     var row = myTable.Rows[rowIndex]; 
     var rowValues = new List<string>(); // can be reused if needed 
     foreach (DataColumn column in myTable.Columns) 
      rowValues.Add(row[column].ToString()); 

     var jsonRow = JsonConvert.SerializeObject(rowValues); 

     // Write current row 
     reader.Write(jsonRow); 

     // Add separating comma 
     if (rowIndex != myTable.Rows.Count - 1) 
      reader.WriteLine(","); 
    } 

    // End outer json array 
    reader.WriteLine("]"); 
} 
+0

私はこの答えをテストしようとしていますが、 "File.CreateText(" C:\\ procedure.txt "))にエラーが表示され、"指定されたコンテキストで有効ではないメソッドです " –

+0

.Net Frameworkあなたが持っている?いつ(コンパイルやランタイム)このメッセージが表示されますか? –

0

、この作品:

var query = 
    from dr in myTable.Rows.OfType<DataRow>() 
    from dc in myTable.Columns.OfType<DataColumn>() 
    group dr[dc].ToString() by dc.Ordinal/4; 

var json4 = JsonConvert.SerializeObject(query); 

をこれは私を与える:

 
[["ROW1","DATA1","DATA2","DATA3"],["ROW2","DATA4","DATA5","DATA6"]] 

私は私を初期化するために、このコードを使用しましたデータ:

var myTable = new DataTable(); 
myTable.Columns.Add("A1", typeof(string)); 
myTable.Columns.Add("A2", typeof(string)); 
myTable.Columns.Add("A3", typeof(string)); 
myTable.Columns.Add("A4", typeof(string)); 
myTable.Columns.Add("B1", typeof(string)); 
myTable.Columns.Add("B2", typeof(string)); 
myTable.Columns.Add("B3", typeof(string)); 
myTable.Columns.Add("B4", typeof(string)); 
myTable.Rows.Add("ROW1", "DATA1", "DATA2", "DATA3", "ROW2", "DATA4", "DATA5", "DATA6");