Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: fragmenty danych z .txt - zapis do zmiennej
Forum PHP.pl > Forum > PHP
mosfet
Witam

Mam takie sobie pliki z zawartoscia generowana przez pewien program:
Przedstawiam fragment:


  1. ;LNEXP-4.0
  2.  
  3. [LoginInfo]
  4. Protocol=LNEXP-4.0
  5. DictFieldsAsCodes=0
  6. Exporter=
  7. ExportDate=2008-08-04 12:36:26
  8.  
  9. [DataStream]
  10. idof|guidof|oferent_id|agenc|impa|kli|oddz|ofak|pryw|tylkopo|uid|zbr|minieksp|balmax|balmin|logmax|logmin|tarmax|tarmin|bank|
  11. celok|cenha|dodpo|ochro|okabl|opesp|podsu|podys|rastr|resta|socja|sysod|taras|cmax|cmax2|cmin|cmin2|walu|daom|daow|dawy|
  12. dazg|dlugo|grbud|grlaki|grorne|jm|kszta|kwg|naro|ogro|podmax|podmin|podz|szer|typwdz|ukszt|zadrz|bar|hlimn|hlios|patir|porek|
  13. posako|stdhot|idmu|idofo|limie|lokato|promiw|kuchu|kuchw|kuchy|pokmax|pokmin|typkuch|lok|okol|lazmax|lazmin|wcmax|wcmin|
  14. pommax|pommin|typhal|typram|medcie|medele|medgaz|medkan|medmoc|medogr|medsi|medwod|mlswy|intbud|konlibiu|konliusl|
  15. konwybiu|konwyusl|pobiuc|pobiuu|pouslc|pouslu|konlimax|konlimin|konwymax|konwymin|krydac|kw|przbiu|ptrlimax|ptrlimin|
  16. ptrnumax|ptrnumin|rokb|rypw|typbud|typmie|typnie|typof|typteb|typum|typwla|kto|nazwa|opis|www|rodpla|garusy|pagkom|
  17. pagmax|pagmin|palimi|parst|pazkom|pazmax|pazmin|lilok|kawal|pkmax|pkmin|polimax|polimin|sypmax|sypmin|gdlok|kienach|
  18. lokprz|pocodl|typdro|ulin|usyoki|widok|poloz|usylok|pocmax|pocmin|ponmax|ponmin|popmax|popmin|poumax|poumin|typpro|
  19. dapr|stan|std|stdmie|umebl|wolneod|telkom|telmax|telmin|rekgbli|rekgodl|rekjbli|rekjodl|reklbli|



Nie wiem jak zrobic pętle w PHP ktora odczytywalaby fragmenty tekstu zawartego pomiedzy znakami " | " czyli np " |idof| " i zapisywala wartosc do zmiennej $jakas_zmienna='idof'.

Generalnie sa to stringi danych ktore musze zapisac do tabeli SQL w celu ich dalszego przetwarzania.
phpion
explode
wookieb
  1. $text = ';LNEXP-4.0
  2.  
  3. [LoginInfo]
  4. Protocol=LNEXP-4.0
  5. DictFieldsAsCodes=0
  6. Exporter=
  7. ExportDate=2008-08-04 12:36:26
  8.  
  9. [DataStream]
  10. idof|guidof|oferent_id|agenc|impa|kli|oddz|ofak|pryw|tylkopo|uid|zbr|minieksp|ba
    lmax|balmin|logmax|logmin|tarmax|tarmin|bank|
  11. celok|cenha|dodpo|ochro|okabl|opesp|podsu|podys|rastr|resta|socja|sysod|taras|cm
    ax|cmax2|cmin|cmin2|walu|daom|daow|dawy|
  12. dazg|dlugo|grbud|grlaki|grorne|jm|kszta|kwg|naro|ogro|podmax|podmin|podz|szer|ty
    pwdz|ukszt|zadrz|bar|hlimn|hlios|patir|porek|
  13. posako|stdhot|idmu|idofo|limie|lokato|promiw|kuchu|kuchw|kuchy|pokmax|pokmin|typ
    kuch|lok|okol|lazmax|lazmin|wcmax|wcmin|
  14. pommax|pommin|typhal|typram|medcie|medele|medgaz|medkan|medmoc|medogr|medsi|medw
    od|mlswy|intbud|konlibiu|konliusl|
  15. konwybiu|konwyusl|pobiuc|pobiuu|pouslc|pouslu|konlimax|konlimin|konwymax|konwymi
    n|krydac|kw|przbiu|ptrlimax|ptrlimin|
  16. ptrnumax|ptrnumin|rokb|rypw|typbud|typmie|typnie|typof|typteb|typum|typwla|kto|n
    azwa|opis|www|rodpla|garusy|pagkom|
  17. pagmax|pagmin|palimi|parst|pazkom|pazmax|pazmin|lilok|kawal|pkmax|pkmin|polimax|
    polimin|sypmax|sypmin|gdlok|kienach|
  18. lokprz|pocodl|typdro|ulin|usyoki|widok|poloz|usylok|pocmax|pocmin|ponmax|ponmin|
    popmax|popmin|poumax|poumin|typpro|
  19. dapr|stan|std|stdmie|umebl|wolneod|telkom|telmax|telmin|rekgbli|rekgodl|rekjbli|
    rekjodl|reklbli|
  20. ';
  21.  
  22. preg_match('/\[DataStream\](.*)/is', $text, $matches);
  23. $data = explode('|', $matches[1]);
  24. $data = array_map('trim', $data);
  25. $data = array_filter($data, 'trim');
  26. print_r($data);
  27.  
kfx
Kod
$delim='[DataStream]';
$data=trim(substr($text, strpos($text,$delim)+strlen($delim), strlen($text)));
$zmienne=explode('|', $data);
mosfet
do wygenerowania zapytania sql chce uzyc kodu :

  1. <?php
  2.  
  3. $sciezka1="pliki/elementyu.txt";
  4.  
  5.  
  6. $text1 = fread(fopen($sciezka1, "r"), filesize($sciezka1));
  7.  
  8. preg_match('/\[DataStream\](.*)/is', $text1, $matches);
  9. $data = explode('|', $matches[1]);
  10. //$data = array_map('trim', $data);
  11. //$data = array_filter($data, 'trim');
  12. //print_r($data);
  13.  
  14.  
  15. mysql_insert_array();
  16.  
  17. function mysql_insert_array ($my_table, $my_array) {
  18. $my_array=$data;
  19. $my_table='elementy';
  20. $keys = array_keys($my_array);
  21. $values = array_values($my_array);
  22. $sql = 'INSERT INTO ' . $my_table . '(' . implode(',', $keys) . ') VALUES ("' . implode('","', $values) . '")';
  23.  
  24. echo $sql ;
  25. //return(mysql_query($sql));
  26. }


Niestety dostaje taki komunikat:
  1.  
  2. Warning: Missing argument 1 for mysql_insert_array() in /home/virtualki/7062/inz/test.php on line 17
  3.  
  4. Warning: Missing argument 2 for mysql_insert_array() in /home/virtualki/7062/inz/test.php on line 17
  5.  
  6. Warning: array_keys() [function.array-keys]: The first argument should be an array in /home/virtualki/7062/inz/test.php on line 20
  7.  
  8. Warning: array_values() [function.array-values]: The argument should be an array in /home/virtualki/7062/inz/test.php on line 21
  9.  
  10. Warning: implode() [function.implode]: Bad arguments. in /home/virtualki/7062/inz/test.php on line 22
  11.  
  12. Warning: implode() [function.implode]: Bad arguments. in /home/virtualki/7062/inz/test.php on line 22
  13. INSERT INTO elementy() VALUES ("")


Co robie zle questionmark.gif
Speedy
Przecież masz napisane, jak byk, co robisz źle.

Warning: Missing argument 1 for mysql_insert_array() in /home/virtualki/7062/inz/test.php on line 17
Warning: Missing argument 2 for mysql_insert_array() in /home/virtualki/7062/inz/test.php on line 17

Nie podałeś argumentów podczas wywoływania tej swojej funkcji. Kolejne błędy są po prostu implikacją tego pierwszego. argument dla funkcji array_keys, array_values oraz implode jest zły, bo go nie podałeś, więc go nie ma (jest równy NULL), a powinien być tablicą - pewnie $data.

Mam wrażenie, że w ogóle nie rozumiesz tego, co napisałeś oraz wyrzuconych błędów, więc poniżej podsumowanie:

Zamiast:

mysql_insert_array();

Wpisz:

mysql_insert_array('MOJATABELA',$data);
mosfet
Ok. Poradzilem sobie:

Plik odczytywany:

  1. [Info]
  2. Plik=Lista_czesci
  3. ExportDate=2010-02-17
  4.  
  5. [DataStream]
  6. id_elem|nazwa|sym_prod|producent|kategoria|ozn_dost|ozn_prod|dostawca|opis|uwagi|cena_netto
  7. [Data]
  8. |rezystor|5r51|thomson|rezystor|dos_5r51|prod_5r51|TME|opisik|brak uwagi|0,20


Skrypt odczytujacy i tworzacy zapytanie SQL. Skrypt dziala poprawnie.

  1. <?php
  2.  
  3. $miejsce='pliki/';
  4. $sciezka1=$miejsce.$plik_nazwa ;
  5.  
  6.  
  7. $text1 = fread(fopen($sciezka1, "r"), filesize($sciezka1));
  8.  
  9. preg_match('/\[DataStream\](.*)\[Data\]/is', $text1, $matches);
  10. $data = explode('|', $matches[1]);
  11. $data = array_map('trim', $data);
  12. //$data = array_filter($data, 'trim');
  13.  
  14. preg_match('/\[Data\](.*)/is', $text1, $matches2);
  15. $data2 = explode('|', $matches2[1]);
  16. //$data = array_map('trim', $data);
  17. //$data = array_filter($data, 'trim');
  18. //print_r ($data2);
  19.  
  20.  
  21. mysql_insert_array($data, $data2);
  22.  
  23. function mysql_insert_array ($data, $data2) {
  24. echo('Wygenerowane zapytanie SQL:'.'</br>'.'</br>');
  25. //$my_base="'inz_michal'";
  26. $my_table="elementy";
  27. $keys = array_values($data);
  28. $values = array_values($data2);
  29. $sql = 'INSERT INTO ' . $my_table . '(' . implode(', ', $keys) .') VALUES (\'' .implode('\', \'', $values) .'\')';
  30.  
  31. echo $sql ;
  32. return(mysql_query($sql));
  33. echo mysql_error().'</br>';
  34.  
  35.  
  36. }
  37.  
  38.  


Chcialbym jeszcze teraz zrobic tak zeby w przypadku pliku w ktorym jest "wiecej elementow" czyli lini po znaczniku [Data]. Dla kazdej z lini zostalo wygenerowane oddzielne zapytanie ktore dopisze mi wartosci do bazy.
Kombinowalem cosz fgets() ale mi nie wychodzi.

Plik z danymi:

  1. [Info]
  2. Plik=Lista_czesci
  3. ExportDate=2010-02-17
  4.  
  5. [DataStream]
  6. id_elem|nazwa|sym_prod|producent|kategoria|ozn_dost|ozn_prod|dostawca|opis|uwagi|cena_netto
  7. [Data]
  8. |rezystor|5r51|thomson|rezystor|dos_5r51|prod_5r51|TME|opisik|brak uwagi|0,20
  9. |kondensator|csx100n|thomson|el. bierne|dos_csx100|prod_csx100|TME|opisik|brak w magazynie|0,02
  10. |układ scalony|LF33|STE|półprzewodniki|dos_lf33|prod_lf33cdt|TME|stabilizator|brak uwagi|1,23




Podpowie mi ktos questionmark.gif
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.