我的班级是
[IgnoreFirst(1)]
[DelimitedRecord("#")]
public class PrezElementi
{
public int idElemento { get; set; }
public string? Descrizione { get; set; }
}
var engine = new FileHelperEngine<PrezElementi>();
var res = engine.ReadFile("myfile.csv");
我的示例文件是
#123#line A#
#456#line B
end line B#
#789#line C#
读取第二行时,出现错误<
是否有方法告诉 FileHelper 将“Description”字段视为两行?
是否有方法告诉 FileHelper 将“Description”字段视为两行?
是的,但它只适用于 QuotedStrings,所以对你没有帮助。
在您的特定情况下,仅因为相关字段恰好是最后一个字段,您可以使用 BeforeRecord 事件来检测第二行并将其与上一行合并,然后忽略它。
例如类似的东西
void Main()
{
string input = @"#123#line A#
#456#line B
end line B#
#789#line C#
";
var engine = new FileHelperEngine<PrezElementi>();
engine.BeforeReadRecord += new FileHelpers.Events.BeforeReadHandler<PrezElementi>(beforeRead);
var results = engine.ReadString(input);
}
public static PrezElementi? lastRecord ;
void beforeRead(EngineBase engine, BeforeReadEventArgs<PrezElementi> e)
{
if (!e.RecordLine.StartsWith('#'))
{
ArgumentNullException.ThrowIfNull(lastRecord);
lastRecord.Descrizione += "\r\n" + e.RecordLine;
e.SkipThisRecord = true;
}
else
{
lastRecord = e.Record;
}
}
[IgnoreFirst(0)]
[DelimitedRecord("#")]
public class PrezElementi
{
string? ignore1 { get; set; }
public int? idElemento { get; set; }
public string? Descrizione { get; set; }
[FieldOptional] public string? ignore2 { get; set; }
}
由于您的示例以分隔符开始和结束,因此您需要在开始和结束处引入虚拟字段。 (我不确定为什么ignore2需要公开,但它似乎不起作用)