CSV分割方法在1列中打印第一个字段两次

时间:2016-05-24 19:17:30

标签: c# excel parsing csv

我有一个差不多完成的程序。问题在于,当我打印出" new"除了excel中的第一列外,每个文件的CSV文件都是正确的。它打印信息两次,但仅在第一列中打印。我查看了整个代码,无法看到我将两次打印出来或者两次调用令牌。

该程序的目的是简单地重新组织列并将它们格式化为所需的方式。我正在访问的令牌位于inputBuffer[23]位置,我将其设置为等于outputBuffer[0],我只做了一次,但是当我运行程序并检查文件时,第一列是第一条记录应保留值841,但它会出现841841,我不知道如何。所有其他专栏都非常好。

有人能发现错误吗?

我的方法

/*
 * This method uses the fields (array elements) in the output
 * buffer to assemble a CSV record (string variable). The
 * CSV record is then written to the output file.
 */
public static void BuildRecordAndWriteOutput()
{
    string record = outputBuffer[0];

    for (int i = 0; i < outputBuffer.Length; i++)
    {
        if (outputBuffer[i].Contains(","))
            {
                string x = "\"" + outputBuffer[i] + "\"";
                record += x;
            }
            else
            {
                record += outputBuffer[i];
            }
            if (i < outputBuffer.Length - 1)
            {
                record += ",";
            }
    }

    /*for (int i = 1; i < outputBuffer.Length; i++)
    {
        record = record + "," + outputBuffer[i];
    }*/

    output.WriteLine(record);

}

当我调用方法

static void Main(string[] args)
{
    input.SetDelimiters(",");

    /*
     * This loop reads input data and calls methods to
     * build an output record and write data to a CSV file.
     */ 
    while (!input.EndOfData)
    {
        inputBuffer = input.ReadFields(); // Read a CSV record in to the inputBuffer.
        SetOutputBufferDefaultValues(); // Put default values in the output buffer.
        MapInputFieldsToOutputFields(); // Move fields from the input buffer to the output buffer.
        BuildRecordAndWriteOutput(); // Build record from output buffer and write it.
    }

    Console.WriteLine("done");
    input.Close();
    output.Close();
    Console.Read();
}

以下是我的解释不明确的截图

enter image description here

代码中有更多数据,截至目前我尚未发布所有数据,但如果有帮助我可以。

谢谢!

1 个答案:

答案 0 :(得分:1)

BuildRecordAndWriteOutput中,您指定记录:

string record = outputBuffer[0];

然后在0开始循环,追加 outputbuffer[0]进行记录:

for (int i = 0; i < outputBuffer.Length; i++)
{
    record += ....
}

这就是导致您的第一列重复数据的原因。

您可以通过在循环之前将记录初始化为空字符串来解决此问题:

string record = "";