输出未正确写入CSV

时间:2015-10-02 12:04:00

标签: c# .net

所以我的输出被写入CSV文件时出现问题。在写入CSV文件时,此代码的输出格式正确,但只输入文件中的单行。应该还有更多。大约150行。目前的输出是:

  

(859.85 7N830127 185)

哪个是正确的,但应该有更多这些。在我看来,它只是编写解析的EDI文件的第一行然后停止。我需要找到一种方法来确保写入所有正在解析的数据,任何人都可以帮助我吗?

static void Main(string[] args)
{
    StreamReader sr = new StreamReader("edifile.txt");

    string[] ediMapTemp = sr.ReadLine().Split('|');
    List<string[]> ediMap = new List<string[]>();
    List<object[]> outputMatrix = new List<object[]>();

    foreach (var line in ediMapTemp)
    {
        ediMap.Add(line.Split('~'));
    }

    DetailNode node = new DetailNode(0, null, 0);
    int hierarchicalDepth = 0;
    int hierarchicalIdNumber;
    int hierarchicalParentIdNumber;
    int hierarchicalLevelCode;
    int hierarchicalChildCode = 0;
    for (int i = 0; i < ediMap.Count; i++)
    {
        string segmentHeader = ediMap[i][0];
        if (segmentHeader == "HL")
        {
            hierarchicalIdNumber = Convert.ToInt32(ediMap[i][1]);
            hierarchicalParentIdNumber = Convert.ToInt32(ediMap[i][2]);
            hierarchicalLevelCode = Convert.ToInt32(ediMap[i][3]);
            hierarchicalChildCode = Convert.ToInt32(ediMap[i][4]);

            List<string[]> levelDetails = new List<string[]>();
            for (int v = i + 1; v < ediMap.Count; v++)
            {
                if (ediMap[v][0] == "HL") break;
                levelDetails.Add(ediMap[v]);
            }
            DetailNode getNode = node.Find(node, hierarchicalParentIdNumber);
            getNode.headList.Add(new DetailNode(hierarchicalIdNumber, levelDetails, getNode.depth + 1));
        }
    }
    node.Traversal(new VID(), node);
    foreach (var vid in VIDList.vidList)

        using (StreamWriter writer = new StreamWriter("Import.csv"))
        {
            //probably a loop here
            writer.WriteLine(String.Join(",", vid.totalCurrentCharges, vid.assetId, vid.componentName, vid.recurringCharge));
        }
}

2 个答案:

答案 0 :(得分:4)

快速审核,如果代码如下:

using (StreamWriter writer = new StreamWriter("Import.csv"))
{
    //a loop here
    foreach (var vid in VIDList.vidList)
    {
        writer.WriteLine(String.Join(",", vid.totalCurrentCharges, vid.assetId, vid.componentName, vid.recurringCharge));
    }
}

您可以打开文件一次,然后循环浏览您的收藏,写下每个文件。

答案 1 :(得分:2)

在我看来,您正在重新打开您尝试编写的每一行的输出文件,因此您将使用每行的新文件覆盖输出文件。这意味着只有最后一个条目保留在文件中。尝试移动此行

using (StreamWriter writer = new StreamWriter("Import.csv"))

在foreach循环之外。