我有一个文本文件,在任何给定的行上都有以文本格式和数字格式表示的数据。像这样:
Dog 5 4 7
如何在Delphi中编写读取此行的文件读取例程并将读取的值分配给正确的变量(“Dog”转换为字符串变量,“5”,“4”和“7”转换为实数或整数变量)?
答案 0 :(得分:6)
您可以使用SplitString
中的StrUtils
将字符串拆分为多个部分。然后使用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
。
答案 1 :(得分:0)
从Jedi代码库中获取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;
答案 2 :(得分:-1)
您可以使用TRecord File of 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;