Írás meghatározott pozícióba

 

Teszteléshez, jegyzettömb programunkkal, hozzunk létre egy "irasi_pozicio" elnevezésű, és "TXT" kiterjesztésű fájlt, ugyan azon mappába, melybe a php fájlok is lesznek
Az irasi_pozicio.txt fájlunkba, írjuk be a következő sorokat, és mentés után zárjuk is be.
Tesztelés megkönnyítése végett, szövegrészek hossza, szöveg elejétől és az azt követő vesszőt is beleszámolva, 10 karakterláncot tartalmaznak.


Egy ABCDE,Kettő ABC,Három ABC,Négy ABCD,Öt ABCDEF,

 

Fájlba írás,fwrite() függvénnyel:
          - fwrite($munkafájl, mit írunk);
          - fwrite($munkafájl, mit írunk, és mennyi bájtot);

Írás fwrite() függvénnyel, pozíció meghatározása nélkül.
Fájlműveleti jelző: ( r+ )
<?php
$mf= fopen("irasi_pozicio.txt", "r+"); 
$iras ="KAKUKK ŐŐ,";       // Idézőjelek közötti 10 karakterláncot írjuk be, a meglévő szövegbe.
fwrite($mf, $iras);
fclose($mf);

// A következő programrész, csak a visszaellenőrzés céljából van beírva.
$mf= fopen("irasi_pozicio.txt", "r");     $karakter= fgets($mf,60);      echo $karakter;     fclose($mf);

?>
Programunk eredménye:Törli az első 10 karakterláncot (Egy ABCDE,) és helyére írja az új szót.

KAKUKK ŐŐ,ttő ABC,Három ABC,Négy ABCD,Öt ABCDEF,

 

Írás fwrite() függvénnyel, pozíció meghatározásával.
Fájlműveleti jelző: ( r+ )
<?php
$mf= fopen("irasi_pozicio.txt", "r+"); 
fseek($mf,20);                     // Pozíció-jelzőt, a 20-ik karakterlánc mögé állítjuk, azaz a "Három ABC," szó elé.
$iras ="KAKUKK ŐŐ,";       // Idézőjelek közötti 10 karakterláncot írjuk be, a meglévő szövegbe.
fwrite($mf, $iras);
fclose($mf);

// A következő programrész, csak a visszaellenőrzés céljából van beírva.
$mf= fopen("irasi_pozicio.txt", "r");     $karakter= fgets($mf,60);      echo $karakter;     fclose($mf);

?>
Programunk eredménye: Törli 20-tól 30-ig a karakterláncot (Három ABC,) és helyére írja az új szót.

Egy ABCDE,Kettő ABCKAKUKK ŐŐ,Négy ABCD,Öt ABCDEF,

 

Írás fwrite() függvénnyel, pozíció meghatározásával.
Fájlműveleti jelző: ( r+ )
Meglévő adatok megtartása mellett.
<?php
$mf= fopen("irasi_pozicio.txt", "r+"); 
fseek($mf,20);                     // Pozíció-jelzőt, a 20-ik karakterlánc mögé állítjuk, azaz a "Három ABC," szó elé.

// Elsőként, beírjuk az új adtokat, majd a tartalmi rész hátrelévő részét.
$iras ="KAKUKK ŐŐ,Három ABC,Négy ABCD,Öt ABCDEF,";       
fwrite($mf, $iras);
fclose($mf);

// A következő programrész, csak a visszaellenőrzés céljából van beírva.
$mf= fopen("irasi_pozicio.txt", "r");     $karakter= fgets($mf,60);      echo $karakter;     fclose($mf);

?>
Programunk eredménye: Törli 20-tól a karakterláncot, és helyére írja az új tartalmat.

Egy ABCDE,Kettő ABCKAKUKK ŐŐ,Három ABC,Négy ABCD,Öt ABCDEF,

 

Ha az irasi_pozicio.txt fájlunk tartalma rövid, azaz csak egy két sornyi szöveget, adatot tartalmaz, akkor a fenti programunk is megfelel a feltételeinknek.
Kimásoljuk az irasi_pozicio.txt fájl tartalmából, a beírandó adatok meghatározott pozíciójától kezdve, a már meglévő tartalmat, és az új adat mögé illesztjük, majd programunkkal ezen hosszúságú tartalmat íratjuk be.

De, mi van akkor, ha az irasi_pozicio.txt fájl tartalma igen hosszú, vagy másokkal közösen dolgozunk egy adott dokumentáción, de őnekik nincs közvetlen hozzáférésük az irasi_pozicio.txt fájl jegyzettömb programmal történő megnyitásához.

A következő példákban láthatjuk, hogyan küszöbölhető ki, több felhasználó esetében az írási probléma.

 

Ha, valaki módosítani akar egy meglévő dokumentumot, akkor ismernie kell annak tartalmát.
Első lépésként a fpassthru() függvénnyel kiíratjuk a meglévő tartalmat és annak hosszát.
<?php $mf = fopen("irasi_pozicio.txt","r"); echo fpassthru($mf); fclose($mf); ?>
Programunk eredménye: Kiírja a teljes tartalat:
A sor végi szám, nem része az irasi_pozicio.txt fájl tartalmának, csak jelzi a karakterlánc hosszát.


Egy ABCDE,Kettő ABC,Három ABC,Négy ABCD,Öt ABCDEF,54

 

Írás, meghatározott pozícióba. Fájlműveleti jelző: ( r+ )
<?php
$mf=fopen("irasi_pozicio.txt", "r+");                 // Munkafájl megnyitása olvasásra és írásra ( r+ ).

$hova="Egy ABCDE,Kettő ABC,";                 // Fájlpozíció-mutató, mely szövegrész mögé kerüljön.
$fm_ertek=strlen($hova);                               // Fájlpozíció-mutató beállítása oda, ahova az új adatot írjuk.
$tartalom_hossza=55;                                   // Az előző program által kiírt érték + 5 a biztonság végett.
$fm_utani=$tartalom_hossza-$fm_ertek;         // Fájlpozíció-mutató pozíciója utáni, karakterlánc hossza.

fseek($mf,$fm_ertek);                                    // Fájlpozíció-mutató beállítása az $fm_ertek váltózóban tárolt értékre.

// Fájlpozíció-jelző utáni tartalom hossza: $fm_utani=55-20; A $fmu_tartalom változóban eltároljuk ezt a 35 karakterláncot.
$fmu_tartalom= fgets($mf,$fm_utani);    
echo $fmu_tartalom."<br />";	             // Ellenőrzésre jó, de a program szempontjából, ezen sorra nincs szükség.
rewind($mf);                                           // Fájlpozíció-jelzőt, alapállásra, azaz a 0-ik pozícióba állítjuk.   
fseek($mf,$fm_ertek);                              // Új adatok beírásának kezdő pozíciója, az $fm_ertek váltózóban tárolt értékre.
$uj_adat="KAKUKK ŐŐ,";                       // $uj_adat elnevezésű változó tárolja, az idézőjelek közé beírt új adatot.

// $modositas elnevezésű változóba helyezzük, a $uj_adat és $fmu_tartalom nevű változókban tárolt adatokat.
$modositas=$uj_adat .= $fmu_tartalom;

  
fwrite($mf, $modositas);                     // $modositas elnevezésű változóban tároltakat beíratása.
fclose($mf);                                       // A megnyitott munkafájl bezárása.

// A következő programrész, csak a visszaellenőrzés céljából van beírva.
$mf= fopen("irasi_pozicio.txt", "r");     $karakter= fgets($mf,100);      echo $karakter;     fclose($mf);

?>
Programunk eredménye:

Fájlpozíció-mutató utáni tartalom: Három ABC,Négy ABCD,Öt ABC

Egy ABCDE,Kettő ABC,KAKUKK ŐŐ,Három ABC,Négy ABCD,Öt ABC

 


 

 

Emlékeztető:

Az " r+ " a munkafájlt, írásra és olvasásra nyitja meg. Az állománypozíció-jelzőt a fájl elejére állítja.
Új adatok bevitelénél:


  1. Az fseek() függvénnyel határozzuk meg, a fájlpozíció-mutató, kezdő pozícióját.
  2. Az fgets() függvénnyel határozzuk meg, a fájlpozíció-mutató, végső pozícióját. Így a kezdő és végső pozíciók között elhelyezkedő karakterláncot olvassa ki.
  3. Az fgetc() függvény, egyetlen-egy karakterláncot olvas be. Így a kezdő pozíció után elhelyezkedő karakterláncot olvassa ki.
  4. A rewind() függvénnyel, visszaállítjuk dokumentumunk elejére a fájlpozíció-mutatót.
  5. A strlen() függvénnyel, meghatározhatjuk egy adott tartalmi rész, karakterlánc hosszát.
  6. Az fwrite() függvénnyel, tetszőleges adatot, azaz tartalmat írathatunk be, a megnyított munkafájlba.
  7. A fclose() függvény, bezárja a munkafájlt.