Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Extract string - explode
Forum PHP.pl > Forum > PHP
hettmix
Witam.

Mam taki plik:
plik *.bif

z którego próbuję wyciągnąć ten fragment tekstu:
08.01.2013 04-08-2811 Multanova 6F 22:39:21 F001`005 ^064km/h S2

Powyższe dane ulegają zmianie w każdym pliku, w związku z czym wyszukuję stały znacznik ASCII i wycinam
to co jest po nim:
  1. $ASCII = 'ASCII';
  2. $lines = file($target_path);
  3. $lines = str_replace (array("\r\n", "\n", "\r"), ' ', $lines);
  4. //print_r($lines);
  5.  
  6. foreach($lines as $line)
  7. {
  8. if(stristr($line,$ASCII)) {
  9.  
  10. $str = explode("ASCII", $line);
  11. $text = $str[0];
  12.  
  13. }
  14. }
  15. echo $text;
  16.  


Problem w tym, że pierwszy element tablicy po zastosowaniu explode zaczyna się od:
22:39:21 F001`005 ^064km/h S2 y,�P%.
Czy przyczyną są znaki kończące wiersz ?.

Jak mogę uzyskać cały poszukiwany przeze mnie fragment tekstu ?.
SmokAnalog
Przede wszystkim nie zamieniaj ręcznie znaków nowej linii, a już na pewno nie w taki sposób, w jaki to robisz. Masz do tego elegancki sposób:
  1. $lines = file($target_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
hettmix
Cytat(SmokAnalog @ 24.10.2013, 11:02:06 ) *
Przede wszystkim nie zamieniaj ręcznie znaków nowej linii, a już na pewno nie w taki sposób, w jaki to robisz. Masz do tego elegancki sposób:
  1. $lines = file($target_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);


Uwaga cenna, lecz nie rozwiązała mojego problemu.
!*!
A nie możesz wyciągnąć tego przez preg_match ?
hettmix
Cytat(!*! @ 24.10.2013, 11:19:22 ) *
A nie możesz wyciągnąć tego przez preg_match ?

Nie bardzo siedzę w temacie wyrażeń regularnych.
redeemer
Czy przypadkiem ten plik bif to nie jpeg i to nie są dane exif?
hettmix
Cytat(redeemer @ 24.10.2013, 12:03:26 ) *
Czy przypadkiem ten plik bif to nie jpeg i to nie są dane exif?

Tak to jpeg, ale tych danych nie można odczytać jako exif - np. XnView ich nie pokazuje.


OK - to może inaczej.
Jak usunąć wszystkie znaki między tymi dwoma stringami Multanova 6F  i 22:39:21 F001`005
Edytor Hex pokazuje 20 10 0a i problem jest właśnie z tym 0a - po jego ręcznym usunięciu funkcja explode pokazuje to co trzeba.
Próbuję już na różne sposoby:
  1. preg_replace( '/[^[:print:]]/', '',$lines);
  2. str_replace (array("\r\n", "\n", "\r"), ' ', $lines);
  3. str_replace(chr(13), "", $lines);
  4. str_replace("\0", "", $lines);

ale nic nie pomaga.
SmokAnalog
Nie powinieneś kombinować w ten sposób z plikiem binarnym. Upewnij się czy tych danych EXIF nie da się odczytać w żaden prawidłowy sposób.
hettmix
Rozwiązanie mojego problemu okazało się banalne:
  1. $dat = file_get_contents($target_path);
  2. preg_match("/ASCII(.*?)ASCII/si", $dat, $matches);
  3. //print_r($matches);
  4.  
  5. $matches = str_replace('ASCII', '', $matches[0]);
  6. echo "<br />ASCII:<br />".$matches;
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.