web-dev-qa-db-ja.com

DataTableをテキストファイルに保存する最短の方法

私はこれに対するいくつかの答えを見つけましたが、それらはすべてひどく長く、多くの反復があることがわかったので、私は独自の解決策を思いつきました:

  1. テーブルを文字列に変換します。

    string myTableAsString = 
        String.Join(Environment.NewLine, myDataTable.Rows.Cast<DataRow>().
            Select(r => r.ItemArray).ToArray().
                Select(x => String.Join("\t", x.Cast<string>())));
    
  2. 次に、文字列をテキストファイルに保存します。次に例を示します。

    StreamWriter myFile = new StreamWriter("fileName.txt");
    myFile.WriteLine(myFile);
    myFile.Close();
    

より短い/より良い方法はありますか?

7

DataTableにmyDataTableという名前を付けたら、次のようにDataSetに追加できます。

var dataSet = new DataSet();
dataSet.AddTable(myDataTable);

// Write dataset to xml file or stream
dataSet.WriteXml("filename.xml");

また、xmlファイルまたはストリームから読み取ることもできます。

dataSet.ReadXml("filename.xml");
10
rageit

@Leonardo申し訳ありませんが、コメントできないので投稿します。

データセットに問い合わせて、それを操作できる場合もあります。このような:

foreach (DataRow row in ds.Tables[0].Rows)
{
    foreach (object item in row.ItemArray)
    {
        myStreamWriter.Write((string)item + "\t");
    }
    myStreamWriter.WriteLine();
}

それは別の方法ですが、どちらがより良いメトリックを提供するかわかりません。

2
paulofer85

スキーマと一緒に保存しない限り、エラーが発生します。

myDataTable.WriteXml("myXmlPath.xml", XmlWriteMode.WriteSchema);
myDatatable.ReadXml("myXmlPath.xml");

スキーマを使用した保存/ロードの詳細については、こちらをご覧ください: DataTableはXmlからのスキーマ推論をサポートしていません。?

1
Danny

XMLをテキストと見なす場合は、次のことができます。myDatatable.WriteXml("mydata.xml")およびmyDatatable.ReadXml("mydata.xml")

1
rlee