Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] odczyt z pliku csv, wartość
Lejto
post
Post #1





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 48
Dołączył: 23.05.2007

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


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

Ten post edytował Lejto 28.04.2009, 21:25:03
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
okitoki
post
Post #2





Grupa: Zarejestrowani
Postów: 214
Pomógł: 18
Dołączył: 25.04.2009

Ostrzeżenie: (20%)
X----


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
Go to the top of the page
+Quote Post
Lejto
post
Post #3





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 48
Dołączył: 23.05.2007

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


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

Ten post edytował Lejto 29.04.2009, 07:19:57
Go to the top of the page
+Quote Post
porady-it.pl
post
Post #4





Grupa: Zarejestrowani
Postów: 89
Pomógł: 20
Dołączył: 13.05.2007
Skąd: Warszawa

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


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





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


no i tam nie masz średnika ani przecinka tylko tabulator albo spację
Go to the top of the page
+Quote Post
Lejto
post
Post #6





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 48
Dołączył: 23.05.2007

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


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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) , ale jak w tablicy są przechowywane 2 wartości to jak je dodam kolejno (najpierw 1 potem 2), pęta?
Go to the top of the page
+Quote Post
phpion
post
Post #7





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(Lejto @ 29.04.2009, 15:02:18 ) *
teraz chce to dodać do mysql z zapytaniem sobie poradzę oczywiście (IMG:http://forum.php.pl/style_emoticons/default/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ą.
Go to the top of the page
+Quote Post
Lejto
post
Post #8





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 48
Dołączył: 23.05.2007

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


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ć?
Go to the top of the page
+Quote Post
phpion
post
Post #9





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(Lejto @ 29.04.2009, 16:18:47 ) *
mógłbyś to streścić?

Chyba sobie jaja robisz
Go to the top of the page
+Quote Post
okitoki
post
Post #10





Grupa: Zarejestrowani
Postów: 214
Pomógł: 18
Dołączył: 25.04.2009

Ostrzeżenie: (20%)
X----


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





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 48
Dołączył: 23.05.2007

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


ja mam separator ;
Kod
list_in;category_id1;auction_type;name;additional_rows_titles;
Go to the top of the page
+Quote Post
okitoki
post
Post #12





Grupa: Zarejestrowani
Postów: 214
Pomógł: 18
Dołączył: 25.04.2009

Ostrzeżenie: (20%)
X----


to zrób fgetcsv($uchwyt, 1000,";" ,"")
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 - 13:03