如何使用StringBuilder写入csv文件忽略CSV的第一行/行?

时间:2013-02-25 20:28:19

标签: c# csv stringbuilder

由于此CSV文件的第一行已包含列名,因此我只想忽略第一行并开始使用StringBuilder从第二行开始写入。

StringBuilder sb = new StringBuilder();
            foreach (DataRow dr in distinctValues.Rows)
            {
                vendor = dr.ItemArray[0].ToString();
                for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++)
                {
                    if (vendor == ds.Tables[0].Rows[i]["VendorCode"].ToString())
                    {
                        for (int j = 0; j <= ds.Tables[0].Columns.Count - 1; j++)
                        {
                            if (j != 0)
                                sb.Append(",");
                            sb.Append(ds.Tables[0].Rows[i][ds.Tables[0].Columns[j]]);
                        }
                        sb.AppendLine();
                    }
                }
                File.WriteAllText(@csvFile, sb.ToString());
            }

最后我明白我需要的不是写文件而是编辑文件。所以改变主意终于给出了答案。 File.AppendAllText 是我真正需要的。

2 个答案:

答案 0 :(得分:0)

这样的东西?

class Program
{
    private const string csv ="Header\r\nLine1\r\nLine2";
    static void Main(string[] args)
    {
        StringReader reader = new StringReader(csv);

        StringBuilder builder = new StringBuilder();
        bool header = true;
        while (true)
        {
            string line = reader.ReadLine();

            if(header)
            {
                header = false;
                continue;
            }

            if (line == null)
                break;
            builder.AppendLine(line);

        }

        Console.WriteLine(builder.ToString());
        Console.ReadLine();
    }
}

HTH

答案 1 :(得分:0)

尝试

File.AppendText("pathtofile")

FileMode.Append通过FileStream

如果是File.AppendText的情况,您对sb.AppendLine()的所有来电都将在下面的示例中变为sw.WriteLine()

 // This text is always added, making the file longer over time 
 // if it is not deleted.

using (StreamWriter sw = File.AppendText(path)) 
{
    sw.WriteLine("This");
    sw.WriteLine("is Extra");
    sw.WriteLine("Text");
}