Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: modyfikacja linijki w pliku
Forum PHP.pl > Forum > PHP
Ma4el
problem taki:
w pliku dane sa tak zapisywane:
nr||nazwa||rodzaj||ile||autor||nr2

i zrobilem skrypt do modyfikacji tego wpisu , teorytycznie wg. mnie jest dobry tylko cos nie dziala o to skrypt:
<?
$dane="$id||$nazwa||$rodzaj||$cd||$autor||2||n";
$dfile="gry/gry.db";
}
$file = file($dfile);
$total = count($file);
for($i=0; $total > $i; $i++){
$split = explode("||", $file[$i]);
if($split[0] == "$id"){
$przed = "$split[0]||$split[1]||$split[2]||$split[3]||$split[4]||$split[5]||n";
$po = "$dane";
$fp = fopen($dfile, "r");
flock($fp,1);
$zaw = fread($fp, filesize($dfile));
fclose($fp);
$po = str_replace("$przed","$po", $zaw);
$fp = fopen($dfile, "w");
flock($fp,2);
fwrite($fp, $po);
fclose($fp);
echo"<center>Zmiany zostały zapisane";
}

?>
moze wiecie jak mi pomoc winksmiley.jpg lub znacie jakis inny sposob na modyfikowanie danej linijki ?
Ma4el
nikt mi nie pomoze ;( questionmark.gif
zombie
CZ! Najprosciej bedzie zrobic kazda linijke w osobnym pliku, ale skoro sie upierasz...

Kod
//linia danych: $id | $nazwa | $costam1 | $costam2 |



$plik = fopen("dane.db", "r");

$nr=0;

while (!feof($plik))

{

$linia[$nr] = fgets($plik, 4096);

$nr++;

}



fclose($plik);



// teraz cały plik mamy w tablicach. zmieniamy wpis o $id = 014



for ($i=0; $i<=$nr: $i++)

{

if($linia[$i]{0}.$linia[$i]{1}.$linia[$i]{2} == "014"){$ch_ln=$i;}

}



// znaleźliśmy linię, którą chcemy zmienić



$tab = explode(" | ", $linia[$ch_ln]);

$linia[$ch_ln]= $tab[0]." | ".$tab[1]." | "."dupa | ".$tab[3]." | ";



// nie znam innej metody czyszczenia pliku:



$plik = fopen("dane.db", "w");

fclose($plik);



// zapisujemy zmieniona tablice



$plik = fopen("dane.db", "a");

for ($i=0; $i<=$nr: $i++)

{

fputs($plik, $linia[$i]."n");

}

fclose($plik);


Chyba nic nie popieprzylem?questionmark.gif
Ma4el
zle zapytalem...chodzi mi o zmiane jakiegos pola w danej linijce ktore jest oddzielone ||, sprawdz moj skrypt i powiedz czy ci dziala
zombie
Cytat
zle zapytalem...chodzi mi o zmiane jakiegos pola w danej linijce ktore jest oddzielone ||, sprawdz moj skrypt i powiedz czy ci dziala


Totez napisalem Ci jak ja zmodyfikowac... tyle, ze w moim skrypcie komorki, czy tez wg Ciebie 'pola' sa oddzielona " | ", zamiast tego daj "||" i bedzie po Twojemu.

Twój skrypt u mnie tez nie dziala, ale nie bede wnikal dlaczego.
castor
Cytat
problem taki:  
w pliku dane sa tak zapisywane:  
nr||nazwa||rodzaj||ile||autor||nr2  

i zrobilem skrypt do modyfikacji tego wpisu , teorytycznie wg. mnie jest dobry tylko cos nie dziala o to skrypt:  
<?  
$dane="$id||$nazwa||$rodzaj||$cd||$autor||2||n";  

te wszystkie zmienne zakladam ze masz gdzies zadeklarowane?
Cytat
$dfile="gry/gry.db";  
}  

po co ta klamra?
Cytat
$file = file($dfile);  
$total = count($file);  
for($i=0; $total > $i; $i++){  
$split = explode("||", $file[$i]);  
if($split[0] == "$id"){  
$przed = "$split[0]||$split[1]||$split[2]||$split[3]||$split[4]||$split[5]||n";

jak sie juz uparles tak to dlaczego nie
$przed=$file[$i]
Cytat
 
$po = "$dane";  
$fp = fopen($dfile, "r");  
flock($fp,1);  
$zaw = fread($fp, filesize($dfile));  
fclose($fp);  
$po = str_replace("$przed","$po", $zaw);  
$fp = fopen($dfile, "w");  
flock($fp,2);  
fwrite($fp, $po);  
fclose($fp);  
echo"<center>Zmiany zostały zapisane";  
}  

brakuje zamkniecia klamra petli for()
Cytat
?>  
moze wiecie jak mi pomoc winksmiley.jpg lub znacie jakis inny sposob na modyfikowanie danej linijki ?


strasznie dziwnie do tego podchodzisz 8O

np:

Kod
<?

$idLiniDoZmiany=13;

$daneDoZmiany="13||autor||tytul||cd||cosTamPoZmianien";

$plik='plik.db';

$f=file($plik);

for($i=0;$i<count($f);$i++){

     $ex=explode('||',$f[$i]);

     if($ex[0]==$idLiniDoZmiany){

             $f[$i]=$daneDoZmiany;

             break;

     }

}



$fp=fopen($plik,"w");

fwrite($fp,implode('',$f));

fclose($fp);       

?>
jedna z mozliwosci

:wink:
Ma4el
thx man !! dziala ok
RaZor
Naprawde ciekawe.
Cytat
Kod
$plik = fopen("dane.db", "r");

$nr=0;

while (!feof($plik))

{

$linia[$nr] = fgets($plik, 4096);

$nr++;

}



fclose($plik);



// teraz cały plik mamy w tablicach.

Ale chyba cały urok php polega na tym, że "wszystko" zoastało już napisane, sam język posiada duuuuuuużo funkcji a my musimy nauczyć się ich szukać i używać. Więc czy nie prościej będzie:
Kod
$tablica=file("dane.db");
zombie
Cytat
Naprawde ciekawe.
Cytat
Kod
$plik = fopen("dane.db", "r");

$nr=0;

while (!feof($plik))

{

$linia[$nr] = fgets($plik, 4096);

$nr++;

}



fclose($plik);



// teraz cały plik mamy w tablicach.

Ale chyba cały urok php polega na tym, że "wszystko" zoastało już napisane, sam język posiada duuuuuuużo funkcji a my musimy nauczyć się ich szukać i używać. Więc czy nie prościej będzie:
Kod
$tablica=file("dane.db");


Masz racje. Z braku czasu staram sie wykorzystywac znane mi funkcje. Po prostu jak znajde cos, co dziala, nie szukam dalej, ale na dluzsza mete, to oczywiscie blad. Dzieki za lekcje! biggrin.gif
castor
Cytat
Naprawde ciekawe.
Cytat
Kod
$plik = fopen("dane.db", "r");

$nr=0;

while (!feof($plik))

{

$linia[$nr] = fgets($plik, 4096);

$nr++;

}



fclose($plik);



// teraz cały plik mamy w tablicach.

Ale chyba cały urok php polega na tym, że "wszystko" zoastało już napisane, sam język posiada duuuuuuużo funkcji a my musimy nauczyć się ich szukać i używać. Więc czy nie prościej będzie:
Kod
$tablica=file("dane.db");


spoko...
...tylko ze file() przy B.DUZYCH plikach sie czasami wychrzania a zczytywanie po lini pliku nie :wink:
RaZor
Cytat
spoko...
...tylko ze file() przy B.DUZYCH plikach sie czasami wychrzania a zczytywanie po lini pliku nie :wink:

Tak, a co gdy :
- w pliku mamy jedną B. DUŻĄ linijkę
- linijki są bardzo małe a my marnujemy pamięć (4096)

Jak wiadomo niema idealnych rozwiązań a wszystko zależy od problemu.

"Punkt widzenia zależy od punktu siedzenia", "wszystko jest względne"
castor
Cytat
Tak, a co gdy :  
- w pliku mamy jedną B. DUŻĄ linijkę
- linijki są bardzo małe a my marnujemy pamięć (4096)

to tylko bufer...a jak zajgladales w zrodla php to wiesz jak pracuje file() :wink:

Cytat
Jak wiadomo niema idealnych rozwiązań a wszystko zależy od problemu.
"Punkt widzenia zależy od punktu siedzenia", "wszystko jest względne"

madre slowa :!:

a jak widziales wyzej tez uzylem file() bo jest wygodniej a dodalem to tylko tak co by sie czleczki czasami nie dziwili gdy skrpty sie wychrzani uzywajac file()
:wink:
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.