[Back to FINDREPL SWAG index] [Back to Main SWAG index] [Original]

    {
    TRAVIS GRIGGS

    > I have one question For you in return: could you send the current
    > source code of your Program, or could you otherwise describe what
    > your input Text File Characterizations are (how big can the File be,
    > how long can the lines be, do you scan each line, or only taglines,

    Here's the code.  Don't worry about the structure of it.  I know it is bad but
    this was a quick and dirty little util I wrote up that I needed.  Have fun With
    it and try to speed it up.  And whoever else wants to help have fun!

    I hope this compiles I took out some stuff that would display a little picture
    of a sWord and show the version and product name.  I also tried DJ's idea of
    the buffer of 65535 but it said the structure was too large. So I used 64512.
    }
    Uses Crt;
    Type
      BBT  = Array[0..64512] of Char;

    Var
      BUFF        : ^BBT;
      TheFile,
      logFile     : Text;
      Looking,
      TempStr     : String[80];
      Numoflines,
      F, J, Point : LongInt;
      Divi, Multi : Real;

    Procedure Stop;
    begin
      Close(TheFile);
      Close(LogFile);
      Halt(1);
    end;

    Procedure CommandError(Err:  Byte);
    begin
      TextColor(10);
      Case Err Of
        2 : WriteLn('You must specify a File on the command line.');
        3 : WriteLn('Can''t find "', ParamStr(1),'"');
        4 : WriteLn('Too many open Files to open ', ParamStr(1));
        5 : WriteLn('Error in reading ', ParamStr(1));
      end; { end total Case }
      WriteLn;
      Halt(1);
    end; { end Procedure }

    begin
      if Paramcount < 1 Then
        CommandError(2);
      ClrScr;
      Assign(TheFile,ParamStr(1));
      New(BUFF);
      SetTextBuf(TheFile,BUFF^);
      Assign(LogFile,'FINDDUPE.LOG');
      ReWrite(LogFile);
      Reset(TheFile);
      Case IoResult Of
        2 : CommandError(3);
        4 : CommandError(4);
        3,5..162 : CommandError(5);
      end;
      While not EOF(TheFile) Do
      begin
        Readln(TheFile);
        Inc(Numoflines);
      end;
      Writeln('There are ',Numoflines,' lines in this File.');
      Writeln;
      Writeln('Duplicate lines are being written to FINDDUPE.LOG');
      Writeln;
      Writeln('Press any key to stop the search For duplicate lines');
      Point := 0;
      Reset(TheFile);
      While Point <> Numoflines Do
      begin
        GotoXY(1, 7);
        if Point <> 0 Then
        begin
          Divi  := Point / Numoflines;
          Multi := Divi * 100;
          WriteLn(Multi : 3 : 2, '% Completed');
        end;
        Reset(TheFile);
        if Point <> 0 Then
          For J := 1 to Point Do
            Readln(TheFile);
        Readln(TheFile,Looking);
        Reset(TheFile);
        Inc(Point);
        For F := 1 to Numoflines Do
        begin
          if KeyPressed then
            Stop;
          Readln(TheFile, TempStr);
          if (Point <> F) and (TempStr = Looking) Then
            Writeln(LogFile,Looking);
        end;
      end;
      GotoXY(1, 7);
      Writeln('100.00% Completed');
      Close(TheFile);
      Close(LogFile);
    end.

[Back to FINDREPL SWAG index] [Back to Main SWAG index] [Original]