免费帕斯卡读取文本文件,数字格式错误



>我使用pascal创建了文本文件,向该文本文件写入了一些带有数字的行现在我正在尝试读取文本文件的第一行,帕斯卡给我错误错误数字格式。

代码如下:

program Text_files;
{
procedure CreateFile(f1:string);
var f:text;
    x,x1,n:integer;
begin
    assign(f,f1);
    rewrite(f);
    n:=1;
        for x1:= 1 to 5 do
        begin
            for x:= 1 to 20 do
                begin
                    write(f,n,' ');
                    n:=n+1;
                end;
        writeln(f);
        end;
    close(f);
end;
}
procedure ReadFile(f1:string);
var f:text;
    n:integer;
    begin
        assign(f,f1);
        reset(f);
                while not eoln(f) do
                begin
                    read(f,n);
                    write(n,' ');
                end;
        close(f);
    end;
begin
  //CreateFile('NewFile.txt');
  ReadFile('NewFile.txt');
  Readln;
end.

我尝试将 n 变量更改为字符串类型,它起作用了,我读取了文本文件的第一行,但我希望读取的数据是整数类型。问题出在哪里?

新建文件.txt数据:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 

打开文本文件时无法读取数字。即使您尝试将其作为记录文件读取,它也不起作用,因为这些记录的长度不同。1 的大小只有字节,100 是三个字节。此外,您还有空间,可能还有 EOL。因此,您必须更改

procedure CreateFile(f1:string);
var f:file of integer;
    x,x1,n:integer;
begin
    assign(f,f1);
    rewrite(f);
    n:=1;
    for x1:= 1 to 100 do
    begin
       write(f,x1);
    end;
    close(f);
end;

然后

procedure ReadFile(f1:string);
var f:file of integer;
    n:integer;
begin
    assign(f,f1);
    reset(f);
    while not eof(f) do
    begin
        read(f,n);
        write(n,' ');
    end;
    close(f);
end;
begin
  CreateFile('NewFile.txt');
  ReadFile('NewFile.txt');
end.

这应该可以解决您的问题。但它有一个缺点:文件内容不是人类可读的。如果出于某种原因这对你很重要,你必须以艰难的方式去做。即您保留您的创建文件版本并仅重写读取文件

procedure ReadFile(f1:string);
    procedure getNumsFromString(s:string);
    var
       sTmp: string;
       iPos: integer;
       i   : integer;
    begin
       repeat
          iPos=pos(#32,s);
          sTmp=copy(s,1,iPos);
          s=copy(s,iPos+1,length(s));
          i=strtoInt(sTmp);
          write(i,#32);
       until (length(s)=0); 
    end;
var f:text;
    s:string;
begin
    assign(f,f1);
    reset(f);
    while not eof(f) do
    begin
       read(f,s);
       getNumsFromString(s);
       writeln();
    end;
    close(f);
end;

代码未经测试,但你明白了。希望对你有帮助

Procedure Reading;
Var
   n: longint;
Begin
 assign(input,'NewFile.txt');
 reset(input);
 While not EoF{EoLn} do
  begin
    read(n);
    write(n,' '); 
  end;   
End;

最新更新