Autor Zpráva
krteczek
Profil *
mám konkrétní problém:
Ze souboru načtu obsah do proměnne, převedu ji na pole podle oddělovníku pomocí explode(), to umím a potrebuji v tom poli smazat určitý řádek, ale nevím jak, navíc potrebuji to pole zpátky uložit do toho souboru(přepsat puvodní data)
mohli byste mi pls poradit?
krteczek
centi
Profil
<?php

$riadok = 5;
$data_new = "";

$data = file("subor.txt");
for($i=0;$i<count($data);$i++)
{
if ($i!=$riadok-1)
{
$data_new.=$data[$i];
}
}

$fp = fopen("subor.txt","w");
fputs($fp, $data_new);
fclose($fp);

?>

Snad som sa nikde nekopol...
krteczek
Profil *
Díky,jestli sem to správně pochopil, tak stačí jen:

$riadok = 5;
$data_new = "";

$data = file("subor.txt");
$datavpoli=explode(";",$data);
$datavpoli[$riadok]=$data_new;
$datadosouboru=implode($datavpoli);

$fp = fopen("subor.txt","w");
fputs($fp, $datadosouboru);
fclose($fp);


je to tak správně???
krteczek
centi
Profil
Explode je tam zbytocne, pretoze $data = file("subor.txt"); nacita subor do pola. Kazda polozka toho pola reprezentuje jeden riadok.

Ja by som to vsak robil inak (tak ako som napisal). V tom priklade nacitam subor do pola $data, jeho polozkami pomocou FOR prejdem a kazdu polozku (okrem tej ktoru nechcem - $riadok) pripisem do premennej $data_new. Ta bude na konci obsahovat cely subor okrem nechceneho riadku.
krteczek
Profil *
centi : musím načítat přes explode, protože nemůžu zajistit že 1 řadek v souboru se = 1 položka,proto mám položky oddelené stredníkem a načítám přes explode.
ale zbytek máš líp vyřešené, takže to použiji :o) Děkuji
nebo jsem něco pochopil špatně a i pres file() jsem schopen načíst data podle oddělovníku?
centi
Profil
Tak potom file() nemozno pouzit, pretoze ten rozdeluje riadky podla znaku konca riadku.

Nacitaj teda subor pomocou fget() do $data a potom pomocou toho explode() rozdel do riadkov. Zbytok uz mozes pomocou for() spracovat ako som pisal.
Leo
Profil
Zkuste se podivat na zoubek databazim, tam jsou takovehle veci uplna malina, soubor je jen pro nouzi nejvyssi, Leo
krteczek
Profil *
To Leo:
no jde o to že dělám relativně jednoduchou knihu, kde se učím jak zpracovat data, jak je změnit, a jde mi o to NEPOUŽÍT Databázi právě kvůli použití lidmi, kteří databázi nemohou, neummí, nebo nechtějí použít.ted řeším administraci boardu, to znamená úpravu a mazání příspěvků, k tomu jsem potřeboval to odmazání řádku.

To centi:
Díky moc za pomoc a vysvětlení postupu, to s otevřením a zavřením souboru mám vyřešeno pres file_open , fread a fwrite...
krteczek
Profil *
No tak se mi to nějak nedaří :(((
když se to uloží, tak se mi uloží prázdný soubor :(


$soubor=fopen(Nazev_Souboru_S_Prispevky, "r");
//načte obsah souboru do proměnne $ze_souboru
$ze_souboru=fget($soubor, filesize(Nazev_Souboru_S_Prispevky));
//uzavrení souboru
fclose($soubor);
//proměnnou $ze_souboru rozdelí podle oddelovníku na polozky pole $prispevky
$prispevky=(explode(";",$ze_souboru));
//odstranění prispevku

echo "mazu radek".$radek."<br/>"."obsah: "."<br/>".$prispevky[$radek]."<br/>";
$nove_data="";
//tenhle skriptík načte obsah $prispevky do $nove_data s vynecháním řádku který nechceme
for ($i=0;$i<count($prispevky);$i++)
{
if ($i!=$radek)
{
$nove_data=$prispevky[$i];
}
}

$prispevky="";
$soubor=fopen(Nazev_Souboru_S_Prispevky, "w");
$prispevky=$nove_data;
fwrite($soubor, $prispevky);
fclose($soubor);

co mám špatně???
díky krteczek
krteczek
Profil *
jé sorry tohle ani nejede kvuli tomu get...


//soubor existuje, pokus o otevrení souboru ke čtení z něj
$soubor=fopen(Nazev_Souboru_S_Prispevky, "r+");
//načte obsah souboru do proměnne $ze_souboru
$ze_souboru=fread($soubor, filesize(Nazev_Souboru_S_Prispevky));
//uzavrení souboru
fclose($soubor);
//proměnnou $ze_souboru rozdelí podle oddelovníku na polozky pole $prispevky
$prispevky=(explode(";",$ze_souboru));
//odstranění prispevku

echo "mazu radek".$radek."<br/>"."obsah: "."<br/>".$prispevky[$radek]."<br/>";
$nove_data="";
//tenhle skriptík načte obsah $prispevky do $nove_data s vynecháním řádku který nechceme
for ($i=0;$i<count($prispevky);$i++)
{
if ($i!=$radek)
{
$nove_data=$prispevky[$i];
}
}

$prispevky="";
$soubor=fopen(Nazev_Souboru_S_Prispevky, "w");

fwrite($soubor, $nove_data);
fclose($soubor);

tohle jede, ale uloží prázdný soubor
už mne napadlo ro prohnat pres smyčku a uložit postupne každy ředek z pole, ale to taky nevím jestki je to pravé ořechové...
centi
Profil
1. if ($i!=$radek) - pozor, $i zacina od nuly, mozno nebude sediet s cislom nechceneho riadku

2. $nove_data=$prispevky[$i]; - toto vzdy ulozi do premennej $nove_data premennu $prispevky[$i], ta sa vsak kazdym krokom (for) meni, takze nakoniec sa ulozi len posledna hodnota (a ta je mozno prazdna, prazdny riadok na konci). Ty vsak chces riadky PRIDAVAT, preto:

$nove_data.=$prispevky[$i]; //bodka pred = znamena pridavanie (nabalovanie)
krteczek
Profil *
aha.... díííkes já myslel že ta tečka je tam omylem...to by mne nenapadlo děkuji MOC
takže v podstatě ten výraz znamená tohle :$nove_data=$nove_data.$prispevky[$i]
mne ani tohle hned nenapadlo... až jak jsi mi to vysvětlil tady jsem si vspomnel že když přidávám do knihy záznam,tak musím načíst to co uz je v knize a k tomu to pričíst... ted vidím že jsem to mnel špatně... nísto pridat jsem daval prepsat :o(((
jdu testovat
díky krteczek
krteczek
Profil *
Jejda ještě jeden dotaz... pri explode mi to začíná načítat od 0 a ja bych to potreboval od jedna.ted to mám proste jeste jeden skriptík ktery mi to přenačte až od 1ale to není to prave... notmálně jde použít =>1 ale u explode mi to vyhazovalo chybu...
buď to nejde, nebo jsem měl špatný zápis :(
krteczek
Toto téma je uzamčeno. Odpověď nelze zaslat.