0

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

Dog 5 4 7

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

4

3 回答 3

6

您可以使用SplitStringfromStrUtils将字符串分成几部分。然后用于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如果您有浮点值,显然可以替代。

于 2013-01-22T09:01:30.463 回答
0

从绝地代码库中获取 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; 
于 2013-01-22T08:47:51.670 回答
-1

您可以将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;
于 2013-01-22T14:17:32.507 回答