从一个数据表构建制表符分隔文件

时间:2011-01-11 18:23:29

标签: c# text datatable

我有一个数据表:

        var dt = new DataTable();
        dt.Columns.Add(new DataColumn("specimen", typeof(string)));
        dt.Columns.Add(new DataColumn("batch", typeof(string)));
        dt.Columns.Add(new DataColumn("position", typeof(string)));

数据内部看起来像这样:

Spec. ID    Batch/Pos.  position
AA00721 16785   3
AA00722 16785   2
AA00734 16785   3
AA00735 16860   6
AA00737 16862   4
AA00738 16860   7
AA00739 16863   5
AA00740 16860   9
AA00741 16861   7
AA00742 16861   0
AA00743 16861   5

对于每个唯一批次,我需要创建一个包含所有specID和位置的文件。

例如文件16785.txt看起来像这样:

AA00721 3
AA00722 2
AA00734 3

我将如何遍历此数据表以创建单独的文件>?请假设批号未分类

2 个答案:

答案 0 :(得分:5)

如果您想使用LINQ方法,我会将您的数据分组到批处理中,然后遍历这些组。

var groupedData = from DataRow row in dt.Rows
                    let specimen = row["specimen"].ToString()
                    let batch = row["batch"].ToString()
                    let position = row["position"].ToString()
                    group new { specimen, position } by batch;

foreach (var dataGroup in groupedData)
{
    string fileName = string.Format(@"C:\Temp\{0}.txt", dataGroup.Key); // construct filename based on batch?
    using (StreamWriter writer = new StreamWriter(fileName))
    {
        foreach (var item in dataGroup)
        {
            writer.WriteLine("{0}\t{1}", item.specimen, item.position);
        }
    }
}

答案 1 :(得分:0)

创建数据视图并根据批次编号对其进行排序。然后遍历每一行并将specid和postion写入文件。将bactch编号存储在循环外部。如果每次bacth编号改变,则创建新文件。 可能还有其他方法可以做到,但我发现这个方法很简单。