Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> modyfikacja linijki w pliku
Ma4el
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 7.06.2002

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) lub znacie jakis inny sposob na modyfikowanie danej linijki ?
Go to the top of the page
+Quote Post
Ma4el
post
Post #2





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 7.06.2002

Ostrzeżenie: (0%)
-----


nikt mi nie pomoze ;( (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
zombie
post
Post #3





Grupa: Zarejestrowani
Postów: 296
Pomógł: 0
Dołączył: 9.05.2002
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
Ma4el
post
Post #4





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 7.06.2002

Ostrzeżenie: (0%)
-----


zle zapytalem...chodzi mi o zmiane jakiegos pola w danej linijce ktore jest oddzielone ||, sprawdz moj skrypt i powiedz czy ci dziala
Go to the top of the page
+Quote Post
zombie
post
Post #5





Grupa: Zarejestrowani
Postów: 296
Pomógł: 0
Dołączył: 9.05.2002
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
castor
post
Post #6





Grupa: Zarejestrowani
Postów: 456
Pomógł: 0
Dołączył: --

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/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:
Go to the top of the page
+Quote Post
Ma4el
post
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 7.06.2002

Ostrzeżenie: (0%)
-----


thx man !! dziala ok
Go to the top of the page
+Quote Post
RaZor
post
Post #8





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 16.10.2002
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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");
Go to the top of the page
+Quote Post
zombie
post
Post #9





Grupa: Zarejestrowani
Postów: 296
Pomógł: 0
Dołączył: 9.05.2002
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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! (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
castor
post
Post #10





Grupa: Zarejestrowani
Postów: 456
Pomógł: 0
Dołączył: --

Ostrzeżenie: (0%)
-----


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:
Go to the top of the page
+Quote Post
RaZor
post
Post #11





Grupa: Zarejestrowani
Postów: 26
Pomógł: 0
Dołączył: 16.10.2002
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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"
Go to the top of the page
+Quote Post
castor
post
Post #12





Grupa: Zarejestrowani
Postów: 456
Pomógł: 0
Dołączył: --

Ostrzeżenie: (0%)
-----


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:
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.12.2025 - 20:40