用Pascal读取整数
我在用帕斯卡。我在处理读取文件时遇到问题 我有一个整数文件。读取文件的pascal是:用Pascal读取整数,pascal,Pascal,我在用帕斯卡。我在处理读取文件时遇到问题 我有一个整数文件。读取文件的pascal是: read(input, arr[i]); 如果我的文件内容是1 2 3,那么它是好的,但是如果它是1 2 3或1 2 3(在这里输入)(末尾有空格或空行),那么我的arr将是1 2 3 0 您可以将字符串读入一个临时字符串,然后在转换之前将其读入 为了让人们能够给出一个具体的答案,提到一些基本的东西,比如你在什么平台上使用什么类型的Pascal,这并没有什么坏处(正如文章所指出的,在许多Pascal中没有一
read(input, arr[i]);
如果我的文件内容是
1 2 3
,那么它是好的,但是如果它是1 2 3
或1 2 3(在这里输入)
(末尾有空格或空行),那么我的arr将是1 2 3 0
您可以将字符串读入一个临时字符串,然后在转换之前将其读入
为了让人们能够给出一个具体的答案,提到一些基本的东西,比如你在什么平台上使用什么类型的Pascal,这并没有什么坏处(正如文章所指出的,在许多Pascal中没有一种很好的OOTB方法)如果我记得有一个名为
Val
的字符串函数,可以将字符串转换为数字……我对Pascal的了解有点生疏(Turbo Pascal v6)
变量
num:整数;
str:字符串;
开始
str:=“1234”;
Val(str,num);(*这是我不确定的行*)
结束;
希望这有帮助,
顺致敬意,
Tom。从我记忆中的
read
字面上是以字符流的形式读取文件,其中有空格和回车符,但我认为在读取整数数组时应该忽略这些字符。您的文件是否在每个数字之间包含空格字符
另一种方法是使用readLn
,并将所需的整数作为新行存储在文件中,例如
一,
二,
三,
我已经在Delphi2009控制台应用程序上测试了这个问题。代码是这样的
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的遗产,我认为它必须在TurboPascal中工作。+1对于Pascal!这是一种很好的语言(虽然有点冗长)。遗憾的是,现在它不那么流行。+1非常好而且经典的解决方案。经典地说,它只是EOL或EOLN()或是一些没有SEEKEOLN()的东西。不知道这是否是一个Delphi Gotcha,您需要另一个变量(在TP中键入的单词,在Delphi中键入的longint)传递给Val,Val在其中存储其错误。传统上,var使用“code”这个名称,可能是因为TP帮助中就是这样。
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.