Pascal阅读文本文件,数字格式错误

时间:2014-04-05 15:04:04

标签: pascal freepascal

我使用pascal创建了文本文件,在那个文本文件中写了一些带数字的行 现在我正在尝试阅读第一行文本文件和pascal给我错误BAD NUMBER FORMAT。

这是代码:

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 变量更改为字符串类型,并且它可以读取文本文件的第一行,但我希望读取数据为整数类型。 有什么问题?

NewFile.txt DATA:

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 

2 个答案:

答案 0 :(得分:1)

打开文本文件时无法读取数字。即使您尝试将其作为记录文件阅读,它也不会起作用,因为这些记录的长度不同。 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.

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

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;

代码未经测试但您明白了。希望它有所帮助

答案 1 :(得分:-1)

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