home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 11 / bonus / longrepl.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1990-10-05  |  2.2 KB  |  90 lines

  1. (* ------------------------------------------------------ *)
  2. (*                  LONGREPLACE.PAS                       *)
  3. (*                Unit für FILTER.PAS                     *)
  4. (*           (c) 1990 R. Hensmann & TOOLBOX               *)
  5. (* ------------------------------------------------------ *)
  6. UNIT LongReplace;
  7.  
  8. INTERFACE
  9.  
  10. TYPE BufArray = ARRAY [0..50000] OF CHAR;
  11.  
  12. PROCEDURE LongReplaceAll( VAR Search : STRING;
  13.                           VAR Replace: STRING;
  14.                           VAR Buffer;
  15.                           VAR Size   : LONGINT);
  16.  
  17. IMPLEMENTATION
  18.  
  19.  
  20. VAR Hilf    : ^BufArray;
  21.     HilfCmp : STRING;
  22.  
  23. FUNCTION StringComp( VAR St1, St2 : STRING) : BOOLEAN;
  24. VAR Lauf : WORD;
  25. BEGIN
  26.   HilfCmp := '';
  27.   FOR Lauf := 1 TO Length( St1) DO BEGIN
  28.     IF St1[Lauf] = '?' THEN
  29.       HilfCmp := HilfCmp + St2[Lauf]
  30.     ELSE
  31.       IF (St1[Lauf] <> St2[Lauf]) THEN BEGIN
  32.         StringComp := FALSE;
  33.         Exit;
  34.       END;
  35.   END;
  36.   StringComp := TRUE;
  37. END; (* StringComp *)
  38.  
  39. PROCEDURE LongReplaceAll( VAR Search : STRING;
  40.                           VAR Replace: STRING;
  41.                           VAR Buffer;
  42.                           VAR Size   : LONGINT);
  43. VAR b     : BufArray ABSOLUTE Buffer;
  44.     k,i,x : WORD;
  45.     ch    : CHAR;
  46.     ps    : ^STRING;
  47. BEGIN
  48.   New( Hilf);
  49.   k := 0; (* Zeiger auf neues Array *)
  50.   i := 0;
  51.   WHILE i < Size DO BEGIN
  52.     ch := b[i];
  53.     IF ch <> Search[1] THEN
  54.       Hilf^[k] := b[i]
  55.     ELSE BEGIN
  56.       ps := @b[i-1];
  57.       IF StringComp( Search, ps^) THEN BEGIN
  58.         Move( Replace[1], Hilf^[k], Length( Replace));
  59.         IF HilfCmp <> '' THEN BEGIN
  60.           FOR x := k TO k+Length(Replace)-1 DO
  61.             IF (Hilf^[x] = '?') AND (HilfCmp <> '') THEN BEGIN
  62.               Hilf^[x] := HilfCmp[1];
  63.               Delete( HilfCmp,1,1);
  64.             END;
  65.         END;
  66.         INC( k, INTEGER(Length(Replace))-1);
  67.         INC( i, INTEGER(Length(Search)) -1);
  68.       END ELSE
  69.         Hilf^[k] := b[i];
  70.     END;
  71.     INC( k);
  72.     INC( i);
  73.     IF k > 50000 THEN BEGIN
  74.       WriteLn('Pufferüberlauf');
  75.       HALT;
  76.     END;
  77.   END;
  78.   Move( Hilf^, Buffer, k);
  79.   Size := k;
  80.   Dispose( Hilf);
  81. END;
  82.  
  83. BEGIN
  84. END.
  85.  
  86.  
  87.  
  88.  
  89.  
  90.