【发布时间】:2023-03-25 06:44:01
【问题描述】:
使用 Delphi 读取和解析固定宽度文本文件的最佳方法是什么?
是否存在任何组件?
【问题讨论】:
使用 Delphi 读取和解析固定宽度文本文件的最佳方法是什么?
是否存在任何组件?
【问题讨论】:
如果您的意思是解析,请尝试使用 TStringList。致电TStringList.LoadFromFile,您将获得单行列表。然后,您可以遍历每一行并根据行中的各种固定长度列将其解析为记录或类。查看复制功能,了解如何简化此操作。
如果没有关于您要做什么的任何细节,很难更具体,但这是一般的想法。
【讨论】:
如果它的宽度和ansi是固定的,你可以使用流读入包含由ansichar数组组成的字段的记录。
type
rTest = record
Field1 : array[1..12] of ansichar;
Field2 : array[1..02] of ansichar;
CRLF : array[1..02] of ansichar;
end;
var
// Sample record for testing.
Test1 : rTest = (Field1 : '123456789012'; Field2: 'AB'; CRLF: ^M+^J);
procedure TForm1.Button1Click(Sender: TObject);
var
St : tStream;
rdest : rTest;
SVar : string;
begin
St := TMemoryStream.Create;
// write the record from the constant
st.Write(Test1,SizeOf(rTest));
st.Seek(0,soFromBeginning);
// read the record from the stream
St.Read(rDest,SizeOf(rTest));
// pull out field 1 and display
SVar := Copy(rDest.Field1,1,12);
ShowMessage(SVar);
// pull out field 2 and display
SVar := Copy(rDest.Field2,1,2);
ShowMessage(SVar);
st.free;
end;
【讨论】:
您可以使用简单的 TMemo 或 TRichEdit。但我相信,Delphi 的 #1 (?) 文本编辑器组件是 TSynEdit。
【讨论】: