CSVhelper writefield方法在数据块之间添加空行如何避免数据块之间的空行?

问题描述

我正在尝试编写一个CSV文件,该文件具有我不断从BlockingCollection obj获取的值。仪器会不断输出逗号分隔的字符串值,我正在使用Producer-Consumer设计模式将其写入队列。我在使用者端枚举Queue,然后将字符串转换为列表。

最后遍历列表,并将结果逐行写入CSV文件。迭代列表时我没有空行。我在每个消费者枚举之间都只有一条空白。如何避免出现空行?

执行上述操作的代码部分如下:

public void Consumer_current()
{
    Stopwatch Consumer_time = new Stopwatch();
    double time = 0.0;
    var sw = new StreamWriter("sample.csv",false);
    var csv_write = new CsvWriter(sw,CultureInfo.InvariantCulture);

    Consumer_time.Start();
    

    // Consumer Task constantly checking the Queue and enumerating    
    foreach (var current_string in current_data.GetConsumingEnumerable())
    {
        var item_List = current_string.Split(',').ToList();

        // Iterating the list,writing the values to CSV file
        foreach (var item in item_List)       
        {
            
             
            time += 1;

            var record = time + "," + item;

            csv_write.WriteField(record,false);
            Console.WriteLine(record);

            csv_write.NextRecord();
        }
    }

   
    csv_write.Flush();
    Console.WriteLine("flushing");
}

编辑1:

csv_write.NextRecord();现在已删除第二个呼叫。这没有什么区别,并且在更改代码时被意外遗留了。

在下面添加了生产者代码

 public void Produce_current () {

     Stopwatch DataCapture_time = new Stopwatch ();

     DataCapture_time.Start ();

     while (DataCapture_time.Elapsed <= TimeSpan.FromSeconds (20)) {
         while (DataCapture_time.Elapsed <= TimeSpan.FromSeconds (1.3)) {

         }

         device_instance.WriteString ("FETC:ELOG? 10000,(@1)");
         var Data_log_results = device_instance.ReadString ();

         current_data.Add (Data_log_results);
     }
     current_data.CompleteAdding ();
 }
 

解决方法

感谢“安迪”的提示,感谢其他人的时间。

分析之后,我发现仪器(Keysight-N6705B,功率分析仪)正在使用字符串块和“ \ n”写入内部存储器缓冲区。每当我从设备的内部存储器中读取新值时,它都会附加一个换行符,这在写入csv文件时会反映出来。 注意:来自设备的数据为ASCII格式。

为解决此问题,我对Producer_current()块中的代码做了一些修改。

{

device_instance.WriteString(“ FETC:ELOG?10000,(@ 1)”); var Data_log_results = device_instance.ReadString();

///修改了部分代码以删除换行符和回车符-我正在使用Windows操作系统

            Data_log_results = Data_log_results.TrimEnd('\r','\n');

}

上面的代码非常适合想要使用csvhelper从动态更改列表中逐行写入CSV文件的人。

任何从仪器缓冲区中读取的卡都需要删除“ \ n”,如上所述。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...