Miten voi siirtää tiedoston kirjoituskohdan haettuun paikkaan? Ja jos voi, niin kun kirjoittaa, niin kirjoittaako se vanhan päälle, vai väliin?
Lue tiedosto riveittäin taulukkoon ja korvaa haluamasi rivi jollain toisella, sitten käytä implode() funktiota ja liität taulukon taas kasaan kirjoittamista varten:
<?php $id = 5; // mikä rivi korvataan $tieto = "rivitystieto"; // millä tiedolla korvataan $filu = file("tiedosto.txt"); $filu[$id] = $tieto."\r\n"; $liitos = implode("", $filu); $save = fopen("tiedosto.txt", "w"); fwrite($save, $liitos); fclose($save); ?>
Tällä tavalla voit kirjoittaa vaikkapa keskelle tiedostoa, kunhan sinulla on tiedossa se rivinumero, tässä tapauksessa se oli 5.
Mikäli haluat poistaa kokonaan jonkin rivin, niin muuta tuo $filu[$id] muotoon: $filu[$id] = "";
Pitäisi kirjoittaa johonkin väliin
Tuolla koodilla se ei onnistu vai? Kylläpäs onnistuu:
$filu[$id] = $filu[$id]."tähän niin\r\nmonta riviä\r\nkuin vain haluat\r\n";
array_splice() -funktiolla saa lisättyä arvon keskelle taulukkoa. Mutta onnistuuhan se toki edellämainitullakin tavalla.
Minä en tuota implode()-funktiota käytä, kun kirjoitan tiedoston keskelle jotain. Teen ensin tiedostosta taulukon, muutan haluamaani riviä ja sitten kirjoitan foreach-silmukalla kaikki rivit taas tiedostoon.
Vai onko tarkoitus siirtää kirjoituskohta tiettyyn tiedoston kohtaan riveistä välittämättä? fseek-funktiolla tämä onnistuu, ja uusi tieto korvaa vanhan tiedon.
https://www.php.net/manual/en/function.fseek.php
lainaus:
Minä en tuota implode()-funktiota käytä, kun kirjoitan tiedoston keskelle jotain. Teen ensin tiedostosta taulukon, muutan haluamaani riviä ja sitten kirjoitan foreach-silmukalla kaikki rivit taas tiedostoon.
implode() tekee saman asian, mutta nopeammin :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.