用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中没有一

我在用帕斯卡。我在处理读取文件时遇到问题

我有一个整数文件。读取文件的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.