C# 如何使用C中的数据集将数据导出到对齐的.txt文件

C# 如何使用C中的数据集将数据导出到对齐的.txt文件,c#,C#,我一直在尝试使用数据集将一些数据导出到一个完全类似网格的对齐.txt文件中。我想做的是5列和25列,但我不能让它在60列中工作。还有别的选择吗 我已经尝试将if与制表符一起使用,因为由于某些列的位数少于其他列,所以这些列没有对齐 DataTable mytable = new DataTable("mytable"); objDataAdaptermytable.Fill(mytable); var builder3 = new StringBuilder(); foreach (DataRow

我一直在尝试使用数据集将一些数据导出到一个完全类似网格的对齐.txt文件中。我想做的是5列和25列,但我不能让它在60列中工作。还有别的选择吗

我已经尝试将if与制表符一起使用,因为由于某些列的位数少于其他列,所以这些列没有对齐

DataTable mytable = new DataTable("mytable");
objDataAdaptermytable.Fill(mytable);
var builder3 = new StringBuilder();
foreach (DataRow row in mytable.Rows)
{
    int count = row.ItemArray[2].ToString().Length;
    int count2 = row.ItemArray[3].ToString().Length;
    int count3 = row.ItemArray[4].ToString().Length;
    int count4 = row.ItemArray[7].ToString().Length;
    MessageBox.Show(count2.ToString());
    if (count == 6)
    {
        builder3.AppendLine(String.Join(";" + "\t" + "\t", row.ItemArray[0], row.ItemArray[1], row.ItemArray[2])+ ";" + "\t" + "\t" + "\t" + row.ItemArray[3] + ";" + "\t" + "\t" + "\t" + (String.Join(";" + "\t" + "\t", row.ItemArray[4], row.ItemArray[5], row.ItemArray[6], row.ItemArray[7], row.ItemArray[8], row.ItemArray[9], row.ItemArray[10], row.ItemArray[11], row.ItemArray[12], row.ItemArray[13], row.ItemArray[14], row.ItemArray[15], row.ItemArray[16], row.ItemArray[17], row.ItemArray[18], row.ItemArray[19], row.ItemArray[20], row.ItemArray[21], row.ItemArray[22], row.ItemArray[23], row.ItemArray[24], row.ItemArray[25], row.ItemArray[26], row.ItemArray[27], row.ItemArray[28], row.ItemArray[29], row.ItemArray[30], row.ItemArray[31], row.ItemArray[32], row.ItemArray[33], row.ItemArray[34], row.ItemArray[35], row.ItemArray[36], row.ItemArray[37], row.ItemArray[38], row.ItemArray[39], row.ItemArray[40], row.ItemArray[41], row.ItemArray[42], row.ItemArray[43], row.ItemArray[44], row.ItemArray[45], row.ItemArray[46], row.ItemArray[47], row.ItemArray[48], row.ItemArray[49], row.ItemArray[50], row.ItemArray[51], row.ItemArray[52], row.ItemArray[53], row.ItemArray[54], row.ItemArray[55], row.ItemArray[56], row.ItemArray[57], row.ItemArray[58], row.ItemArray[59])));
        if (count2 == 6)
        {
            builder3.AppendLine(String.Join(";" + "\t" + "\t", row.ItemArray[0], row.ItemArray[1], row.ItemArray[2]) + ";" + "\t" + "\t" + "\t" + row.ItemArray[3] + ";" + "\t" + "\t" + "\t"  + row.ItemArray[4] + "; " + "\t" + "\t"+ (String.Join(";" + "\t" + "\t",  row.ItemArray[5], row.ItemArray[6], row.ItemArray[7], row.ItemArray[8], row.ItemArray[9], row.ItemArray[10], row.ItemArray[11], row.ItemArray[12], row.ItemArray[13], row.ItemArray[14], row.ItemArray[15], row.ItemArray[16], row.ItemArray[17], row.ItemArray[18], row.ItemArray[19], row.ItemArray[20], row.ItemArray[21], row.ItemArray[22], row.ItemArray[23], row.ItemArray[24], row.ItemArray[25], row.ItemArray[26], row.ItemArray[27], row.ItemArray[28], row.ItemArray[29], row.ItemArray[30], row.ItemArray[31], row.ItemArray[32], row.ItemArray[33], row.ItemArray[34], row.ItemArray[35], row.ItemArray[36], row.ItemArray[37], row.ItemArray[38], row.ItemArray[39], row.ItemArray[40], row.ItemArray[41], row.ItemArray[42], row.ItemArray[43], row.ItemArray[44], row.ItemArray[45], row.ItemArray[46], row.ItemArray[47], row.ItemArray[48], row.ItemArray[49], row.ItemArray[50], row.ItemArray[51], row.ItemArray[52], row.ItemArray[53], row.ItemArray[54], row.ItemArray[55], row.ItemArray[56], row.ItemArray[57], row.ItemArray[58], row.ItemArray[59])));
            if (count3 == 6)
            {
                builder3.AppendLine(String.Join(";" + "\t" + "\t", row.ItemArray[0], row.ItemArray[1], row.ItemArray[2]) + ";" + "\t" + "\t" + "\t" + row.ItemArray[3] + ";" + "\t" + "\t" + "\t" + row.ItemArray[4] + "; " + "\t" + "\t" + "\t" + (String.Join(";" + "\t" + "\t", row.ItemArray[5], row.ItemArray[6], row.ItemArray[7], row.ItemArray[8], row.ItemArray[9], row.ItemArray[10], row.ItemArray[11], row.ItemArray[12], row.ItemArray[13], row.ItemArray[14], row.ItemArray[15], row.ItemArray[16], row.ItemArray[17], row.ItemArray[18], row.ItemArray[19], row.ItemArray[20], row.ItemArray[21], row.ItemArray[22], row.ItemArray[23], row.ItemArray[24], row.ItemArray[25], row.ItemArray[26], row.ItemArray[27], row.ItemArray[28], row.ItemArray[29], row.ItemArray[30], row.ItemArray[31], row.ItemArray[32], row.ItemArray[33], row.ItemArray[34], row.ItemArray[35], row.ItemArray[36], row.ItemArray[37], row.ItemArray[38], row.ItemArray[39], row.ItemArray[40], row.ItemArray[41], row.ItemArray[42], row.ItemArray[43], row.ItemArray[44], row.ItemArray[45], row.ItemArray[46], row.ItemArray[47], row.ItemArray[48], row.ItemArray[49], row.ItemArray[50], row.ItemArray[51], row.ItemArray[52], row.ItemArray[53], row.ItemArray[54], row.ItemArray[55], row.ItemArray[56], row.ItemArray[57], row.ItemArray[58], row.ItemArray[59])));
                if (count4==6)
                {
                    builder3.AppendLine(String.Join(";" + "\t" + "\t", row.ItemArray[0], row.ItemArray[1], row.ItemArray[2]) + ";" + "\t" + "\t" + "\t" + row.ItemArray[3] + ";" + "\t" + "\t" + "\t" + row.ItemArray[4] + "; " + "\t" + "\t" + "\t" + (String.Join(";" + "\t" + "\t", row.ItemArray[5], row.ItemArray[6], row.ItemArray[7]+";"+"\t"+"\t"+"\t"+ row.ItemArray[8]+";" + "\t" + "\t" + (String.Join(";" + "\t" + "\t", row.ItemArray[9], row.ItemArray[10], row.ItemArray[11], row.ItemArray[12], row.ItemArray[13], row.ItemArray[14], row.ItemArray[15], row.ItemArray[16], row.ItemArray[17], row.ItemArray[18], row.ItemArray[19], row.ItemArray[20], row.ItemArray[21], row.ItemArray[22], row.ItemArray[23], row.ItemArray[24], row.ItemArray[25], row.ItemArray[26], row.ItemArray[27], row.ItemArray[28], row.ItemArray[29], row.ItemArray[30], row.ItemArray[31], row.ItemArray[32], row.ItemArray[33], row.ItemArray[34], row.ItemArray[35], row.ItemArray[36], row.ItemArray[37], row.ItemArray[38], row.ItemArray[39], row.ItemArray[40], row.ItemArray[41], row.ItemArray[42], row.ItemArray[43], row.ItemArray[44], row.ItemArray[45], row.ItemArray[46], row.ItemArray[47], row.ItemArray[48], row.ItemArray[49], row.ItemArray[50], row.ItemArray[51], row.ItemArray[52], row.ItemArray[53], row.ItemArray[54], row.ItemArray[55], row.ItemArray[56], row.ItemArray[57], row.ItemArray[58], row.ItemArray[59])))));
                }
            }
        }
        if (count2 == 6)
        {
            builder3.AppendLine(String.Join(";" + "\t" + "\t", row.ItemArray[0], row.ItemArray[1], row.ItemArray[2]) + ";" + "\t" + "\t"  + row.ItemArray[3] + ";" + "\t" + "\t" + "\t" + row.ItemArray[4] + "; " + "\t" + "\t" + (String.Join(";" + "\t" + "\t", row.ItemArray[5], row.ItemArray[6], row.ItemArray[7], row.ItemArray[8], row.ItemArray[9], row.ItemArray[10], row.ItemArray[11], row.ItemArray[12], row.ItemArray[13], row.ItemArray[14], row.ItemArray[15], row.ItemArray[16], row.ItemArray[17], row.ItemArray[18], row.ItemArray[19], row.ItemArray[20], row.ItemArray[21], row.ItemArray[22], row.ItemArray[23], row.ItemArray[24], row.ItemArray[25], row.ItemArray[26], row.ItemArray[27], row.ItemArray[28], row.ItemArray[29], row.ItemArray[30], row.ItemArray[31], row.ItemArray[32], row.ItemArray[33], row.ItemArray[34], row.ItemArray[35], row.ItemArray[36], row.ItemArray[37], row.ItemArray[38], row.ItemArray[39], row.ItemArray[40], row.ItemArray[41], row.ItemArray[42], row.ItemArray[43], row.ItemArray[44], row.ItemArray[45], row.ItemArray[46], row.ItemArray[47], row.ItemArray[48], row.ItemArray[49], row.ItemArray[50], row.ItemArray[51], row.ItemArray[52], row.ItemArray[53], row.ItemArray[54], row.ItemArray[55], row.ItemArray[56], row.ItemArray[57], row.ItemArray[58], row.ItemArray[59])));
            if (count3 == 6)
            {
                builder3.AppendLine(String.Join(";" + "\t" + "\t", row.ItemArray[0], row.ItemArray[1], row.ItemArray[2]) + ";" + "\t" + "\t" + row.ItemArray[3] + ";" + "\t" + "\t" + "\t" + row.ItemArray[4] + "; " + "\t" + "\t" + "\t" + (String.Join(";" + "\t" + "\t", row.ItemArray[5], row.ItemArray[6], row.ItemArray[7], row.ItemArray[8], row.ItemArray[9], row.ItemArray[10], row.ItemArray[11], row.ItemArray[12], row.ItemArray[13], row.ItemArray[14], row.ItemArray[15], row.ItemArray[16], row.ItemArray[17], row.ItemArray[18], row.ItemArray[19], row.ItemArray[20], row.ItemArray[21], row.ItemArray[22], row.ItemArray[23], row.ItemArray[24], row.ItemArray[25], row.ItemArray[26], row.ItemArray[27], row.ItemArray[28], row.ItemArray[29], row.ItemArray[30], row.ItemArray[31], row.ItemArray[32], row.ItemArray[33], row.ItemArray[34], row.ItemArray[35], row.ItemArray[36], row.ItemArray[37], row.ItemArray[38], row.ItemArray[39], row.ItemArray[40], row.ItemArray[41], row.ItemArray[42], row.ItemArray[43], row.ItemArray[44], row.ItemArray[45], row.ItemArray[46], row.ItemArray[47], row.ItemArray[48], row.ItemArray[49], row.ItemArray[50], row.ItemArray[51], row.ItemArray[52], row.ItemArray[53], row.ItemArray[54], row.ItemArray[55], row.ItemArray[56], row.ItemArray[57], row.ItemArray[58], row.ItemArray[59])));
                if (count4 == 6)
                {
                    builder3.AppendLine(String.Join(";" + "\t" + "\t", row.ItemArray[0], row.ItemArray[1], row.ItemArray[2]) + ";" + "\t" + "\t"  + row.ItemArray[3] + ";" + "\t" + "\t" + "\t" + row.ItemArray[4] + "; " + "\t" + "\t" + "\t" + (String.Join(";" + "\t" + "\t", row.ItemArray[5], row.ItemArray[6], row.ItemArray[7] + ";" + "\t" + "\t" + "\t" + row.ItemArray[8] + ";" + "\t" + "\t" + (String.Join(";" + "\t" + "\t", row.ItemArray[9], row.ItemArray[10], row.ItemArray[11], row.ItemArray[12], row.ItemArray[13], row.ItemArray[14], row.ItemArray[15], row.ItemArray[16], row.ItemArray[17], row.ItemArray[18], row.ItemArray[19], row.ItemArray[20], row.ItemArray[21], row.ItemArray[22], row.ItemArray[23], row.ItemArray[24], row.ItemArray[25], row.ItemArray[26], row.ItemArray[27], row.ItemArray[28], row.ItemArray[29], row.ItemArray[30], row.ItemArray[31], row.ItemArray[32], row.ItemArray[33], row.ItemArray[34], row.ItemArray[35], row.ItemArray[36], row.ItemArray[37], row.ItemArray[38], row.ItemArray[39], row.ItemArray[40], row.ItemArray[41], row.ItemArray[42], row.ItemArray[43], row.ItemArray[44], row.ItemArray[45], row.ItemArray[46], row.ItemArray[47], row.ItemArray[48], row.ItemArray[49], row.ItemArray[50], row.ItemArray[51], row.ItemArray[52], row.ItemArray[53], row.ItemArray[54], row.ItemArray[55], row.ItemArray[56], row.ItemArray[57], row.ItemArray[58], row.ItemArray[59])))));
                }
            }
        }
    }
    else
    {
        builder3.AppendLine(String.Join(";" + "\t" + "\t", row.ItemArray));
    }
}
File.WriteAllText(@".\test.txt", builder3.ToString());
MessageBox.Show("Data exported");
cnn.Close();
}
我得到了一个部分allinged.txt,如下所示:

您不需要将其与tab对齐,而是需要填充值PadLeftint。在本例中,通过在左侧填充空格,以指定的总长度将字符右对齐

DataTable mytable = new DataTable("mytable");
objDataAdaptermytable.Fill(mytable);
var builder3 = new StringBuilder();

// find the longest occurring value for each column
int[] maxLengthPerColumn = new int[mytable.Columns.Count];
foreach (DataRow row in mytable.Rows) {
  for (int column = 0; column < mytable.Columns.Count; column++) {
    maxLengthPerColumn[column] = Math.Max(maxLengthPerColumn[column], row.ItemArray[column].ToString().Length);
  }
}
string[] paddedValues = new string[mytable.Columns.Count];
foreach (DataRow row in mytable.Rows) {
  for (int column = 0; column < mytable.Columns.Count; column++) {
    // add spaces in front of the value to make it align nicely
    paddedValues[column] = row.ItemArray[column].ToString().PadLeft(maxLengthPerColumn[column]);
  }
  builder3.AppendLine(string.Join(";", paddedValues));
}
File.WriteAllText(@".\test.txt", builder3.ToString());
MessageBox.Show("Data exported");
cnn.Close();

是否需要使用选项卡?如果是这样的话,如何确定制表符间距?不,不是。只需要将每一列的数据一个接一个地完美对齐即可。我的默认设置是每列两个选项卡,前一列数据有6位的3个选项卡。我的问题是,60列会变得杂乱无章,因此我正在寻找一种理想情况下不使用制表符对齐,但使用默认网格对齐的替代方法,我不关心间距有多大。看起来您只需要为整个数据集中的每列查找最长的数据值。然后你就知道了你可以创建列的最小宽度。你的意思是我应该为数据集的每一列计算长度,并根据最长的值确定我的制表符吗?