Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] - Fragment od $zmiennej do..
Forum PHP.pl > Forum > PHP
pieto
Witam
Jak mogę dostać fragment zminnej $plik_txt od momentu napotkania $model do napotkania pustej lini jeden enter lub wiecej

kombinuje i zachooelre nie wychodzi
napisalem tak:
  1. <?php
  2. $tmp_model = preg_replace("#(.*?)$model(.*?)n(.*?)nn#e", '"$2"."n"' , $plik_txt);
  3. ?>

ale nie lyka

lub
  1. <?php
  2. $tmp_model = substr($plik_txt,strpos($plik_txt,$model),strpos($plik_txt,"nn"));
  3. ?>


i tez nie lyka
Kicok
Nie działa ponieważ:
  1. <?php
  2. strpos($plik_txt,"nn")
  3. ?>

1. funkcja ta znajduje ci "pierwszą pustą linię w pliku", a nie "pierwszą pustą linię za $model"
2. trzecim parametrem funkcji substr() (jeśli jest dodatni) jest ilość znaków do wycięcia, a nie pozycja ostatniego znaku do wycięcia.

Poczytaj o strpos" title="Zobacz w manualu PHP" target="_manual i substr" title="Zobacz w manualu PHP" target="_manual i przeanalizuj ten kod:
  1. <?php
  2.  
  3. $model_pos = strpos($plik_txt, $model);
  4. if($model_pos === false) {
  5. //nie znaleziono $model w pliku
  6. }
  7. else
  8. {
  9. $nl_pos = strpos($plik_txt, PHP_EOL.PHP_EOL, $model_pos);
  10. $ilosc_znakow = ($nl_pos - $model_pos);
  11.  
  12. $tmp_model = substr($plik_txt, $model_pos, $ilosc_znakow);
  13. }
  14.  
  15. ?>
pieto
Dzieki, teraz jasne winksmiley.jpg
ale nie kumam teraz dlaczego w $nl_pos nie mam nic a tym samym niepotrafi wyciagnac odpowiedniego fragmenu (do przerwy).

Jak sie domysla PHP_EOL = End Of Line ?
z gory dzieki


z tego co zauwazylem problem pojawia w kazdym przypaku dla zmiennej zczytanej z pliku formatu windowsowego - koniec lini CRLF, dziala z pliku w formacie unixowego (LF )
Kicok
Ehh, z przyzwyczajenia napisałem PHP_EOL. Jest to stała, która na systemach Windowsowskich przyjmuje wartość "\r\n" a na Unixowskich: "\n".

Żeby było zgodne z wszystkimi plikami zamień:
Kod
PHP_EOL.PHP_EOL

na:
Kod
"\n\n"


a zaraz po wczytaniu danych z pliku dodaj jeszcze:
  1. <?php
  2. $plik_txt = str_replace("rn", "n", $plik_txt);
  3. ?>
pieto
ech upierdliwy jestem wiem,
w zasadzie poradzilem sobie wycinajac znak \r i dziala spoko, teraz mam problem z przerobieniem aby wyciagal mi kazdy taki napotkany fragement , zalezy mi aby nie wykonywal tego w funkcji rekurencyjnej a moze w petli ?

bede naprawde wdzieczny za pomoc, bo kod prosty a troche mnie juz rozbraja...
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.