2014-02-22 43 views
0

我做自由帕斯卡过滤程序(一个很简单的一个)和我在读从一个巨大的文本文件的源文本。如果我使用的字符串,一切工作正常,但它仅限于255。如果我尝试使用AnsiString类型,它给了我错误201AnsiString类型错误201免费帕斯卡

代码:

program TextFilter; 
uses Crt; 

Var 
    _input, filter, 
    tilStar, afterStar, 
    output : string; 
    input : ansistring; 
    i, j : longint; 
    have : boolean; 
    fileIn, fileOut : text; 

Function cutDownText(orig:ansistring; til:integer) : string; 
var 
    new : ansistring; 
    i : integer; 

begin 
    new:=''; 

    for i:=1 to length(orig) do 
    if i>til then 
     new:=new+orig[i]; 

    cutDownText:=new; 
end; 

Begin 
    ClrScr; 

    writeln('K‚rem a szűr‹t:'); 
    readln(filter); 

    Assign(fileIn, 'C:\DEVELOPMENT\Pascal\source.txt'); 
    Assign(fileOut, 'C:\DEVELOPMENT\Pascal\output.txt'); 

    reset(fileIn); 
    rewrite(fileOut); 

    tilStar:=''; 
    afterStar:=''; 
    output:=''; 
    have:=true; 
    input:=''; 

    while not(eof(fileIn)) do begin 
    readln(fileIn, _input); 
    input:=input+_input; 
    end; 

    close(fileIn); 

    for i:=1 to length(filter) do 
    if filter[i]='*' then 
     break 
    else 
     tilStar:=tilStar+filter[i]; 

    for i:=i to length(filter) do 
    if not(filter[i]='*') then 
     afterStar:=afterStar+filter[i]; 

    while(have=true) do begin 
    if (Pos(tilStar, input)>0) then begin 
     if (Pos(tilStar, input) > Pos(afterStar, input)) then begin 
     for j:=(Pos(tilStar, input)+length(tilStar)) to length(input) do begin 
      output:=output+input[j]; 
     end; 
     writeln(fileOut, output); 
     output:=''; 
     input:=cutDownText(input, (j + length(afterStar))); 
     end else begin 
     for j:=(Pos(tilStar, input)+length(tilStar)) to (Pos(afterStar, input)-1) do begin 
      output:=output+input[j]; 
     end; 
     writeln(fileOut,output); 
     output:=''; 
     input:=cutDownText(input, (j + length(afterStar))); 
     end; 
    end else 
     have:=false; 
    end; 

    close(fileOut); 

    readkey; 
End. 

回答

0

错误201名的意思是“范围检查错误”。如果您在编译程序时进行了范围检查,则在以下情况下可能会出现此错误:

  • 使用索引超出其声明范围访问数组。
  • 尝试将值分配给它的范围(例如枚举类型)之外的变量。

输出和cutDownText被声明为字符串。如果您没有使用{$ H +}选项编译程序,则字符串限制为255个字符,但您可以尝试从输入的ansistring中复制超过255个字符。

尝试使用{$ H +}编译或字符串转换为AnsiString类型无处不在。

+0

哦,我没想到的唯一的事情就是cutDownText功能。谢谢! – LPeter1997

+0

不客气。 –