Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: preg_match odczyt linia po linii. HELP
Forum PHP.pl > Forum > PHP
mosfet
Witam.

Prosze o pomoc. Poczatkuje i za raklo mi pomyslow.

Mam plik:

  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


Odczytuje go za pomoca skryptu:
Tworze nim apytanie do bazy. Wszystko ok z tym ze jest ok jak w pliku po [Data] wystepuje tylko jedna linijka (czyli jeden element).
Nie wiem jak zrobic zeby po wpisaniu wiekszej ilosci linijek(elementow) skrypt utworzyl dla kazdej z nich nowe zapytanie.

  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.  
  39. ?>


Plik z kikloma elementami:

  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
erix
Cytat
Nie wiem jak zrobic zeby po wpisaniu wiekszej ilosci linijek(elementow) skrypt utworzyl dla kazdej z nich nowe zapytanie.

Flaga /m. Oczywiście do tego potrzeba preg_match_all.
mosfet
Czy mozesz podac mi przyklad questionmark.gif Zaczynam zabawee z PHP i podobnymi i troche wolno mi idzie zakumanie o co chodzi czasami.
erix
  1. preg_match_all('#wyrażenie#m' ...)
mosfet
nie moglem sobie poradzic z wyrazeniami regularnymi wiec napisalem taki skrypt:
Czy to dobre rozwiazanie questionmark.gif
Nie potrafie zastosowac flagi /m do mojego przykladu.

  1. <?php
  2.  
  3. $sciezka1='pliki/element.txt';
  4.  
  5. $text1 = fread(fopen($sciezka1, "r"), filesize($sciezka1));
  6. $text2=fopen($sciezka1, "r");
  7. /*
  8. $pocz=strpos($text1, '[Data]');
  9. $rest = substr($text1, $pocz);
  10.  
  11. $data= explode('|', $rest);
  12. //print_r($data).'<br/>';
  13. */
  14.  
  15.  
  16. $handle = fopen($sciezka1, "r");
  17. while (!feof($handle)) {
  18. $buffer = fgets($handle);
  19. $linia = rtrim($buffer, "\r\n");
  20. $wiersz[] = $linia;
  21.  
  22. }
  23.  
  24. $count=count($wiersz);
  25. echo $count.'<br/>';
  26.  
  27. $a= array_search('[Data]', $wiersz);
  28. echo $a.'<br/>';
  29.  
  30.  
  31.  
  32. for ($i = $a+1; $i < $count; $i++) {
  33. //echo $wiersz[$i].'<br/>';
  34. echo '<br/>';
  35.  
  36. foreach($wiersz as $rr){
  37.  
  38. $rr=explode("|", $wiersz[$i]);
  39.  
  40. }
  41. $sql='insert into baza (pole1, pole2, pole3, pole4) values ( ';
  42. foreach($rr as $tt){
  43.  
  44. $sql.='\''.$tt.'\', ';
  45.  
  46. }
  47.  
  48. $sql=substr($sql, 0, -2);
  49. echo $sql;
  50. echo ')';
  51.  
  52. }
  53.  
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.