为啥'while(csv.Read())' 在 CsvHelper 中不能工作两到三遍?

Posted

技术标签:

【中文标题】为啥\'while(csv.Read())\' 在 CsvHelper 中不能工作两到三遍?【英文标题】:Why does not 'while(csv.Read())' work two / three times in CsvHelper?为什么'while(csv.Read())' 在 CsvHelper 中不能工作两到三遍? 【发布时间】:2021-10-04 19:14:41 【问题描述】:

我使用了 CsvHelper,但我遇到了问题,我想遍历文件中的标题(列)一样多的行,并且在每个步骤中都会在 while 部分中执行一些特定的逻辑。但是,在第一个循环之后,我无法进入while,而且我不知道如何修复它或如何刷新阅读器行数计数器?

using (var reader = new StreamReader(file))

  var config = new CsvConfiguration(CultureInfo.InvariantCulture)
  
    Delimiter = ";",
  ;

  using (var csv = new CsvReader(reader, config))
  
    for (var col = 1; col < headers.Length; col++)
    
      while (csv.Read())
      
        //do some logic
      
    
  

大家有什么想法,

【问题讨论】:

【参考方案1】:

我认为您应该切换您的 forwhile 语句。您需要先读取行,然后遍历列。

void Main()

    using (var reader = new StringReader("Id,Name\n1,One\n2,Two"))
    using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
    
        csv.Read();
        csv.ReadHeader();
        var headers = csv.HeaderRecord;
        
        while (csv.Read())
        
            for (var col = 0; col < headers.Length; col++)
            
                Console.WriteLine(csv.GetField(col));               
            
            Console.WriteLine();
        
    


public class Foo

    public int Id  get; set; 
    public string Name  get; set; 

【讨论】:

以上是关于为啥'while(csv.Read())' 在 CsvHelper 中不能工作两到三遍?的主要内容,如果未能解决你的问题,请参考以下文章

为啥`做 ...;出口(...); C 语言中的 while (0)`? [复制]

c语言请问while循环为啥执行不了?

C语言 counter=counter+1 是啥意思,为啥后面要加1,去掉行吗?与while 有什关系?

为啥while循环的执行速度会随时间变化?

在 R 中访问大型 csv:read.table.ffdf 变慢

定义int i=1,在执行while(i++<5)后,i的值为?为啥呢