Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] odczyt z pliku csv
Forum PHP.pl > Forum > PHP
Lejto
Mam przykładowy plik csv
Kod

auction    2525    standard    tytuł przedmiotu    kolor
store    317    dutch

skopiowane z exela więc nie ma przecinków.
Chcę plik odczytać przez php i wyświetlić np tylko wartość kolor itp.
Mam taki kod
  1. <?php
  2. $row = 1;
  3. $uchwyt = fopen ("file.csv","r");
  4. while (($data = fgetcsv($uchwyt, 1000, ",")) !== FALSE)  {
  5.    $num = count($data);
  6.     $row++;
  7.    for ($c=0; $c < $num; $c++) {
  8.    echo $data[2] . "<br />\n";
  9.    }
  10. }
  11. fclose ($uchwyt);
  12. ?>

ale nie wyświetla mi tak ;/

Pozdrawiam
okitoki
Kod
$row = 1;
$uchwyt = fopen ("file.csv","r");
while (($data = fgetcsv($uchwyt, 1000, ",")) !== FALSE)  { /* złe parametry dla twojego pliku cvs, u ciebie separatorem jest tabulator a nie przecinek */
    $num = count($data);
     $row++;
    for ($c=0; $c < $num; $c++) {
    echo $data[2] . "<br />\n"; /* dlaczego wyświtlasz pole 2 a nie zmienną $c*/
    }
}
fclose ($uchwyt);


poczytaj o parametrach funkcji fgetcvs
Lejto
no ok ale jak wyświetlę przez $c
  1. <?php
  2. $row = 1;
  3. $uchwyt = fopen ("file.csv","r");
  4.  
  5.    while (($data = fgetcsv($uchwyt, 1000, ",")) !== FALSE)
  6.    {
  7.        $num = count($data);
  8.         $row;
  9.        
  10.        for ($c=0; $c < $num; $c++)
  11.        {
  12.            echo $data[$c] . "<br />\n";
  13.        }
  14.    }
  15. ?>

to mi też cały plik wyświetli, a ja chce tylko 1 wartość
ps zmieniłem ogranicznik z , na ; ale i tak wyświetla listę długą zamiast 1 wyrazu
porady-it.pl
Jeśli chcesz wyświetlić tylko określone pole to wyrzuć pętlę wyświetlającą wszystkie kolumny

  1. <?php
  2. for ($c=0; $c < $num; $c++)
  3.       {
  4.           echo $data[$c] . "<br />\n";
  5.       }
  6. ?>


A podaj tylko numer kolumny który Cię interesuje np.

  1. <?php
  2.  
  3. $uchwyt = fopen ("file.csv","r");
  4.  
  5. while (($data = fgetcsv($uchwyt, 1000, ",")) !== FALSE){
  6.  
  7.           echo $data[1] . "<br />\n";
  8. }
  9. ?>
Darti
no i tam nie masz średnika ani przecinka tylko tabulator albo spację
Lejto
no w moim przykładzie pliku csv nie napisałem ; a teoretycznie one są zrobiłem takie coś
  1. <?php
  2. while (($data = fgetcsv($uchwyt, 1000, ";")) !== FALSE)
  3.    {
  4.        $num = count($data);
  5.         $row;
  6.        
  7.        echo $data[2]. "<br />\n";
  8.    }
  9. ?>

i działa
otrzymałem standard i dutch ale też zamiast 1 wartości to 2
teraz chce to dodać do mysql z zapytaniem sobie poradzę oczywiście smile.gif, ale jak w tablicy są przechowywane 2 wartości to jak je dodam kolejno (najpierw 1 potem 2), pęta?
phpion
Cytat(Lejto @ 29.04.2009, 15:02:18 ) *
teraz chce to dodać do mysql z zapytaniem sobie poradzę oczywiście smile.gif, ale jak w tablicy są przechowywane 2 wartości to jak je dodam kolejno (najpierw 1 potem 2), pęta?

Jeśli chcesz przenieść zawartość pliku CSV do MySQL to zabierasz się do tego od d**y strony. Poczytaj lepiej o LOAD DATA. Natomiast jeśli koniecznie chcesz to zrobić w PHP to tak, możesz to zrobić pętlą.
Lejto
właśnie już użyłem pętli, nie znam tak dobrze angielskiego jeszcze więc nie rozumiem wyjaśnienia LOAD DATA, mógłbyś to streścić?
phpion
Cytat(Lejto @ 29.04.2009, 16:18:47 ) *
mógłbyś to streścić?

Chyba sobie jaja robisz
okitoki
przede wszystkim zmień separator w cvs by plik wyglądał następująco
Kod
"dane1", "dane2", "dane3", "dane4"
"dane5", "dane6"

jak tak będzie wyglądał cvs to funkcja fgetcvs będzie mogła wyglądać następująco
Kod
fgetcsv($uchwyt, 1000)


domyślnie separator to , a ogranicznik tekstu to "
Lejto
ja mam separator ;
Kod
list_in;category_id1;auction_type;name;additional_rows_titles;
okitoki
to zrób fgetcsv($uchwyt, 1000,";" ,"")
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.