Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Odczyt metadata - plik *.bif
hettmix
post
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 10.03.2012

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


Witam.

Potrzebuję dostać się do danych zapisanych w pliku z rozszerzeniem bif. Jest to plik graficzny zapisywany przez kamerę urządzenia rejestrującego typu fotoradar niemieckiego producenta Robot Visual Systems GmBH z utrwalonym wykroczeniem, a zawierający m.in. takie dane jak data i czas zdarzenia, prędkość, lokalizacja itd. Edytując ten plik np. w notatniku na jego końcu znajdują się pewne znaczniki wraz z przypisanymi wartościami m.in.:

CAM_SHU1=0004
CAM_GAI1=0220
CAM_OFF1=0000
CAM_SYSN=ROBOT Digital 5.0
DIS_LOOP=02500
FIL_NUMB=0000090
FRA_INDE=A
FRA_NUMB=120
INC_DATE=190213
INC_TIME=131555
INC_INDE=0
INC_LANE=1
INC_SPEE=061
INC_LIMI=050
INC_MLIM=061
INC_CVEH=0
IMG_NUMB=00000239

Jak mogę odczytać z tego pliku wartości przypisane do poszczególnych znaczników ?.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Jeżeli ilość tych znaczników jest stała to znajdujesz sobie pierwszy np: CAM_SHU1=0004
Wypie... usuwasz wszystko przed nim i jedziesz preg_match w tablcy zapisując kolejne wyrażenia opisujące znacznik.

Ew. prościej robisz explode każdej linijki po = oczywiście po wyczyszczeniu pozostałych danych
Go to the top of the page
+Quote Post
hettmix
post
Post #3





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 10.03.2012

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


Cytat(Pyton_000 @ 18.09.2013, 22:19:41 ) *
Jeżeli ilość tych znaczników jest stała to znajdujesz sobie pierwszy np: CAM_SHU1=0004
Wypie... usuwasz wszystko przed nim i jedziesz preg_match w tablcy zapisując kolejne wyrażenia opisujące znacznik.

Ew. prościej robisz explode każdej linijki po = oczywiście po wyczyszczeniu pozostałych danych



Ok - mam taki oto kod, który wyszukuje dany znacznik w pliku:
  1. $search = 'CAM_NUMB';
  2. $lines = file($target_path);
  3. $found = false;
  4.  
  5. foreach($lines as $line)
  6. {
  7. if(strpos($line, $search) !== false)
  8. {
  9. $found = true;
  10. echo $line;
  11. }
  12. }
  13. if(!$found)
  14. {
  15. echo 'No match found';
  16. }

Powyższy kod działa ale chciałbym umieścić kilka znaczników w tablicy i wyszukać je wszystkie w pliku, a następnie wylistować wraz z wartościami.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Czy te znaczniki są na samym końcu?
Jeżeli tak to robisz stripos np CAM_SHU1 i wywalasz wsio przed.
Potem explode po \n (lub co tam jest) a następnie w foreach wyniku exploda robisz kolejne explode po =
Go to the top of the page
+Quote Post
hettmix
post
Post #5





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 10.03.2012

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


Cytat(Pyton_000 @ 20.09.2013, 19:50:08 ) *
Czy te znaczniki są na samym końcu?
Jeżeli tak to robisz stripos np CAM_SHU1 i wywalasz wsio przed.
Potem explode po \n (lub co tam jest) a następnie w foreach wyniku exploda robisz kolejne explode po =


Może jakiś fragment kodu, bo nie bardzo mogę to ugryźć.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Coś w ten deseń. Pisane na szybko.
  1. <?php
  2. $plik_fotka = 'Jakieś tam sobie dane... Jakieś tam sobie dane... Jakieś tam sobie dane...
  3. Jakieś tam sobie dane... Jakieś tam sobie dane... Jakieś tam sobie dane... Jakieś tam sobie dane...
  4. CAM_SHU1=0004
  5. CAM_GAI1=0220
  6. CAM_OFF1=0000
  7. CAM_SYSN=ROBOT Digital 5.0
  8. DIS_LOOP=02500
  9. FIL_NUMB=0000090
  10. FRA_INDE=A
  11. FRA_NUMB=120
  12. INC_DATE=190213
  13. INC_TIME=131555
  14. INC_INDE=0
  15. INC_LANE=1';
  16.  
  17. $firstPos = stripos($plik_fotka, 'CAM_SHU1');
  18. if($firstPos !== false) {
  19. $plik_fotka = substr($plik_fotka, $firstPos);
  20. }
  21. $tagLines = explode("\n", $plik_fotka);
  22. $tags = array();
  23. foreach ($tagLines as $key => $value) {
  24. $explodedTags = explode('=', $value);
  25. $tags[$explodedTags[0]] = $explodedTags[1];
  26. }
  27.  
  28. var_dump($tags);
Go to the top of the page
+Quote Post
hettmix
post
Post #7





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 10.03.2012

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


Cytat(Pyton_000 @ 21.09.2013, 12:54:46 ) *
Coś w ten deseń. Pisane na szybko.
  1. <?php
  2. $plik_fotka = 'Jakieś tam sobie dane... Jakieś tam sobie dane... Jakieś tam sobie dane...
  3. Jakieś tam sobie dane... Jakieś tam sobie dane... Jakieś tam sobie dane... Jakieś tam sobie dane...
  4. CAM_SHU1=0004
  5. CAM_GAI1=0220
  6. CAM_OFF1=0000
  7. CAM_SYSN=ROBOT Digital 5.0
  8. DIS_LOOP=02500
  9. FIL_NUMB=0000090
  10. FRA_INDE=A
  11. FRA_NUMB=120
  12. INC_DATE=190213
  13. INC_TIME=131555
  14. INC_INDE=0
  15. INC_LANE=1';
  16.  
  17. $firstPos = stripos($plik_fotka, 'CAM_SHU1');
  18. if($firstPos !== false) {
  19. $plik_fotka = substr($plik_fotka, $firstPos);
  20. }
  21. $tagLines = explode("\n", $plik_fotka);
  22. $tags = array();
  23. foreach ($tagLines as $key => $value) {
  24. $explodedTags = explode('=', $value);
  25. $tags[$explodedTags[0]] = $explodedTags[1];
  26. }
  27.  
  28. var_dump($tags);


Coś mi to nie śmiga ale może tak:
  1. $search1 = 'CAM_NUMB';
  2. $search2 = 'CAM_SHU1';
  3. $search3 = 'CAM_GAI1';
  4. $search4 = 'CAM_OFF1';
  5.  
  6. $lines = file($target_path);
  7.  
  8. foreach($lines as $line)
  9. {
  10.  
  11. if(stristr($line,$search1)) {
  12. $wart = explode("=", $search1);
  13. $wart1 = explode("=", $line);
  14. echo $wart[0]."=".$wart1[1]."<BR />";}
  15.  
  16. if(stristr($line,$search2)) {
  17. $wart = explode("=", $search2);
  18. $wart1 = explode("=", $line);
  19. echo $wart[0]."=".$wart1[1]."<BR />";
  20. }
  21.  
  22. if(stristr($line,$search3)) {
  23. $wart = explode("=", $search3);
  24. $wart1 = explode("=", $line);
  25. echo $wart[0]."=".$wart1[1]."<BR />";
  26. }
  27.  
  28. if(stristr($line,$search4)) {
  29. $wart = explode("=", $search4);
  30. $wart1 = explode("=", $line);
  31. echo $wart[0]."=".$wart1[1]."<BR />";
  32. }
  33.  
  34. }
Go to the top of the page
+Quote Post
Pyton_000
post
Post #8





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


nie śmiga bo?
Go to the top of the page
+Quote Post
hettmix
post
Post #9





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 10.03.2012

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


Cytat(Pyton_000 @ 21.09.2013, 16:32:40 ) *
nie śmiga bo?


OK - poniżej rozwiązanie mojego problemu z wykorzystaniem znaczników umieszczonych w tablicy:
  1. $arr = array('CAM_NUMB', 'CAM_SHU1', 'CAM_GAI1', 'CAM_OFF1', 'CAM_SYSN', 'EXP_DIF1', 'FIL_NUMB', 'FRA_INDE');
  2. $lines = file($target_path);
  3. $i = 1;
  4.  
  5. foreach ($arr as $value) {
  6.  
  7. foreach($lines as $line)
  8. {
  9. if(stristr($line,$value)) {
  10. $wart = explode("=", $value);
  11. $wart1 = explode("=", $line);
  12. print '<div style="text-align: left; font-size: 0.75em;">'.$i.'. '.$wart[0].'='.$wart1[1].'</div>';
  13. $znacznik[$value] = $wart[0].'='.$wart1[1];
  14. $i++;
  15. }
  16. }
  17.  
  18.  
  19. }
  20. echo $znacznik['CAM_SHU1'];
Go to the top of the page
+Quote Post
Kofel
post
Post #10





Grupa: Zarejestrowani
Postów: 99
Pomógł: 22
Dołączył: 14.12.2007
Skąd: Wyszków

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


Ogólnie, to te znaczniki są zapisane na pewno po pewnym ciągu bajtów (albo i pojedyńczego szczególnego bajtu). Dlatego wydaje mi się, że rozsądniejsze byłoby wyszukanie tego właśnie "markera". Wrzuć proszę przykładowy plik. Postaram się to ogarnąć.
Dopiero później można byłoby się zająć sparsowaniem tych zmiennych. Zrobiłbym to za pomocą regexpów:
Kod
/([^=]+)=(.*)/


Przykład:
  1. <?php
  2.  
  3. $string = 'CAM_SHU1=0004
  4. CAM_GAI1=0220
  5. CAM_OFF1=0000
  6. CAM_SYSN=ROBOT Digital 5.0
  7. DIS_LOOP=02500
  8. FIL_NUMB=0000090
  9. FRA_INDE=A
  10. FRA_NUMB=120
  11. INC_DATE=190213
  12. INC_TIME=131555
  13. INC_INDE=0
  14. INC_LANE=1
  15. INC_SPEE=061
  16. INC_LIMI=050
  17. INC_MLIM=061
  18. INC_CVEH=0
  19. IMG_NUMB=00000239';
  20.  
  21. $matches = array();
  22. $znaczniki = array();
  23.  
  24. preg_match_all('/([^=]+)=(.*)/', $string, $matches, PREG_SET_ORDER);
  25.  
  26. foreach ($matches as $match)
  27. {
  28. $znaczniki[trim($match[1])] = trim($match[2]);
  29. }
  30.  
  31. var_dump($znaczniki);


Ten post edytował Kofel 23.09.2013, 11:10:20
Go to the top of the page
+Quote Post
hettmix
post
Post #11





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 10.03.2012

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


Cytat(Kofel @ 23.09.2013, 12:08:53 ) *
Ogólnie, to te znaczniki są zapisane na pewno po pewnym ciągu bajtów (albo i pojedyńczego szczególnego bajtu). Dlatego wydaje mi się, że rozsądniejsze byłoby wyszukanie tego właśnie "markera". Wrzuć proszę przykładowy plik. Postaram się to ogarnąć.
Dopiero później można byłoby się zająć sparsowaniem tych zmiennych. Zrobiłbym to za pomocą regexpów:
Kod
/([^=]+)=(.*)/


Przykład:
  1. <?php
  2.  
  3. $string = 'CAM_SHU1=0004
  4. CAM_GAI1=0220
  5. CAM_OFF1=0000
  6. CAM_SYSN=ROBOT Digital 5.0
  7. DIS_LOOP=02500
  8. FIL_NUMB=0000090
  9. FRA_INDE=A
  10. FRA_NUMB=120
  11. INC_DATE=190213
  12. INC_TIME=131555
  13. INC_INDE=0
  14. INC_LANE=1
  15. INC_SPEE=061
  16. INC_LIMI=050
  17. INC_MLIM=061
  18. INC_CVEH=0
  19. IMG_NUMB=00000239';
  20.  
  21. $matches = array();
  22. $znaczniki = array();
  23.  
  24. preg_match_all('/([^=]+)=(.*)/', $string, $matches, PREG_SET_ORDER);
  25.  
  26. foreach ($matches as $match)
  27. {
  28. $znaczniki[trim($match[1])] = trim($match[2]);
  29. }
  30.  
  31. var_dump($znaczniki);


Poniżej link do pliku:
Link do pliku *.bif
Go to the top of the page
+Quote Post
Kofel
post
Post #12





Grupa: Zarejestrowani
Postów: 99
Pomógł: 22
Dołączył: 14.12.2007
Skąd: Wyszków

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


Dla porównania prosiłbym o drugi plik
Go to the top of the page
+Quote Post
hettmix
post
Post #13





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 10.03.2012

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


Cytat(Kofel @ 23.09.2013, 13:53:31 ) *
Dla porównania prosiłbym o drugi plik


Link poniżej:
Link do drugiego pliku *.bif
Go to the top of the page
+Quote Post
Pyton_000
post
Post #14





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


hettmix przecież to co Ci dałem śmiga i działa jak powinno
dla pliku drugiego:
Kod
array (size=21)
  'CAM_SHU1' => string '0004' (length=4)
  'CAM_GAI1' => string '0120' (length=4)
  'CAM_OFF1' => string '0001' (length=4)
  'CAM_SYSN' => string 'M2.0' (length=4)
  'FIL_NUMB' => string '0000373' (length=7)
  'FRA_INDE' => string '0' (length=1)
  'FRA_NUMB' => string '001' (length=3)
  'INC_DATE' => string '040111' (length=6)
  'INC_TIME' => string '114434' (length=6)
  'INC_INDE' => string '0' (length=1)
  'INC_DIRE' => string 'v' (length=1)
  'INC_LANE' => string '0' (length=1)
  'INC_SPEE' => string 'CHK' (length=3)
  'INC_LIMI' => string '050' (length=3)
  'INC_MLIM' => string '000' (length=3)
  'INC_CVEH' => string '0' (length=1)
  'IMG_NUMB' => string '00000001' (length=8)
  'IMG_DATI' => string '04.01.2011 11:44:34.231' (length=23)
  'LOC_LI_P' => string '050' (length=3)
  'LOC_LI_L' => string '050' (length=3)
  'LOC_TEX0' => string '11' (length=2)
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: 26.09.2025 - 10:15