首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CSVhelper写域方法在数据块之间添加空行。如何避免数据块之间的空行?

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

Stack Overflow用户
提问于 2020-08-26 09:51:30
回答 1查看 381关注 0票数 0

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

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

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

代码语言:javascript
复制
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并没有起到什么作用,它是在更改代码时意外留下的。

生产者代码添加如下:

代码语言:javascript
复制
 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 ();
 }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-27 06:18:31

感谢"Andy“的提示,以及其他人的时间。

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

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

{

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

//修改了部分代码,删除了换行符和回车符-我使用的是windows操作系统

代码语言:javascript
复制
            Data_log_results = Data_log_results.TrimEnd('\r', '\n');

}

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63589375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档