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 回答