我正在使用Pascal。處理閱讀文件時遇到問題。在Pascal中讀整數
我有一個整數的文件。我帕斯卡讀取文件是:
read(input, arr[i]);
,如果我的文件內容爲1 2 3
那麼它是好的,但如果它是1 2 3
或1 2 3(enter here)
(有在後面加上一個空格或空行),那麼我的編曲會1 2 3 0
。
我正在使用Pascal。處理閱讀文件時遇到問題。在Pascal中讀整數
我有一個整數的文件。我帕斯卡讀取文件是:
read(input, arr[i]);
,如果我的文件內容爲1 2 3
那麼它是好的,但如果它是1 2 3
或1 2 3(enter here)
(有在後面加上一個空格或空行),那麼我的編曲會1 2 3 0
。
您可以先將字符串讀入臨時文件,然後在轉換之前將其讀入trim。
它不傷害提像基本什麼類型的Pascal什麼平臺你使用,以便人們可以給一個明確的答案(如文章指出,心不是在許多帕斯卡一個不錯的方式開箱即用)
如果我還記得有一個叫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;
希望這有助於 最好的問候, 湯姆。
您需要將另一個變量(TP中鍵入的單詞,Delphi中鍵入的longint)傳遞給Val,其中val存儲其錯誤。傳統上,名稱「code」用於var,可能是因爲它在TP幫助中是如此。 – 2010-02-01 15:03:37
從我記得read
字面上讀取文件作爲一個字符流,其中空格和回車是,但我相信這些應該被忽略,因爲你正在讀入一個整數數組。你的文件實際上是否包含每個數字之間的空格字符?
另一種方法是使用readLn
並將所需的整數作爲新行存儲在文件中,例如,
我已在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的工作。
+1非常好的和經典的解決方案。通常它只是EOL或EOLN()或者不是SEEKEOLN()。不知道這是否是Delphi陷阱 – 2010-02-01 15:00:33
+1 for Pascal!這是一個很好的(雖然有點冗長)的語言。太糟糕了,這些日子並不那麼受歡迎。 – Seth 2010-01-30 01:38:10