Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Odczyt danych z arkusza kalkulacyjnego .csv
kirkor0
post
Post #1





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 18.04.2004

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


Mam plik arkusza kalkulacyjnego .csv, który zawiera listę kodów. Są one ułożone jedynie w kolumnie A kolejno w wierszach 1, 2, 3 itp. Jest ich łącznie 10 000. Plik zajmuje 100KB.

Wszystkie kody muszę wrzucic do bazy. Wiem, że mogę zrobic to przez textarea albo poprostu skopiowac zawartosc do txt i go uploadowac.
Kody jednak zawsze dostaję w pliku .csv i to w właśnie w takim formacie dane chcę umieszczac w serwerze.

Nie mam zielonego pojęcia jak się do tego zabrac i czy wogóle to jest możliwe. Wytłumaczcie mi jak lamerowi, jak, z czym, kiedy, po co to się je.
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
albo poprostu skopiowac zawartosc do txt i go uploadowac.

Ale przeciez csv to tak naprawe txt, tylko ciut sformatowany, wiec poco kopiowac jeden plik do drugiego? bez sensu (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Mozesz takie dane bezposrednio z mysql wrzucac:
http://dev.mysql.com/doc/refman/5.0/en/load-data.html
Go to the top of the page
+Quote Post
Balon
post
Post #3





Grupa: Zarejestrowani
Postów: 422
Pomógł: 0
Dołączył: 14.12.2005
Skąd: Wałbrzych

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


powiem Ci ze sam probowalem cos takiego napisac

  1. <?php
  2. /**
  3.  * Funkcja konwertujaca pliki csv
  4.  * z ocenami do tablicy
  5.  *
  6.  * @param string $file
  7.  * @return array
  8.  */
  9. function csv2array( $file )
  10. {
  11. $gRows = array();
  12. $rows = explode( "n", $file );
  13. $i=0;
  14.  
  15. foreach( $rows as $row )
  16. {
  17. if( !$i++ || !strlen( trim( $line = $row ) ) ) continue;
  18. $line = explode( ';', $line );
  19.  
  20. $gRows[$i-2] = array( 
  21. 'login' => array_shift( $line ), 
  22. 'nazwisko' => array_shift( $line ), 
  23. 'dane'  => array_chunk( $line, 5 ) 
  24. );
  25. }  
  26. array_shift( $gRows );
  27.  
  28. return $gRows;
  29. }
  30.  
  31. function array2query( $arr )
  32. {
  33. global $db;
  34. foreach( $arr as $ar )
  35. {
  36. #$db->GetAll( 'SELECT * FROM oceny WHERE ')
  37. $db->Execute( 'DELETE FROM oceny WHERE login = "'.$ar['login'].'"' );
  38. foreach( $ar['dane'] as $dane )
  39. {
  40. $db->Execute( 'INSERT INTO oceny SET login = "'.$ar['login'].'", cz1 = "'.$dane[0].'", cz2 = "'.$dane[1].'", cz3 = "'.$dane[2].'", calosc = "'.$dane[3].'", data = "'.$dane[4].'"' );
  41. }
  42. }
  43. return true;
  44. }
  45. ?>


W ten sposób przetwarzalem i wrzucalem do bazy takie pliki.
Kod
login;nazwisko;cz1;cz2;cz3;calosc;data;cz1;cz2;cz3;calosc;data;cz1;cz2;cz3;calos
c;data;cz1;cz2;cz3;calosc;data;cz1;cz2;cz3;calosc;data;cz1;cz2;cz3;calosc;data;cz
1;cz2;cz3;calosc;data;cz1;cz2;cz3;calosc;data;cz1;cz2;cz3;calosc;data;cz1;cz2;cz3
;calosc;data;cz1;cz2;cz3;calosc;data
mojlog;adamski;22;11;30;63;12-05-2007;22;11;30;63;14-07-2007;22;11;30;63;12-08-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007
mojlog;adamski;22;11;30;63;12-05-2007;22;11;30;63;14-07-2007;22;11;30;63;12-08-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007
mojlog;adamski;22;11;30;63;12-05-2007;22;11;30;63;14-07-2007;22;11;30;63;12-08-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007
mojlog;adamski;22;11;30;63;12-05-2007;22;11;30;63;14-07-2007;22;11;30;63;12-08-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007;22;11;30;63;12-05-2007


Ten post edytował Balon 23.08.2006, 12:22:25
Go to the top of the page
+Quote Post
kirkor0
post
Post #4





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 18.04.2004

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


nospor dzięki, spoko. Nie jestem najlepszy z angielskiego i nie mogę czegoś sie dopatrzec.

Najlepiej opiszę o co mi chodzi.

Mam plik plik.csv. Kody są ułożone każdy w nowej lini:
  1. 12345678
  2. KD6APQOD
  3. FDHY94T1
  4. (itd.)


Mam też tabelę kody:
  1. kod char(8),
  2. pole1 int,
  3. data_dodania datetime.


I teraz chcę wrzucic każdy kod jako nowy rekord, a
pole pole1 uzupelnic jakas wartoscia, natomiast
pole data_dodania obecną datą w danej chwili.

Nie mogę doszuka w manualu jak to zrobic. Nakieruj mnie.

A i dodam, że na serwerze mam MySQL 4.0.27.

Ten post edytował kirkor0 23.08.2006, 13:22:12
Go to the top of the page
+Quote Post
Prph
post
Post #5





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 4.03.2006
Skąd: Łódź

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


Jest funkcja wbudowana w php.

  1. <?php
  2. $aRecord = fgetcsv($this->_rCSV, 512, ',');
  3. ?>


Pierwszy parametr to uchwyt do pliku, dlugi to dlugosc linii, trzeci to separator pola.
Zwraca tablice z polami z danej linii.

Pozdrawiam, Adrian.
Go to the top of the page
+Quote Post
kirkor0
post
Post #6





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 18.04.2004

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


OK. Jednak bardziej by mi odpowiadał sposób nospora.
Jednak nadal nie wiem jak zrobic to w moim przypadku.

nospor, POMÓŻ!!!

EDIT:
Przed chwilą zauważyłem, że plik, z którego dane są ładowane do MySQL przez LOAD DATA INFILE musi byc na serwerze, na ktorym zainstalowana jest baza.
Ja chce pliki wrzucac przez przegladarke.
To wogóle możliwe?

Ten post edytował kirkor0 23.08.2006, 16:06:27
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Ja chce pliki wrzucac przez przegladarke.
Aaaa, jak tak to chiba nie (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
Myslalem ze dostajesz do reki te pliki
Go to the top of the page
+Quote Post
kirkor0
post
Post #8





Grupa: Zarejestrowani
Postów: 80
Pomógł: 0
Dołączył: 18.04.2004

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


Tzn. dostaje do reki. Ale caly system jest na wykupionym serwerze.

Czyli wychodzi na to, ze bede musial odczytac wszystkie kody i wrzucic zapytaniem.
A może wiecie ile można maksymalnie dodac rekordów jednym INSERT'em?
Bo kodów do mam 10 000 w jednym pliku! (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

EDIT:
Właśnie zauważyłem, że błąd leżał po innej stronie. Spokojnie dodało 10 000 rekordów.
Problem rozwiązany.

Ten post edytował kirkor0 23.08.2006, 19:05:24
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: 22.08.2025 - 13:48