0

Pascalのデータファイルから複数行を読み取るのに問題があります。複数の行を読み込もうとすると、「無効な数値形式」の実行時エラーが発生します(最初の行だけを個別にテストしたところ、正常に機能します)。これは、行末のキャリッジリターンと関係があると思います。

.DATファイルのすべての行を読み取る必要があるコードは次のとおりです。

program commission;
var
      moreRec:Boolean;
      FileOut:Text;
      FileIn:Text;

      DRONE_ID:String[9];
      DRONE_NAME:String[18];
      SALES:Real;
      COMM:Real;

procedure header;
begin
  writeln(FileOut, Space(16),'SALES COMMISSION REPORT');
  writeln(FileOut);
  writeln(FileOut,'   SSN',Space(10),'SALESPERSON',Space(9),'SALES    COMMISSION');
  writeln(FileOut);
end;

procedure readRec;
begin
  if EOF(FileIn) THEN
    moreRec:=false
  else
    read(FileIn, DRONE_ID);
    read(FileIn, DRONE_NAME);
    read(FileIn, SALES);
    COMM:=SALES*0.03;
end; {readRec}    

procedure initial;
begin
  moreRec:=true;
  Assign(FileIn, 'PRG2-150.DAT ');
  Reset(FileIn);
  Assign(FileOut,'output.txt');
  Rewrite(FileOut);
  readRec

end; {initial}

procedure process;
begin
  write(FileOut, DRONE_ID);
  write(FileOut, Space(2));
  write(FileOut, DRONE_NAME);
  write(FileOut, Space(5));
  write(FileOut, SALES:9:2);
  write(FileOut, Space(3));
  writeln(FileOut, COMM:8:2);
  readRec
end; {process}

procedure wrapup;
begin
  Close(FileOut);
  Close(FileIn);
end; {wrapup}

begin
  initial;
  header;
  while moreRec = true do
    process;
  wrapup;
end.

そして、これが私が読んでいる.DATファイルです:

998874673Joe Smith         27.65
849773298Sue Williams      35.90
445861253Al Oop            54.90
584988754Diane Mindykowski 25.96
758423652Alicen Morse      53.35
485236845Burton Schuring   58.52
586974512Linda Gillam      69.35

Pascalは初めてですが、プログラムが複数行で読み取られない理由を知りたいです。

ありがとう

4

2 に答える 2

2

私はあなたが必要だと思います

  readln(FileIn);

readRecの終わりに向かって、CR/LF区切り文字を超えて次の行にスキップします。

于 2013-02-20T02:07:06.033 に答える
0

Pascalは、テキストファイルのデータフィールドを空白で区切ることを望んでいます。問題は、Drone_IdフィールドとDrone_Nameフィールドの間にスペースがないことです。

998874673Joe Smith         27.65
_________^__  Insert space here.

また、行の最後のフィールド(Sales)にはreadlnを使用する必要があります。

編集:申し訳ありませんが、スペースは必要ありません(最初のフィールドは数値だと思っていました)。ただし、行の最後のフィールドで必ずreadlnを使用してください。

于 2013-02-22T20:05:12.230 に答える