テキスト形式と数値形式の両方で表されるデータを任意の行に含むテキスト ファイルがあります。このようなもの:
Dog 5 4 7
この行を読み取り、読み取った値を正しい変数に割り当てるファイル読み取りルーチンを Delphi で作成するにはどうすればよいですか ("Dog" を文字列変数に、"5"、"4"、"7" を実変数または整数変数に)。
テキスト形式と数値形式の両方で表されるデータを任意の行に含むテキスト ファイルがあります。このようなもの:
Dog 5 4 7
この行を読み取り、読み取った値を正しい変数に割り当てるファイル読み取りルーチンを Delphi で作成するにはどうすればよいですか ("Dog" を文字列変数に、"5"、"4"、"7" を実変数または整数変数に)。
SplitString
fromを使用し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
浮動小数点値がある場合は、明らかに代用してください。
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;
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;