Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pomoc przy Preg_match_all
Forum PHP.pl > Forum > PHP
ZenekN
Cześć jeśli ktoś wie jak pomóc to byłbym ogromnie wdzięczny

  1. Info{
  2. NazwaProgramu ='Program ksiegowy 2014
  3. WersjaSzablonu =3
  4. }
  5. Firma{
  6. nazwa =PHU Firma kogucik
  7. miejscowosc =Warszawa
  8. ulica =Łódzka
  9. kodpocz =99-999
  10. nip =999-222-22-22
  11. telefon =22 2222222
  12. email =mail
  13.  
  14. }
  15. }
  16. KategorieTowarow{
  17. KategoriaTowarow{
  18. nazwa =Towary 
  19. }
  20. KategoriaTowarow{
  21. nazwa =Towary wrażliwe (OO)
  22. }
  23. }
  24. Towar{
  25. kategoria =Towary 
  26. kod =01 003
  27. nazwa =Folia malarska Niebieska gruba 4x5 0.6
  28. jm =szt
  29. stawkaVAT =23.00
  30. cenaA =3.66
  31. cenaAwal =
  32. cenaB =2.82
  33. cenaBwal =
  34. cenaC =3.10
  35. cenaCwal =
  36. cenaD =4.50
  37. }
  38.  
  39. Towar{
  40. kategoria =Towary
  41. kod =01 003
  42. nazwa =Folia malarska Niebieska gruba 4x5 0.6
  43. jm =szt
  44. stawkaVAT =23.00
  45. cenaA =3.66
  46. cenaAwal =
  47. cenaB =2.82
  48. cenaBwal =
  49. cenaC =3.10
  50. cenaCwal =
  51. cenaD =4.50
  52. }
  53.  
  54.  
  55. Towar{
  56. kategoria =Towary
  57. kod =01 003
  58. nazwa =Folia malarska Niebieska gruba 4x5 0.6
  59. jm =szt
  60. stawkaVAT =23.00
  61. cenaA =3.66
  62. cenaAwal =
  63. cenaB =2.82
  64. cenaBwal =
  65. cenaC =3.10
  66. cenaCwal =
  67. cenaD =4.50
  68. }
  69.  
  70.  
  71.  


Chciałbym z tych danych wyciągnąć w tablicy nazwa, cenaB, jm

pomoże ktoś
ikssde
Wczytujesz sobie zawartość tego pliku do zmiennej, a potem robisz na tym preg_match_all z użyciem takiego wzoru:
  1. /Towar\{([^\}]+)\}/s
Potem rozbijasz to na linie, robisz explode, gdzie znakiem rozdzielającym będzie znak równości i zrzucasz wszystko do tablicy uprzednio wyrzucając zbędne białe znaki przy pomocy trim.
ZenekN
  1. string 'kategoria=Towary
  2.  
  3. kod=Oz1
  4.  
  5. nazwa="C"120kw.14/107/
  6.  
  7. jm=szt
  8.  
  9. stawkaVAT=23.00
  10.  
  11. cenaA=5.69
  12.  
  13. cenaAwal=
  14.  
  15. cenaB=4.47
  16.  
  17. cenaBwal=
  18.  
  19. cenaC=4.69
  20.  
  21. cenaCwal=
  22.  
  23. cenaD=7.00' (length=167)
  24.  
  25. string 'kategoria=Towary
  26.  
  27. kod=Oz2
  28.  
  29. nazwa="Cebulka"12/133/
  30.  
  31. jm=szt
  32.  
  33. stawkaVAT=22.00
  34.  
  35. cenaA=7.00
  36.  
  37. cenaAwal=
  38.  
  39. cenaB=5.83
  40.  
  41. cenaBwal=
  42.  
  43. cenaC=6.12
  44.  
  45. cenaCwal=
  46.  
  47. cenaD=8.54' (length=167)


gdy robię w tym przypadku potem

  1. explode("=", $tablica)


to otrzymuje źle rozbitą tablicę

  1. array (size=13)
  2. 0 => string 'kategoria' (length=9)
  3. 1 => string 'Towary
  4.  
  5. kod' (length=13)
  6. 2 => string 'Oz1
  7.  
  8. nazwa' (length=11)
  9. 3 => string '"C"120kw.14/107/
  10.  
  11. jm' (length=21)
  12. 4 => string 'szt
  13.  
  14. stawkaVAT' (length=15)
  15. 5 => string '23.00
  16.  
  17. cenaA' (length=13)
  18. 6 => string '5.69
  19.  
  20. cenaAwal' (length=15)
  21. 7 => string '
  22.  
  23. cenaB' (length=8)
  24. 8 => string '4.47
  25.  
  26. cenaBwal' (length=15)
  27. 9 => string '
  28.  
  29. cenaC' (length=8)
  30. 10 => string '4.69
  31.  
  32. cenaCwal' (length=15)
  33. 11 => string '
  34.  
  35. cenaD' (length=8)
  36. 12 => string '7.00' (length=4)


ikssde
Najpierw miałeś rozbić to co otrzymałeś z wyrażenia regularnego na linijki, zrób to na przykład korzystając z explode ale delimiterem niech będzie znak nowej linii, czyli "\n" (nawias podwójny jest istotny).
Potem dostaniesz tablicę elementów, gdzie każdy element to jedna linijka. Zrób sobie pętlę po tych elementach i zanim zrobisz na nich explode ze znakiem równości usuń zbędne spacje przy pomocy trim.

Powinno działać smile.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.