简体   繁体   English

将数据写入CSV文件

[英]Write data into csv file

Hi guys i'd like to write random double into a csv file ,for now am inserting string into the row, here is what i've done.How can alter my code in order to write doubles instead of string Many thanks in advance 嗨,大家好,我想在csv文件中写入随机双精度字符,现在我正在向行中插入字符串,这是我所做的。如何更改代码以编写双精度字符而不是字符串,非常感谢

public class CsvRow : List<string>
{
    public string LineText { get; set; }
}
/// <summary>
/// Class to write data to a CSV file
/// </summary>
public class CsvFileWriter : StreamWriter
{
    public CsvFileWriter(Stream stream)
        : base(stream)
    {
    }

    public CsvFileWriter(string filename)
        : base(filename)
    {
    }
    /// <summary>
    /// Writes a single row to a CSV file.
    /// </summary>
    /// <param name="row">The row to be written</param>
    public void WriteRow(CsvRow row)
    {
        StringBuilder builder = new StringBuilder();
        bool firstColumn = true;
        foreach (string value in row)
        {
            // Add separator if this isn't the first value
            if (!firstColumn)
                builder.Append(',');
            // Implement special handling for values that contain comma or quote
            // Enclose in quotes and double up any double quotes
            if (value.IndexOfAny(new char[] { '"', ',' }) != -1)
                builder.AppendFormat("\"{0}\"", value.Replace("\"", "\"\""));
            else
                builder.Append(value);
            firstColumn = false;
        }
        row.LineText = builder.ToString();
        WriteLine(row.LineText);
    }
}      static void WriteTest()
    {

        // Write sample data to CSV file
        using (CsvFileWriter writer = new CsvFileWriter("D://WriteTest.csv"))   CsvRow rowCol = new CsvRow();
            for (int j = 0; j < nbrCol; j++)

               rowCol.Add("Col" +j);

            writer.WriteRow(rowCol);
        {
            for (int i = 0; i < 100; i++)
            {
                CsvRow row = new CsvRow();
                for (int j = 0; j < 5; j++)
                    row.Add(String.Format("Column{0}", j));

                writer.WriteRow(row);
            }
        }
    }

simply this: 简单地这样:

    static void WriteTest()
    {
        // Write sample data to CSV file
        using (CsvFileWriter writer = new CsvFileWriter(@"E:\SharedDoc1\WriteTest.csv"))
        {
            Random rnd = new Random();

            for (int i = 0; i < 100; i++)
            {
                CsvRow row = new CsvRow();
                for (int j = 0; j < 5; j++)
                    row.Add(rnd.NextDouble().ToString("0.000000")); //round to 6 decimal digits

                writer.WriteRow(row);
            }
        }
    }

the output is as following: 输出如下:

0.848731,0.525468,0.829536,0.397083,0.493102 0.398665,0.914157,0.768229,0.520031,0.249966 0.083535,0.409240,0.325824,0.177057,0.114989 0.848731,0.525468,0.829536,0.397083,0.493102 0.398665,0.914157,0.768229,0.520031,0.249966 0.083535,0.409240,0.325824,0.177057,0.114989

Note that rnd.NextDouble() returns a double between 0 and 1, if you want larger numbers you should multiply it with your factor. 请注意, rnd.NextDouble()返回0到1之间的双rnd.NextDouble()数,如果您想使用更大的数字,则应将其乘以因子。 For example if you want doubles up to 1000 do this: 例如,如果您想将最大数量增加一倍,请执行以下操作:

row.Add((rnd.NextDouble() * 1000).ToString("0.0#####"));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM