
A mellékelt példaprogram megnyitása előtt a Replacer.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component – Install Component menüpontot.
A komponens három property-jében tudjuk megadni a bevezetőben említett adatokat, ezek neve a következő:
- FilePath: az állomány elérési útjának tárolására
- OldString: a kicserélendő karakterlánc számára
- NewString: a behelyezendő karakterlánc tárolására
A komponens Execute metódusába ágyaztuk a csere elvégzésének műveletét. A property-k megadása után egyszerűen meg kell hívnunk ezt a paraméter nélküli eljárást.
Az Execute metódusban először megvizsgáljuk, hogy a property-k tartalmaznak-e használható értékeket.
function TReplacer.Execute:boolean;
var f: file;
l: Longint;
s : string;
res : boolean;
begin
res := true;
if (FFilePath <> '') and (FOldString <> '') and (FNewString <> '') then begin
Ezt követően egy változóban tároljuk el a megadott, cserélendő karakterláncot, és inicializáljuk a FILE objektumunkat a megadott elérési útvonalon található állománnyal.
try
s := FOldString;
AssignFile(f, FFilePath);
Reset(f, 1);
A következő lépés, hogy elindítunk egy ciklust, melyben vizsgáljuk a fájl tartalmának a megadott karakterlánccal azonos hosszúságú részláncát, az egyezőséget keresve.
for l := 0 to FileSize(f) - Length(FOldString) - 1 do
begin
Application.ProcessMessages;
Seek(f, l);
BlockRead(f, FOldString[1], Length(FOldString));
Amennyiben a BlockRead metódussal beolvasott részlánc megegyezik a megadott karakterlánccal, akkor a BlockWrite eljárással beírjuk az állomány most megkapott pozíciójába az új karakterláncot.
if FOldString = s then
begin
Seek(f, l);
BlockWrite(f, FNewString[1], Length(FNewString));
end;
Application.ProcessMessages;
end;
CloseFile(f);
Miután az alkalmazásban a Form-ra helyeztük a komponenst, meghívhatjuk az Execute metódust a Csere nyomógomb megnyomásával. A példához mellékeltünk egy szöveges állományt (Sample.txt), melynek tartalmát a Form TMemo komponensében megjelenítjük. A csere végrehajtása után újraolvassuk az állományt, így a művelet eredménye rögtön látható.
Replacer1.FilePath := edit1.Text;
Replacer1.OldString := edit2.Text;
Replacer1.NewString := edit3.Text;
Replacer1.Execute;
Memo1.Text := '';
Memo1.Lines.LoadFromFile(edit1.Text);