Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: tekstitiedostoon krijoitttaminen

Sivun loppuun

Vasta_alkaja [09.07.2010 15:39:34]

#

Miten tekstitiedostoon voi kirjoittaa niin, että kirjoitus menee aina alkuun tai miten tekstin tulostuksen voisi helpoiten kääntää.

Grez [09.07.2010 15:42:03]

#

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.

Metabolix [09.07.2010 15:57:27]

#

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. :)

Grez [09.07.2010 16:32:34]

#

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.

Vasta_alkaja [09.07.2010 17:59:12]

#

Taidanpa kokeilla tuota file funktiolla lukemista.

Vasta_alkaja [10.07.2010 21:51:45]

#

ongelma on nyt tuon tallentamisen kanssa. miksi tallentaa kaiken samalle riville?

Macro [10.07.2010 21:56:39]

#

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);

Vasta_alkaja [11.07.2010 13:52:01]

#

Kiitos ja kumarrus.

tsuriga [11.07.2010 13:59:23]

#

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).


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta