如何从Delphi 2010中具有数字和字母的文件中读取行?

时间:2013-01-22 08:39:01

标签: delphi file delphi-2010

我有一个文本文件,在任何给定的行上都有以文本格式和数字格式表示的数据。像这样:

Dog 5 4 7

如何在Delphi中编写读取此行的文件读取例程并将读取的值分配给正确的变量(“Dog”转换为字符串变量,“5”,“4”和“7”转换为实数或整数变量)?

3 个答案:

答案 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;