0

テキスト形式と数値形式の両方で表されるデータを任意の行に含むテキスト ファイルがあります。このようなもの:

Dog 5 4 7

この行を読み取り、読み取った値を正しい変数に割り当てるファイル読み取りルーチンを Delphi で作成するにはどうすればよいですか ("Dog" を文字列変数に、"5"、"4"、"7" を実変数または整数変数に)。

4

3 に答える 3

6

SplitStringfromを使用し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浮動小数点値がある場合は、明らかに代用してください。

于 2013-01-22T09:01:30.463 に答える
0

JediコードライブラリからTJclStringListを取得します。

最初のステップでは、1つのリストを取得し、.LoadFromFileを実行してファイルを行に分割します。2番目のステップでは、これらの行を繰り返し処理し、区切り文字としてスペースを使用してこれらの行でセカンダリ文字列リストを設定しました。次に、2次文字列リストを繰り返し処理し、必要な処理を実行します。

そのように

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 に答える