我有一个文本文件,在任何给定的行上都有以文本格式和数字格式表示的数据。像这样的东西:
Dog 5 4 7
如何在 Delphi 中编写一个文件读取例程来读取这一行并将读取的值分配给正确的变量(“Dog”分配给字符串变量,“5”、“4”和“7”分配给实数或整数变量)?
我有一个文本文件,在任何给定的行上都有以文本格式和数字格式表示的数据。像这样的东西:
Dog 5 4 7
如何在 Delphi 中编写一个文件读取例程来读取这一行并将读取的值分配给正确的变量(“Dog”分配给字符串变量,“5”、“4”和“7”分配给实数或整数变量)?
您可以使用SplitString
fromStrUtils
将字符串分成几部分。然后用于StrToInt
转换为整数。
uses
StrUtils;
....
var
Fields: TStringDynArray;
....
Fields := SplitString(Row, ' ');
StrVar := Fields[0];
IntVar1 := StrToInt(Fields[1]);
IntVar2 := StrToInt(Fields[2]);
IntVar3 := StrToInt(Fields[3]);
StrToFloat
如果您有浮点值,显然可以替代。
从绝地代码库中获取 TJclStringList。
在第一步中,您获取一个列表并执行 .LoadFromFile 将文件拆分为行。在第二步中,您遍历了这些行并通过这些行设置辅助字符串列表,并以空格作为分隔符。然后你遍历辅助字符串列表并做你想做的事。
像那样
var slF, slR: IJclStringList; ai: TList<integer>; s: string; i: integer;
action: procedure(const Name: string; Const Data: array of integer);
slF := TJclStringList.Create; slF.LoadFromFile('some.txt');
slR := TJclStringList.Create;
for s in slF do begin
slR.Split(s, ' ', true);
ai := TList<Integer>.Create;
try
for i := 1 to slR.Count - 1 do
ai.Add(StrToInt(slR[i]));
action(slR[0], ai.ToArray);
finally ai.Free; end;
end;
您可以将File of TRecord
, 与 TRecord 一起使用。例如:
type TRecord = packed record
FName : String[30];
Val1: Integer;
Val2: Integer;
Val3: Integer;
end;
和简单的程序:
procedure TMainForm.Button1Click(Sender: TObject);
var
F: file of TRecord;
Rec : TRecord;
begin
AssignFile(F, 'file.dat');
try
Reset(F);
Read(F, Rec);
finally
CloseFile(F);
end;
end;