Witam.
Ma ktos program w Pascalu albo Delphi który przeszukuje pliki i znajduje w nim ciąg znaków który chcemy aby znalazł? Prosze o pomoc.
0
0
Ponieważ kiedyś był przykład "Sumowanie bajtów", a teraz nie wiem gdzie to się podziało, wklejam kod:
{Autor: Snoobi
Opis: Program wczytuje plik, następnie zlicza wszystkie znaki w kodzie ASCII i wyświetla podsumowanie. Przydatne np. przy badaniu pliku z zaszyfrowanym textem (częstość występowania określonych liter)}
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, ComCtrls;
type
TMainFrm = class(TForm)
sgChart: TStringGrid;
btnStart: TButton;
OpenDialog: TOpenDialog;
ProgressBar: TProgressBar;
procedure btnStartClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
//...
procedure TMainFrm.btnStartClick(Sender: TObject);
var
F : File;
Ch : array[0..4095] of Char;
CharsTab : array[0..255] of Integer;
FSize : Int64;
I : Integer;
j : Integer;
n : int64;
begin
if OpenDialog.Execute then
for I := 0 to 255 do
CharsTab[I] := 0;
ProgressBar.Position := 0;
AssignFile(F, OpenDialog.FileName);
Reset(F, 1);
FSize := FileSize(F);
sgChart.ColWidths[1] := 120;
while not Eof(F) do
begin
n := FSize - FilePos(F);
if n < 4096 then
begin
BlockRead(F, Ch, n);
for j := 0 to n do
Inc(CharsTab[Ord(Ch[j])]);
end
else
begin
BlockRead(F, Ch, 4096);
for j := 0 to 4096 do
Inc(CharsTab[Ord(Ch[j])]);
end;
ProgressBar.Position := ((FilePos(F) * 100) div FSize);
end;
CloseFile(F);
for I := 0 to 255 do
begin
sgChart.Cells[0,I] := Format('Znak %d: %s',[I, Char(I)]);
sgChart.Cells[1,I] := FormatFloat('0.000',(CharsTab[I] * 100) / FSize)+' %, '+ IntToStr(CharsTab[I]);
end;
end;
procedure TMainFrm.FormCreate(Sender: TObject);
begin
sgChart.ColWidths[0] := 120;
sgChart.ColWidths[1] := 120;
end;
end.