我正在使用免费的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.
答案 0 :(得分:0)
错误201表示“范围检查错误”。如果您使用范围检查编译了程序,则在以下情况下可能会出现此错误:
Output和cutDownText声明为字符串。如果不使用{$ H +}选项编译程序,则字符串限制为255个字符,但您可以尝试从输入的ansistring复制超过255个字符。
尝试使用{$ H +}进行编译或在任何地方将字符串转换为ansistring。