Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odczyt metadata - plik *.bif
Forum PHP.pl > Forum > PHP
hettmix
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 ?.
Pyton_000
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
hettmix
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.
Pyton_000
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 =
hettmix
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źć.
Pyton_000
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);
hettmix
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. }
Pyton_000
nie śmiga bo?
hettmix
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'];
Kofel
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);
hettmix
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
Kofel
Dla porównania prosiłbym o drugi plik
hettmix
Cytat(Kofel @ 23.09.2013, 13:53:31 ) *
Dla porównania prosiłbym o drugi plik


Link poniżej:
Link do drugiego pliku *.bif
Pyton_000
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)
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.