2013-02-20 36 views
0

我無法從Pascal中的數據文件中讀取多行文本。它會給我一個「無效的數字格式」運行時錯誤,當我嘗試讀取多行(我單獨測試了第一行,它工作正常)。這使我認爲它與行尾的回車有關。在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 

我對帕斯卡爾來說是新的,但我很想知道爲什麼我的程序不會在多行中讀取。

感謝

+1

你最好[使用記錄](http://pascal-programming.info/lesson11.php#5)爲您的任務。 – TLama 2013-02-20 15:26:58

回答

2

我認爲你需要一個

readln(FileIn); 

朝readRec結束時跳過的CR/LF分隔符到下一行。

0

Pascal希望文本文件中的數據字段以空格分隔。問題是Drone_Id和Drone_Name字段之間沒有空格。

998874673Joe Smith   27.65 
_________^__ Insert space here. 

您還應該使用readln作爲行(銷售)的最後一個字段。

編輯:對不起,空間不需要那裏(我想第一個字段是數字)。但是請確保在該行的最後一個字段上使用readln。

相關問題