以线性方式设置 CSV 数据格式

本文关键字:CSV 数据格式 设置 方式 线性 | 更新日期: 2023-09-27 17:56:39

我有一个for循环,在每个循环中我得到5个值。我把CSV文件放在CSV文件中,但数据排列不正确。

for (int i = 0, offset = 5; i < num_meters; i++, offset += 25)
{   
    float f_voltage, f_current, f_kw, f_kwh, f_freq, f_pf;
    f_voltage = (float)Math.Round(System.BitConverter.ToSingle(my_app_msg.msg_data, (offset + 1)), 2);    // voltage
    f_current = (float)Math.Round(System.BitConverter.ToSingle(my_app_msg.msg_data, (offset + 5)), 5);    // current
    f_freq = (float)Math.Round(System.BitConverter.ToSingle(my_app_msg.msg_data, (offset + 9)), 5);    // freq
    f_pf = (float)Math.Round(System.BitConverter.ToSingle(my_app_msg.msg_data, (offset + 13)), 5);   // pf
    f_kw = (float)Math.Round(System.BitConverter.ToSingle(my_app_msg.msg_data, (offset + 17)), 2);   // kw
    f_kwh = (float)Math.Round(System.BitConverter.ToSingle(my_app_msg.msg_data, (offset + 21)), 2);    // kwhr
    //Store in CSV
    vol2 = f_voltage.ToString();
    Curr2 = f_current.ToString();
    Feq2 = f_freq.ToString();
    PF2 = f_pf.ToString();
    power2 = f_kw.ToString();
    energy2 = f_kwh.ToString();
    DateTime time = DateTime.Now;
    string Data = (time.ToString("u") + "," + power + "," + energy + "," + vol + "," + Curr + "," + Feq + "," + PF + "," + space + ",");

    //Putting in CSV
    using (StreamWriter sw = new StreamWriter(pathname + "MeterLogDataON_" + System.DateTime.Now.ToString("dd-MM-yyyy") + ".csv", true))
    {
        sw.WriteLine(Data + "'t");
    }
}

但是我想要的 CSV 值是这样的。

VAlue1 VAlue1 VAlue1 VAlue1 VAlue1 | VAlue2 VAlue2 VAlue2 VAlue2 VAlue2 | VAlue3...so on.

但是我遇到了问题,因为我的数据以这种方式存储

VAlue1 VAlue1 VAlue1 VAlue1 VAlue1
VAlue2 VAlue2 VAlue2 VAlue2 VAlue2

以线性方式设置 CSV 数据格式

如果您不想在每个循环中创建新行,只需使用 sw。写而不是 sw。写线

 //Putting in CSV 
 using (StreamWriter sw = new StreamWriter(pathname + "MeterLogDataON_" + System.DateTime.Now.ToString("dd-MM-yyyy") + ".csv", true)) 
 { 
     sw.Write(Data + "'t");
 } 

这将在循环结束时创建一个附加选项卡,并且代码在每个循环中打开和关闭流。我建议将此代码更改为使用 StringBuilder,您可以在循环数据时添加文本并在末尾写入所有内容

 StringBuilder sb = new StringBuilder();
 for (int i = 0, offset = 5; i < num_meters; i++, offset += 25)
 {   
     ....................
     string Data = ......
     sb.Append(Data + "'t");
 }
 // Remove the last tab
 if(sb.Length > 0) sb.Length--; 
 string filename = (pathname + "MeterLogDataON_" + System.DateTime.Now.ToString("dd-MM-yyyy") + ".csv"
 File.WriteAllText(filename, sb.ToString());

或者,如果您有以前的数据要附加到

 File.AppendAllText(filename, sb.ToString());

尝试Write(string value)方法而不是WriteLine(string value)例如。 sw.Write(Data + "|");

using (StreamWriter sw = new StreamWriter(pathname + "MeterLogDataON_" + System.DateTime.Now.ToString("dd-MM-yyyy") + ".csv", true))
{
            sw.Write(Data + "|");
}