home *** CD-ROM | disk | FTP | other *** search
- {
- 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.