我在CsvHelper中没有看到此选项,但是此库是否支持空格分隔符,以便每个字段都有预定数量的字符,例如空格或句点?
示例:名字-len:10姓氏-len:15会以句点翻译为
john......doe............
sam.......simpson........
答案 0 :(得分:0)
CsvHelper当前不支持固定宽度的文件。有一个开放功能要求添加固定宽度支持,但我认为没有任何计划很快实现。 https://github.com/CsvHelperContrib/CsvHelperContrib/issues/2
如果您正在编写固定宽度的文件,这应该可以工作。我没有办法读取固定宽度的文件。
public class Program
{
public static void Main(string[] args)
{
var records = new List<Foo>
{
new Foo { FirstName = "john", LastName = "doe" },
new Foo { FirstName = "sam", LastName = "simpson"}
};
using (CsvWriter csv = new CsvWriter(Console.Out))
{
csv.Configuration.RegisterClassMap<FooMap>();
csv.Configuration.HasHeaderRecord = false;
csv.Configuration.Delimiter = "";
csv.Configuration.ShouldQuote = (field, context) => false;
csv.WriteRecords(records);
}
Console.ReadLine();
}
}
public class Foo
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public sealed class FooMap : ClassMap<Foo>
{
public FooMap()
{
Map(m => m.FirstName).TypeConverter(new FixedWidthOutput(10, '.'));
Map(m => m.LastName).TypeConverter(new FixedWidthOutput(15, '.'));
}
}
public class FixedWidthOutput : DefaultTypeConverter
{
private readonly int _fieldLength;
private readonly char _paddingCharacter;
public FixedWidthOutput(int fieldLength, char paddingCharacter = ' ')
{
_fieldLength = fieldLength;
_paddingCharacter = paddingCharacter;
}
public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
{
return value.ToString().PadRight(_fieldLength, _paddingCharacter);
}
}
答案 1 :(得分:0)
我知道它已经回答了,但是我发布我的方法只是为了将其保存在记录中,以及另一种可能的选择。
我使用了getter方法。 所以我的课看起来像这样。
public class MyTrailer
{
private string trailerText;
public string TrailerText
{
get
{
var retValue = "TotalRecords=";
retValue = retValue + trailerText.PadLeft(14, '0');
return retValue;
}
set { trailerText = value; }
}
}
在CSV编写器上,
csv.WriteRecordsAsync
(new List<MyTrailer> { new MyTrailer { TrailerText = recordCount } });