Nacteni obsahu jednotlivych csv do pole a jejich export – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Nacteni obsahu jednotlivych csv do pole a jejich export – PHP – Fórum – Programujte.comNacteni obsahu jednotlivych csv do pole a jejich export – PHP – Fórum – Programujte.com

 

JiriVavru0
Návštěvník
10. 11. 2008   #1
-
0
-

Zdravím

Měl bych jeden dotaz.
Ukládám si data z formu do CSV, mohu zobrazit i jednotlive soubory ve adresari a otevrit je.
Nyni bych ale potreboval, nacist hodnoty z kazdeho csv (konkrétně z druhého řádku) a ty ukládat do pole.
Jakmile by cyklus došel na konec souboru, každou jednotlivou položku pole vypsat jako nový řádek do noveho csv souboru, který by sloužil jako export.

Tuší někdo, kde bych o tom naleznul nějaké povídání nebo radu?

Děkuji za každou radu...


POZN:
Soubory jsou malé, měl jsem ale zato, že by mělo být možné načíst přímo a jenom druhý řádek a ten uložit jako hodnotu pole (tj. např ze 40 souborů, 40 druhých řádků==>39 indexů v poli) a tyto indexy pak vypsat jako jednotlive radky do noveho souboru.
(jelikož už jsou hodnoty rozděleny středníky při načtení do pole namusím je tak dále rozdělovat)..takže co jedna hodnota pole, to jeden nový řádek výpisu.

Bylo by to možné takto?

Vzpoměl jsem si, že k přečtení určitého řádku slouží fce fgets ale netuším, jak ji ve výsledku použít..

Nahlásit jako SPAM
IP: 89.24.4.–
KIIV
~ Moderátor
+43
God of flame
10. 11. 2008   #2
-
0
-

no na nacteni radku z csv staci pouzit fgetcsv
na zjisteni souboru v adresari je zase readdir a projet jen ty ktery konci .csv

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
JiriVavru0
Návštěvník
10. 11. 2008   #3
-
0
-

To KIIV : A jak nastavit pomocí fgetcsv například, že chci číst jen druhý řádek?
Bylo mi tvrzeno, že to u teto fce není možné..

Nahlásit jako SPAM
IP: 89.24.4.–
KIIV
~ Moderátor
+43
God of flame
10. 11. 2008   #4
-
0
-

To JiriVavru : slouzi pro nacteni jednoho radku...
takze predpokladam neco jako:

$fi = fopen('soubor.csv','r');

fgetscsv($fi); // prvni radek nactu ale nepotrebuju takze nikam neulozim
$pole[] = fgetscsv($fi); // druhy radek - ten chces tak ulozit do nejakyho pole
fclose($fi);

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
JiriVavru0
Návštěvník
10. 11. 2008   #5
-
0
-

Pravda pravdoucí, opravdu načítá jen řádek, ale když volám samostatnou funkci , háže to fatal error, volání nedefinované fce?
Mám ji tedy přiřadit pod proměnnou?

<?php


$fi = fopen('data.csv','r');

fgetscsv($fi,1000," "); // prvni radek nactu ale nepotrebuju takze nikam neulozim

$pole[] = fgetscsv($fi,1000," "); // druhy radek - ten chces tak ulozit do nejakyho pole

print_r($pole);
fclose($fi);

?>

Nahlásit jako SPAM
IP: 89.24.4.–
KIIV
~ Moderátor
+43
God of flame
10. 11. 2008   #6
-
0
-

To JiriVavru : sorry sem se upsal ... je to jen fgetcsv

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
JiriVavru0
Návštěvník
11. 11. 2008   #7
-
0
-

Děkuji za upozornění, když načítám ze stejného místa, jako je skript, funguje to.
Pokud ovšem načítám z jiné složky, kde je více csv souborů, které procházím
vyhazuje mi to u všech následující error:

Warning: fgetcsv() expects parameter 1 to be resource, boolean given in on line 10

Warning: fopen(..) [function.fopen]: failed to open stream: Permission denied in

Warning: fopen(2008-11-08_20.36.28.csv) [function.fopen]: failed to open stream: No such file or directory in

Nemůže to být způsobeno nastavením přístupu při vytváření souboru?

Kod vypada takto:

<?php

$path = "documents/"; //Assign variable file to CSV documnets
//$export = "export/"; //Assign variable file to EXPORT CSV documnets
$pole = Array(); //Define Array

$file = opendir($path); //Assign variable file to CSV documnets, return descriptor
while ($jmenosouboru = readdir($file)) {
$fi = fopen($jmenosouboru, "r"); //Open file for reading
fgetcsv($fi, 1000, " "); // first row i dont need
$pole = fgetcsv($fi, 1000, " "); // Second row ==> putt into Array
}
$export = fopen("export.csv", "a+"); //Definition for fileopen if file not exist, create new
foreach ($pole as $my_os) {
fwrite($export, "$my_os\r\n");
}
fclose($fi);
fclose($export);

?>

Nahlásit jako SPAM
IP: 89.24.4.–
KIIV
~ Moderátor
+43
God of flame
11. 11. 2008   #8
-
0
-

no neni dobry nechavat ty soubory jeste otevreny... zavirej je hned jak nactes ten druhej radek

pak musis osetrit ze to je *.csv protoze read dir vraci jeste . jako aktualni a .. jako nadrazenej adresar

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
JiriVavru0
Návštěvník
11. 11. 2008   #9
-
0
-

Nadrazeny a ktualni adresar jsem vyresil, ale neni mi moc jasne, kdy bych mel spravne ten handle k souboru uzavrit?
Tusi nekdo?



<?php
$path = "documents/"; //Assign variable file to CSV documnets
//$export = "export/"; //Assign variable file to EXPORT CSV documnets
$pole = array(); //Define Array

$file = opendir($path); //Assign variable file to CSV documnets, return descriptor
while ($jmenosouboru = readdir($file)) {
$fi = fopen($jmenosouboru, "r+"); //Open file for reading
fgetcsv($fi, 1000, " "); // first row i dont need
$pole = fgetcsv($fi, 1000, " "); // Second row ==> putt into Array

if ($file != "." && $file != "..") {
echo "$file\n";
}

}

$export = fopen("export.csv", "a+"); //Definition for fileopen if file not exist, create new
foreach ($pole as $my_os) {
fwrite($export, "$my_os\r\n");
}
fclose($file);
fclose($export);

?>

Nahlásit jako SPAM
IP: 89.24.4.–
DragonBehemont0
Super člen
11. 11. 2008   #10
-
0
-

To JiriVavru : V tom zdrojáku je několik chyb, teda aspoň, co jsem našel já osobně.

1) chybí Ti tam uzavírání jednotlivých souborů
2) kontroluješ $file, zda není "." či "..", i když těchto hodnot nemůže nikdy dosáhnout, protože je to ukazatel
3) místo složky uzavíráš soubor
3) chybí Ti tam, že načtené data ukládáš do pole
4) nekontroluješ ani otevření složky, ani otevření souboru

Osobně bych tento zdroják napsal asi následovně (pokud jsem něco opomenul, tak to prosím ostatní opravte):

<?php

$path = "documents/"; //Assign variable file to CSV documnets
//$export = "export/"; //Assign variable file to EXPORT CSV documnets
$pole = array(); //Define Array

if($file = opendir($path)) { //Assign variable file to CSV documnets, return descriptor
while ($jmenosouboru = readdir($file)) {
if ($jmenosouboru != "." && $jmenosouboru != ".." && is_file($path."/".$jmenosouboru)) {
if($fi = fopen($jmenosouboru, "r+")) { //Open file for reading
fgetcsv($fi, 1000, " "); // first row i dont need
$pole[] = fgetcsv($fi, 1000, " "); // Second row ==> putt into Array
echo "$jmenosouboru\n";
fclose($fi);
}
}

}
closedir($file);

if($export = fopen("export.csv", "a+")) { //Definition for fileopen if file not exist, create new
foreach ($pole as $my_os) {
fwrite($export, "$my_os\r\n");
}
fclose($export);
}
} else {
echo "Během otevření složky došlo k chybě!\n";
}
?>

Nahlásit jako SPAM
IP: 212.77.163.–
Nemusíte vědět vše, stačí jen, když víte, kde to najít, a jak to použít. Naučíte se to právě tím používáním ;-)
JiriVavru0
Návštěvník
11. 11. 2008   #11
-
0
-

Tak jsem zjistil, že jsem měl chybu v definici cety k načteným csv, myslel jsem, že cestu vrátí deskripor u opendir, ale ne.
Tak jsem to upravil, fuguje to ale...
Problém bude asi v poli, jelikož do exportu se zaznamená pouze jeden řádek..nevím ale, kdy by mohla býti chyba...

Tušil by někdo prosím?

S databází by jseem toto nezažil:)

Nahlásit jako SPAM
IP: 89.24.4.–
KIIV
~ Moderátor
+43
God of flame
11. 11. 2008   #12
-
0
-

To JiriVavru : si ten soubor vypis... print_r($pole); vypise vse co v tom poli je

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
DragonBehemont0
Super člen
11. 11. 2008   #13
-
0
-

To KIIV : Jestli používá ten zdroják, který zde uvedl, tak mu stejně žádné pole nevypíše, protože ukládá řádek do proměnné:



$pole = fgetcsv($fi, 1000, " "); // Second row ==> putt into Array

Čímž změní pole na proměnnou. Proto mu to vypisuje jen jeden řádek.

Nahlásit jako SPAM
IP: 213.194.252.–
Nemusíte vědět vše, stačí jen, když víte, kde to najít, a jak to použít. Naučíte se to právě tím používáním ;-)
KIIV
~ Moderátor
+43
God of flame
11. 11. 2008   #14
-
0
-

To DragonBehemont : heh sem se na to koukal ze tam ma $pole[] a on to je tvuj zdrojak :smile5: no to je pak jasny proc mu to vypise jeden radek :)))

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
DragonBehemont0
Super člen
11. 11. 2008   #15
-
0
-

To KIIV : heh, to je tím pozdním časem :smile6:

Nahlásit jako SPAM
IP: 213.194.252.–
Nemusíte vědět vše, stačí jen, když víte, kde to najít, a jak to použít. Naučíte se to právě tím používáním ;-)
JiriVavru
~ Anonymní uživatel
87 příspěvků
11. 11. 2008   #16
-
0
-

Takže co tam mám špatně?
Když zapíši
$pole[] = fgetcsv($fi, 1000, " "); // Second row ==> putt into Array
a dám fcí print_r($pole);
Vypíše se mi pole správně(rsp. správné hodnoty).
Když ale zapíši do souboru vypíše se mi vždy jenom slovo array, tolirát, kolik je souborů k procházení..

Nahlásit jako SPAM
IP: 89.24.4.–
KIIV
~ Moderátor
+43
God of flame
11. 11. 2008   #17
-
0
-

To JiriVavru : protoze tam mas pole ale v tom poli je kazdej radek reprezentovan jako dalsi pole...

bud pouzijes nejaky fputcsv
nebo musis vyuzit funkci jako implode ci alias join

Nahlásit jako SPAM
IP: 80.250.27.–
Program vždy dělá to co naprogramujete, ne to co chcete...
DragonBehemont0
Super člen
12. 11. 2008   #18
-
0
-

To KIIV : takže to pole vypadá třeba následovně?



pole=array (array(1, 2, 3, 4), array(5,6,7,8),array(10,11,12,13));

Nahlásit jako SPAM
IP: 213.194.252.–
Nemusíte vědět vše, stačí jen, když víte, kde to najít, a jak to použít. Naučíte se to právě tím používáním ;-)
DragonBehemont0
Super člen
12. 11. 2008   #19
-
0
-

To JiriVavru : Tady je upravený zdroják, ten by měl už vypsat celé řádky.



<?php
$path = "documents/"; //Assign variable file to CSV documnets
//$export = "export/"; //Assign variable file to EXPORT CSV documnets
$pole = array(); //Define Array

if($file = opendir($path)) { //Assign variable file to CSV documnets, return descriptor
while ($jmenosouboru = readdir($file)) {
if ($jmenosouboru != "." && $jmenosouboru != ".." && is_file($path."/".$jmenosouboru)) {
if($fi = fopen($jmenosouboru, "r+")) { //Open file for reading
fgetcsv($fi, 1000, " "); // first row i dont need
$pole[] = fgetcsv($fi, 1000, " "); // Second row ==> putt into Array
echo "$jmenosouboru\n";
fclose($fi);
}
}

}
closedir($file);

if($export = fopen("export.csv", "a+")) { //Definition for fileopen if file not exist, create new
foreach ($pole as $my_os) {
$textik=implode(",", $my_os);
fwrite($export, "$textik\r\n");
}
fclose($export);
}
} else {
echo "Během otevření složky došlo k chybě!\n";
}
?>

Nahlásit jako SPAM
IP: 212.77.163.–
Nemusíte vědět vše, stačí jen, když víte, kde to najít, a jak to použít. Naučíte se to právě tím používáním ;-)
KIIV
~ Moderátor
+43
God of flame
12. 11. 2008   #20
-
0
-

To DragonBehemont : jojo ... nacita data pomoci fgetcsv.. to nacte radek a jednotlive polozky nacte rovnou do pole... nemusis pak na to pouzivat explode resp split
ma pak pole radku a kazdy radek je pole polozek
ale ty radky by se pak daly zapisovat klidne tim fputcsv nebo jak se to menuje... to zase pole zapise jako radek csv

EDIT: kdyz nad tim premejslim tak nemusi ani nacitat pomoci ty fgetcsv .. . s tim csv nijak nepracuje tak muze rovnou nacist jen radek :smile16: a pak ten radek tak jak je ulozit

Nahlásit jako SPAM
IP: 80.188.94.–
Program vždy dělá to co naprogramujete, ne to co chcete...
DragonBehemont0
Super člen
12. 11. 2008   #21
-
0
-

To KIIV : Jj, už jsem to našel

http://us3.php.net/manual/en/function.fputcsv.php
, zajímavá funkce a tím pádem by tam ani nemusel dávat to implode.

Nahlásit jako SPAM
IP: 212.77.163.–
Nemusíte vědět vše, stačí jen, když víte, kde to najít, a jak to použít. Naučíte se to právě tím používáním ;-)
DragonBehemont0
Super člen
12. 11. 2008   #22
-
0
-

To KIIV : Otázka je, který postup bude rychlejší... jestli to nejdříve načíst do pole a nebo rovnou ukládat. Nebude mu to více zatěžovat server, když bude mít najednou otevřené dva soubory? Nevím, nikdy jsem to takhle výkonostně neporovnával.

Nahlásit jako SPAM
IP: 212.77.163.–
Nemusíte vědět vše, stačí jen, když víte, kde to najít, a jak to použít. Naučíte se to právě tím používáním ;-)
JiriVavru
~ Anonymní uživatel
87 příspěvků
12. 11. 2008   #23
-
0
-

Tak, funguje to nyní, tak jak skutečně má, bylo jen třeba upravit cestu na:

if($fi = fopen($path.$jmenosouboru, "r+")) { //Open file for reading

Děkuji vám moc za rady, jinak bych se tu s takovou drobností mořil kdovíjak dlouho.

Snad to v budoucnu pomůže i někomu dalšímu..

Ještě jednou dík..

Nahlásit jako SPAM
IP: 89.24.5.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 13 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý