Strona 1 z 1

[php] zapis do okreslonej lini

: sob lip 24, 2004 10:42 am
autor: MiChaSSs
Cześć. Jak zapisac jakis tekst np. do 60 lini w pliku ??

Re: [php] zapis do okreslonej lini

: sob lip 24, 2004 2:11 pm
autor: templar
musisz odczytac plik do tablicy a później dany element tablicy zmodyfikować, i zapisac jeszcze raz wszystko do pliku

Re: [php] zapis do okreslonej lini

: sob lip 24, 2004 2:22 pm
autor: MiChaSSs
nie mozna tego zrobic w jakis latwiejszy sposob ?? probowalem zrobic tak jak powiedziales ale zapisalo sie tylko "Array"

Re: [php] zapis do okreslonej lini

: sob lip 24, 2004 2:47 pm
autor: Wojciech Kocjan
Powinno to wygladac mniej wiecej tak:

[php]<?php
$fileName='dane.txt';
$content=file($fileName);
$content[59]='Nowa linia 60'; // numerowane od zera
$handle=fopen($fileName,'w');
fwrite($handle,$content);
fclose($handle);
?>[/php]

Re: [php] zapis do okreslonej lini

: sob lip 24, 2004 4:55 pm
autor: templar
a nie powinno być wcześniej: $content=join($content);

Re: [php] zapis do okreslonej lini

: sob lip 24, 2004 5:47 pm
autor: MiChaSSs
robilem tak jak Ty Wojtek ale niestety zapisuje sie "Array" :(

Re: [php] zapis do okreslonej lini

: sob lip 24, 2004 5:56 pm
autor: Grzegorz Winiarski
Wstaw to zamiast fwrite() w skrypcie.
[php]<?php
foreach($content as $c) {
fwrite($handle, $c.'\n');
}

?>[/php]

templar_of_steel: nie powinno być join() bo chcemy miec kazda linijke osobno.

Re: [php] zapis do okreslonej lini

: sob lip 24, 2004 5:57 pm
autor: Wojciech Kocjan
MiChaSSs pisze:robilem tak jak Ty Wojtek ale niestety zapisuje sie "Array" :(
Templar ma racje, brakuje tutaj join(), zrob cos takiego:

[php]<?php
fwrite($handle,trim(implode("\n",$content)));
?>[/php]

Re: [php] zapis do okreslonej lini

: sob lip 24, 2004 10:08 pm
autor: MiChaSSs
niestety, i kod Grzegorza i Wojtka zapisują "Nową linie 60" w lini 1 ;(

Re: [php] zapis do okreslonej lini

: ndz lip 25, 2004 10:12 pm
autor: viraptor
Wiec moze wyjasnie sprawe - kod ktory wypisuje Array robi tak oczywiscie, bo probujesz wypisac tablice funkcja do stringow. Taka zwraca wtedy Array.
A foreach nie dziala z tego powodu:
[php]<?php
$content[2]='Nowa linia 2';
$content[0]='\n';
$content[1]='\n';
vardump($content);
?>[/php]
zwraca:

Kod: Zaznacz cały

array(3) { [2]=>  string(12) "Nowa linia 2" [0]=>  string(2) "\n" [1]=>  string(2) "\n" }
i juz widac dlaczego nowa linia [2] laduje w pierwszej linii.
Teraz kod dzialajacy (mozna go zoptymalizowac, ale leniwy jestem:
[php]<?php
$fileName='dane.txt';
$content=file($fileName);
$content[59]='Nowa linia 60'; // numerowane od zera
$handle=fopen($fileName,'w');

$linenr = -1; // bo numerowane od zera ;)
// dodajemy padding wartosci 0-60, bo mogly nie istniec
while (list($key, $val) = each($content)) {
$linenr++;
if($linenr < $key) {
while($linenr!=$key) {
$content[$linenr]="\n";
$linenr++;
}
}
}

$tekst = "";
// spisujemy tekst do 1 zmiennej i dodajemy \n tam gdzie nie ma
for($linenr=0; array_key_exists($linenr, $content); $linenr++) {
if(substr($content[$linenr], strlen($content[$linenr]) - 1, 1) != "\n") $content[$linenr] .= "\n";
$tekst .= $content[$linenr];
}
fwrite($handle,$tekst);
fclose($handle);
?>[/php]
Moznaby polaczyc te 2 petle, zeby to przyzwoicie wygladalo - zostawiam to waszej inwencji.

PS - wywali sie, jesli dodasz jakis klucz tekstowy, albo ujemny przez warunek w 11 linijce - mozna sprawdzac czy $key to numer, czy string.

[edit] Teraz zauwazylem - jesli poda sie linie nie w tej kolejnosci, to pierwsza petla nadpisze je (np. $content[2], a potem $content[1]) - zamiast $content[$linenr]="\n" powinno byc if($content[$linenr]=="") .....

Re: [php] zapis do okreslonej lini

: ndz lip 25, 2004 10:31 pm
autor: MiChaSSs
wielkie dzięki !! chodzi !! :)