[php] zapis do okreslonej lini
[php] zapis do okreslonej lini
Cześć. Jak zapisac jakis tekst np. do 60 lini w pliku ??
Re: [php] zapis do okreslonej lini
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
nie mozna tego zrobic w jakis latwiejszy sposob ?? probowalem zrobic tak jak powiedziales ale zapisalo sie tylko "Array"
-
Wojciech Kocjan
- Zaczyna działać

- Posty: 427
- Rejestracja: sob gru 14, 2002 10:51 am
Re: [php] zapis do okreslonej lini
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]
[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
a nie powinno być wcześniej: $content=join($content);
Re: [php] zapis do okreslonej lini
robilem tak jak Ty Wojtek ale niestety zapisuje sie "Array" 
-
Grzegorz Winiarski
- Nowy

- Posty: 147
- Rejestracja: pt lut 27, 2004 10:36 pm
- Lokalizacja: Kraków
Re: [php] zapis do okreslonej lini
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.
[php]<?php
foreach($content as $c) {
fwrite($handle, $c.'\n');
}
?>[/php]
templar_of_steel: nie powinno być join() bo chcemy miec kazda linijke osobno.
-
Wojciech Kocjan
- Zaczyna działać

- Posty: 427
- Rejestracja: sob gru 14, 2002 10:51 am
Re: [php] zapis do okreslonej lini
Templar ma racje, brakuje tutaj join(), zrob cos takiego:MiChaSSs pisze:robilem tak jak Ty Wojtek ale niestety zapisuje sie "Array" :(
[php]<?php
fwrite($handle,trim(implode("\n",$content)));
?>[/php]
Re: [php] zapis do okreslonej lini
niestety, i kod Grzegorza i Wojtka zapisują "Nową linie 60" w lini 1 ;(
Re: [php] zapis do okreslonej lini
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:
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]=="") .....
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" }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
wielkie dzięki !! chodzi !! 