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

CSVhelper writefield method adds empty line between data chunks. How to avoid the empty lines between data chunks?

我正在尝试编写一个 CSV 文件,其中包含我不断从 BlockingCollection obj 中获取的值。 Instrument 不断输出以逗号分隔的字符串值,我使用生产者-消费者设计模式将其写入队列。我在消费者端枚举队列,然后将字符串转换为列表。

最后遍历列表并将结果逐行写入 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(); 删除了第二个调用 now.It 没有任何区别,它是在更改代码时意外留下的。

在下面添加了生产者代码:

 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 ();
 }
 

感谢“Andy”的提示,感谢其他人的宝贵时间。

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

为了解决这个问题,我稍微修改了 Producer_current() 块中的代码。

{

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

//修改部分代码以删除换行符和回车 return - 我正在使用 windows OS

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

}

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

任何无法读取仪器缓冲区的人都需要如上所述删除“\n”。