Reputation: 16482
Which is the best way to read and parse an Fixed Width Text File using Delphi?
Does any component exist for that?
Upvotes: 2
Views: 1339
Reputation: 15538
If its fixed width and ansi, you can use streams to read into a record containing fields made up of array of 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;
Upvotes: 2
Reputation: 84550
If by read you mean parse, try using a TStringList. Call TStringList.LoadFromFile
and you'll get a list of individual lines. Then you can go over each individual line and parse it out into a record or class based on the various fixed-length columns in the line. Check out the Copy function for a way to make this easier.
It's hard to be more specific without any details about what you're trying to do, but that's the general idea.
Upvotes: 5
Reputation: 108963
You could do with a simple TMemo or TRichEdit. But the #1 (?) text editor component for Delphi, I believe, is TSynEdit.
Upvotes: 0