如何利用StreamWriter写入csv文件?

时间:2011-05-20 15:12:25

标签: c# string csv stringbuilder streamwriter

所以这就是我正在使用的东西。我正在尝试获取XML文件,从属性中提取信息,将它们附加在一起,然后将其写入CSV文件。我还是比较新的编程,而另一个程序员今天不在办公室,所以我真的可以使用一些帮助。

我的第一个问题,关于StringBuilder。我是否需要在StringBuilder的末尾添加一个AppendLine,以便foreach循环中的每个字符串输出都在一个新行上?我是否需要在foreach循环中执行此操作?

我的第二个问题是将字符串实际写入CSV文件。它看起来像什么?

swOutputFile.WriteLine(strAppendedJobData)

我认为这也会进入foreach循环,但我不太确定。

感谢您的帮助,我希望我能以一种易于理解的方式表达我的问题。

//Create a stream writer to write the data from returned XML job ticket to a new CSV
        StreamWriter swOutputFile;
        string strComma = ",";
        swOutputFile = new StreamWriter(new FileStream("C:\\Dev\\AppendedJobData.csv", FileMode.Create, FileAccess.Write, FileShare.Read));

        //Get nodes from returned XML ticket
        XmlNodeList xmlJobs = xdResults.SelectNodes("/Updates/Jobs/Job");
        //Pull out data from XML attributes
        foreach (XmlElement xeJobUpdate in xmlJobs)
        {
            //Break down the job data
            string strProjectID = xeJobUpdate.GetAttribute("SharpOwlProjectID");
            string strJobNumber = xeJobUpdate.GetAttribute("JobNumber");
            string strClientCode = xeJobUpdate.GetAttribute("SharpOwlClientCode");
            string strClient = xeJobUpdate.GetAttribute("Client");
            string strVCAOffice = xeJobUpdate.GetAttribute("VCAOffice");
            string strLoadStatus = xeJobUpdate.GetAttribute("LoadStatus");

            //Build the string to be added to the new CSV file

            StringBuilder sbConcatJob = new StringBuilder();
            sbConcatJob.Append(strProjectID).Append(strComma).Append(strJobNumber)
                .Append(strComma).Append(strClientCode).Append(strComma).Append(strClient).Append(strComma)
                .Append(strVCAOffice).Append(strComma).Append(strLoadStatus).Append(strComma);
            string strAppendedJobData = sbConcatJob.ToString();

3 个答案:

答案 0 :(得分:7)

如果你想做得更优雅,你可以这样做:

 using(StreamWriter swOutputFile = new StreamWriter(new FileStream("C:\\Dev\\AppendedJobData.csv", FileMode.Create, FileAccess.Write, FileShare.Read)))
    {
        //Get nodes from returned XML ticket
        XmlNodeList xmlJobs = xdResults.SelectNodes("/Updates/Jobs/Job");
        //Pull out data from XML attributes
        foreach (XmlElement xeJobUpdate in xmlJobs)
        {
           List<String> lineItems = new List<String>();
           lineItems.add(xeJobUpdate.GetAttribute("SharpOwlProjectID"));
           //add all the other items

           swOutputFile.WriteLine(String.Join(',', myLine.ToArray()));



        }
    //after the loop you close the writer
   }

    //all the work is done much easier

答案 1 :(得分:2)

  

我的第一个问题,关于   StringBuilder的。我需要一个   AppendLine在我的结尾   StringBuilder,使每个字符串   foreach循环的输出是在a   新队?我需要这样做吗?   在foreach循环中?

我唯一的建议,因为它似乎你没有尝试过这将是尝试它。这是你学习的唯一方法。

  

swOutputFile.WriteLine(strAppendedJobData)

这会将整行文本写入文件。

答案 2 :(得分:1)

你真的有两个选择:

如果你在foreach循环中调用sbConcatJob.AppendLine(),你可以在一个字符串构建器中构建文件的内容,然后在foreach循环之外调用swOutputFile.Write(sbConcatJob.ToString())来编写文件。

如果你现在保持你的代码,你可以在foreach循环中添加sw.OutputFile.WriteLine(sbConcatJob.ToString())并一次写一行文件。