Miten tekstitiedostoon voi kirjoittaa niin, että kirjoitus menee aina alkuun tai miten tekstin tulostuksen voisi helpoiten kääntää.
Lähtökohtaisesti tiedoston alkuun lisääminen on hankalaa, sillä kaikissa(?) käyttöjärjestelmissä se tarkoittaa, että tiedostossa jo olevaa tavaraa joudutaan siirtämään eteenpäin. Tiedoston loppuun lisättäessähän aikaisempaan dataan ei tarvitse koskea.
Tulostuksen voi kääntää lukemalla rivit funktiolla file
ja kääntämällä taulukon funktiolla array_reverse
. Toinen vaihtoehto on kiertää file
-funktion palauttamaa taulukkoa takaperin vaikka for-silmukalla
.
Grez kirjoitti:
Lähtökohtaisesti tiedoston alkuun lisääminen on hankalaa, sillä kaikissa(?) käyttöjärjestelmissä se tarkoittaa, että tiedostossa jo olevaa tavaraa joudutaan siirtämään eteenpäin.
Tästä tuli mieleeni, että FATin kaltaiseen tiedostojärjestelmään olisi aika helppo toteuttaa lisäys alkuun. Siinähän olisi yhtä helppo (tai jopa helpompi) lisätä uusia blokkeja tiedoston alkuun kuin loppuunkin. Tarvittaisiin enää direntryyn (inodeen) tieto, montako tavua ensimmäisen blokin alusta skipataan, koska lisätty data ei luultavasti kuitenkaan ole tasablokkeja. :)
Niin, en tosiaan tiedä onko jossain tiedostojärjestelmässä olemassa valmiiksi moinen mahdollisuus. Onhan esim. NTFS:ssä sparse filejä ja muuta villiä, niin mikseipä olisi tuollaistakin.
Taidanpa kokeilla tuota file funktiolla lukemista.
ongelma on nyt tuon tallentamisen kanssa. miksi tallentaa kaiken samalle riville?
File() lukee tiedot taulukkoon, etkä pysty sitä tallentamaan sellaisenaan. Voit käydä sen läpi for-silmukalla, muodostamalla siitä stringin ja kirjoittaa file_put_contents()-funktiolla.
<?php $tiedosto = file("tiedosto.txt"); $uusi = ""; for($i = 0; $i < sizeof($tiedosto); $i++) { $uusi .= $tiedosto[$i] . "\n"; } file_put_contents($tiedosto, $uusi);
Kiitos ja kumarrus.
Yllä oleva koodi pruuttaa rivien perään ylimääräisiä rivinvaihtoja. Jos et karsi rivinvaihtoja itse taulukosta, voit käyttää suoraan file_put_contents($filename, $newData);
. Jos taas karsit (esim. FILE_IGNORE_NEW_LINES
-flagilla file
-funkkarille), for
-hässäkän korvaa implode("\n", $newData)
.
Aihe on jo aika vanha, joten et voi enää vastata siihen.