【问题标题】:How do I read a row from a file that has both numbers and letters in Delphi 2010?如何从 Delphi 2010 中同时包含数字和字母的文件中读取一行?
【发布时间】:2013-01-22 08:39:01
【问题描述】:

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

Dog 5 4 7

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

【问题讨论】:

标签: delphi file delphi-2010


【解决方案1】:

您可以使用StrUtils 中的SplitString 将字符串拆分为多个片段。然后用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

【讨论】:

    【解决方案2】:

    从 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; 
    

    【讨论】:

    【解决方案3】:

    您可以将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;
    

    【讨论】:

    • 行不通。他的文件全是文本。你可能的意思是ReadLn(Rec.FName, Rec.Val1, Rec.Val2, Rec.Val3);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多