【问题标题】:Writing a blank record to a CSV file将空白记录写入 CSV 文件
【发布时间】:2015-06-30 19:04:09
【问题描述】:

我有一个类,我正在写入这样的 CSV 文件:

csvWriter.Configuration.RegisterClassMap(new AffidavitFullAndPartialMapping(detailLevel));
csvWriter.WriteRecords(allAffidavits);

在我发送要写入的“allAffidavits”集合后,我想手动将另一行写入 CSV。最后一行将是所有空格,除了最后一个单元格需要包含特定值。

所以我想我会做一些在the official CsvHelper documentation 中描述的事情(在一个名为“编写单个字段”的部分中):

您也可以根据需要手动编写每个字段。

var csv = new CsvWriter( textWriter );
foreach( var item in list )
{
  csv.WriteField( "a" );
  csv.WriteField( 2 );
  csv.WriteField( true );
  csv.NextRecord();
}

但是我怎么知道要手动写入多少个空白单元格呢?这与我的 CSV 文件中已有的列数相同。由于映射(参见本文顶部的第一行代码),它可能会动态变化。

谢谢,
埃利泽

【问题讨论】:

    标签: csvhelper


    【解决方案1】:

    您可以遍历所有属性和参考图并计算它们。可以设置更高的索引,因此最好找到最高索引。有一个内部方法可能应该公开,您可以使用它。

    internal int GetMaxIndex()
    {
        if( PropertyMaps.Count == 0 && ReferenceMaps.Count == 0 )
        {
            return -1;
        }
    
        var indexes = new List<int>();
        if( PropertyMaps.Count > 0 )
        {
            indexes.Add( PropertyMaps.Max( pm => pm.Data.Index ) );
        }
        indexes.AddRange( ReferenceMaps.Select( referenceMap => referenceMap.GetMaxIndex() ) );
    
        return indexes.Max();
    }
    

    现在只需复制此内容。如果它适合您,请在 GitHub 中提交票证以公开此方法。

    【讨论】:

      【解决方案2】:

      乔希,非常感谢您的解决方案。自从发布我最初的问题后,我想到了类似的东西。

      我替换了上面的两行:

      csvWriter.Configuration.RegisterClassMap(new AffidavitFullAndPartialMapping(detailLevel));
      csvWriter.WriteRecords(allAffidavits);
      

      用这个:

      var classMapping = new AffidavitFullAndPartialMapping(detailLevel);
      csvWriter.Configuration.RegisterClassMap(classMapping);
      csvWriter.WriteRecords(allAffidavits);
      

      然后我能够获得 CSV 中的列数:

      int numberOfColumnsInCsv = classMapping.PropertyMaps.Count;
      

      在一个循环中 - 重复多次 - 执行这个:

      csvWriter.WriteField(string.Empty);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-08
        相关资源
        最近更新 更多