2014-02-22 44 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

不客氣。 –