ansistring错误201 in free pascal

时间:2014-02-22 20:43:06

标签: string pascal

我正在使用免费的pascal制作一个过滤程序(一个非常简单的程序),我正在从一个巨大的文本文件中读取源文本。如果我使用字符串,一切正常,但它限制为255.如果我尝试使用ansiString,它会给我错误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.

1 个答案:

答案 0 :(得分:0)

错误201表示“范围检查错误”。如果您使用范围检查编译了程序,则在以下情况下可能会出现此错误:

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

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

尝试使用{$ H +}进行编译或在任何地方将字符串转换为ansistring。