Pascalを使用しています。ファイルの読み取りに問題があります。
整数のファイルがあります。ファイルを読むための私のパスカルは次のとおりです。
read(input, arr[i]);
私のファイル1 2 3
の内容が良い場合は良いですが、そうである1 2 3
場合1 2 3(enter here)
(最後にスペースまたは空の行があります)、私のarrはになります1 2 3 0
。
Pascalを使用しています。ファイルの読み取りに問題があります。
整数のファイルがあります。ファイルを読むための私のパスカルは次のとおりです。
read(input, arr[i]);
私のファイル1 2 3
の内容が良い場合は良いですが、そうである1 2 3
場合1 2 3(enter here)
(最後にスペースまたは空の行があります)、私のarrはになります1 2 3 0
。
Delphi2009コンソールアプリケーションで問題をテストしました。このようなコード
var
F: Text;
A: array[0..99] of Integer;
I, J: Integer;
begin
Assign(F, 'test.txt');
Reset(F);
I:= -1;
while not EOF(F) do begin
Inc(I);
Read(F, A[I]);
end;
for J:= 0 to I do write(A[J], ' ');
Close(F);
writeln;
readln;
end.
あなたが書いたように正確に動作します。すべての空白文字をスキップするSeekEOLN関数を使用して改善できます。次のコードは間違った追加のゼロを生成しません:
var
F: Text;
A: array[0..99] of Integer;
I, J: Integer;
begin
Assign(F, 'test.txt');
Reset(F);
I:= -1;
while not EOF(F) do begin
if not SeekEOLN(F) then begin
Inc(I);
Read(F, A[I]);
end
else Readln(F);
end;
for J:= 0 to I do write(A[J], ' ');
Close(F);
writeln;
readln;
end.
そのスタッフはすべてDelphiの遺産にすぎないので、TurboPascalで機能する必要があると思います。
私が思い出すことができることから、read
文字通りファイルを文字のストリームとして読み取ります。その中には空白とキャリッジリターンがありますが、整数配列を読み取る場合は、これらを無視する必要があると思います。ファイルには実際に各数値の間にスペース文字が含まれていますか?
別のアプローチはreadLn
、必要な整数を使用して、ファイルに新しい行として保存することです。
1
2
3
文字列を一時的に読み取ってから、変換する前にトリミングすることができます。
人々が特定の答えを出すことができるように、どのプラットフォームでどのタイプの Pascal を使用しているかなどの基本事項について言及することは害にはなりません (記事に記載されているように、多くの Pascal では OOTB の良い方法はありません)。
文字列を数値に変換する文字列関数があったことを思い出すとVal
...パスカルに関する私の知識は少しさびています(Turbo Pascal v6)
変数 数値 : 整数; str : 文字列; 始める 力:= '1234'; ヴァル(文字列、数値); (*これは私がよくわからない行です*) 終わり;
これがお役に立てば幸いです。よろしくお願いします、トム。