2010-01-29 22 views
4

我正在使用Pascal。處理閱讀文件時遇到問題。在Pascal中讀整數

我有一個整數的文件。我帕斯卡讀取文件是:

read(input, arr[i]); 

,如果我的文件內容爲1 2 3那麼它是好的,但如果它是1 2 31 2 3(enter here)(有在後面加上一個空格或空行),那麼我的編曲會1 2 3 0

+1

+1 for Pascal!這是一個很好的(雖然有點冗長)的語言。太糟糕了,這些日子並不那麼受歡迎。 – Seth 2010-01-30 01:38:10

回答

0

您可以先將字符串讀入臨時文件,然後在轉換之前將其讀入trim

它不傷害提像基本什麼類型的Pascal什麼平臺你使用,以便人們可以給一個明確的答案(如文章指出,心不是在許多帕斯卡一個不錯的方式開箱即用)

0

如果我還記得有一個叫Val字符串函數的字符串轉換爲數字......我帕斯卡爾的知識是有點生疏了(Turbo Pascal的V6)

 
var 
    num : integer; 
    str : string; 
begin 
    str := '1234'; 
    Val(str, num); (* This is the line I am not sure of *) 
end; 

希望這有助於 最好的問候, 湯姆。

+0

您需要將另一個變量(TP中鍵入的單詞,Delphi中鍵入的longint)傳遞給Val,其中val存儲其錯誤。傳統上,名稱「code」用於var,可能是因爲它在TP幫助中是如此。 – 2010-02-01 15:03:37

1

從我記得read字面上讀取文件作爲一個字符流,其中空格和回車是,但我相信這些應該被忽略,因爲你正在讀入一個整數數組。你的文件實際上是否包含每個數字之間的空格字符?

另一種方法是使用readLn並將所需的整數作爲新行存儲在文件中,例如,

1

我已在2009年的Delphi控制檯應用程序測試的問題。這樣的代碼

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的傳統,我想它一定在Turbo Pascal的工作。

+0

+1非常好的和經典的解決方案。通常它只是EOL或EOLN()或者不是SEEKEOLN()。不知道這是否是Delphi陷阱 – 2010-02-01 15:00:33