gpt4 book ai didi

filehelpers - 使用相同的类定义将 FixedLength 格式转换为 csv 的问题

转载 作者:行者123 更新时间:2023-12-05 07:03:30 25 4
gpt4 key购买 nike

我在一个类上同时定义了 FixedLength 和 Delimited 属性。它可以很好地读取固定长度的文件,但是当我尝试写出 csv 时失败。

[FixedLengthRecord]
[DelimitedRecord(",")]
public class PCFFileHeader
{
[FieldFixedLength(2)] public string RecordType { get; set; }
[FieldFixedLength(25)] public string FileDescription { get; set; }
}

var engine = new MultiRecordEngine(typeof(PCFFileHeader), typeof(SecondHeader));

engine.RecordSelector = RecordSelector;
var output = engine.ReadFile(filePath);

// code to extract PCFHeader from output and create a list

var headerEngine = new DelimitedFileEngine<PCFFileHeader>();
headerEngine.WriteFile("header_" + DateTime.Now.ToString("yyyyMMddhhmmss"), pcfFileHeaderList);

最佳答案

您不能将 [FixedLengthRecord][DelimitedRecord] 添加到同一个类。 FileHelpers 会将其视为 [FixedLengthRecord]。对于您当前的类(class),如果您这样做,它将出错:

// This causes an exception because the class is not a delimited record definition
var delimitedHeaderEngine = new DelimitedFileEngine<PCFFileHeader>();

相反,您应该有两个 PCFFileHeader 定义,FixedPCFFileHeaderDelimitedPCFFileHeader

[FixedLengthRecord]
public class FixedPCFFileHeader
{
[FieldFixedLength(2)] public string RecordType { get; set; }
[FieldFixedLength(25)] public string FileDescription { get; set; }
}

[DelimitedRecord(",")]
public class DelimitedPCFFileHeader
{
public string RecordType { get; set; }
public string FileDescription { get; set; }
}


class Program
{
static void Main(string[] args)
{
var fixedHeaderEngine = new FileHelperEngine<FixedPCFFileHeader>();
var recordsFixed = fixedHeaderEngine.ReadString("AADescription ");
Debug.Assert(recordsFixed.Count() == 1);
Debug.Assert(recordsFixed[0].RecordType == "AA");
Debug.Assert(recordsFixed[0].FileDescription == "Description ");

var delimitedHeaderEngine = new FileHelperEngine<DelimitedPCFFileHeader>();
var recordsDelimited = delimitedHeaderEngine.ReadString("AA,Description");
Debug.Assert(recordsDelimited.Count() == 1);
Debug.Assert(recordsDelimited[0].RecordType == "AA");
Debug.Assert(recordsDelimited[0].FileDescription == "Description");

var pcfFileHeaderList = new FixedPCFFileHeader[] { new FixedPCFFileHeader() { RecordType = "AA", FileDescription = "Description" } };

// If you want to output a header when exporting uncomment the following
//headerEngine.HeaderText = "header_" + DateTime.Now.ToString("yyyyMMddhhmmss");

var output = fixedHeaderEngine.WriteString(pcfFileHeaderList);
Debug.Assert(output == "AADescription \r\n");

Console.WriteLine("All OK");
Console.ReadLine();
}
}

如果您想在导入过程中自动检测正确的格式,您可以使用 FileHelpers Smart Format Detector .

关于filehelpers - 使用相同的类定义将 FixedLength 格式转换为 csv 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63190023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com