Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Explode
Forum PHP.pl > Forum > Przedszkole
Matimor
Mam zrobiony odczyt danych z pliku tak aby było explode na znak \n ale teraz mam taki problem, ponieważ nie wiem jak zrobić aby zapisało mi plik po zmianie z powrotem z \n

  1. function setWartosc($plik, $from, $to)
  2. {
  3. $file = file_get_contents($plik);
  4. $content = explode("\n", $file);
  5. $i=0;
  6. while($content[$i])
  7. {
  8. $var = explode("=", $content[$i]);
  9. if($var[0] == $from)
  10. {
  11. $var[1] = $to;
  12. }
  13. $ret_val .= $var[0]."=".$var[1]."\n";
  14. $i++;
  15. }
  16. file_put_contents($plik, $ret_val);
  17.  
  18. }


Pomoże mi ktoś w końcu? ...
skowron-line
Jeżeli chcesz "przejechać" plik linijka po linijce to
file
Suh
Skoro tak bardzo zależy Ci na explode to dla odwrotnego efektu proponuje implode winksmiley.jpg
Matimor
Pokaż jak to ma wyglądac na tym kodzie co ci podałem winksmiley.jpg
Fifi209
Normalnie...

  1. $zmienna = array('linia1', 'linia2', 'linia3');
  2.  
  3. implode("\n", $zmienna);
Matimor
Ty ale ja tych linii tam mam chyba ze 500 ...

Tak zapisuje mi to i odczytuje

Cos=zmienna np. Cos=1
Suh
A manual poczytać i samemu popróbować to już ciężko.. tak ?

  1. // na poczatku tworzymy tablice w pętli
  2. $ret_val[$i] = $var[0]."=".$var[1];
  3. // a potem pakujemy do pliku
  4. file_put_contents($plik, implode("\n", $ret_val));
Matimor
no niby wszystko ok, ale w pliku zmian nie widze...
Suh
to jak wygląda teraz Twój plik ? pokaż kawałek zawartości..
Matimor
Wygląda tak jak był...

Gra zapisuje go w ciągu znaków
Kod
cos=1\ncos=2\cos=3


Funkcja czyta go i usuwa \n
Kod
cos=1
cos=2
cos=3



Funkcja zapisuje go w kolumnach tak jak usunęło \n
Kod
cos=1
cos=2
cos=3


A ma być:
Kod
cos=1\ncos=2\cos=3
Suh
OK, a wiesz co to jest \n questionmark.gif
Matimor
Tak wiem, taki kwadracik się robi. a \r\n to po prostu enter ;d
Suh
No właśnie, ten kwadracik to jest znak nowej linii czyli \n. Dla skryptu jest to niezależne, czy ma kwadracik czy \n - odczyta go tak samo bo dane są przetwarzane binarnie. Jeżeli chcesz widzieć te znaczki \n to po prostu w funkcji implode() zmień "\n" na '\n'.
Matimor
Czyli jak wywale explode to czytać będzie normalnie?

Teraz działa ale dodaje mi \n i zapisuje tylko pierwsze 3 zmienne. W dodatku znak \n jest widoczny, a powinien być kwadracik.
Suh
Nie.. explode zamienia Ci wczytaną zawartość pliku na tablicę, której elementy powstają przez separację za pomocą znaku nowej linii. Potem przecież wykonujesz operacje na tablicy, a następnie funkcją implode łączysz elementy tablicy w jedną, spójną całość i pakujesz do pliku. Rozumiesz ?

Cytat(Matimor @ 22.09.2009, 14:52:18 ) *
Funkcja zapisuje go w kolumnach tak jak usunęło \n
Kod
cos=1
cos=2
cos=3


A ma być:
Kod
cos=1\ncos=2\cos=3



Cytat(Matimor @ 22.09.2009, 15:05:08 ) *
W dodatku znak \n jest widoczny, a powinien być kwadracik.


Zdecyduj się exclamation.gif W temacie masz pokazane różne sposoby na uzyskanie swojego rozwiązania, poczytaj manual, pokombinuj.
Matimor
Ok ok rozumie, ale dlaczego zapisuje mi tylko pierwsze 3 zmienne zamiast 500 ?
Suh
Może tylko tyle wczytuje ? sprawdź rozmiar czytanego pliku, rozmiar tablicy $content itp..
Matimor
Nie no dalej to samo, ja nie wiem jak to zrobić, cholera :/
Suh
Pokaż kod oraz wywołanie funkcji.
Byłoby też dobrze gdybyś gdzieś na jakiś serwer wrzucił ten plik, który chcesz przetwarzać.
Matimor
Plik, który przetwarzam jest na serwerze. Funkcje masz w pierwszym poście.

  1. function setWartosc($plik, $from, $to)
  2. {
  3. $file = file_get_contents($plik);
  4. $content = explode("\n", $file);
  5. $i=0;
  6. while($content[$i])
  7. {
  8. $var = explode("=", $content[$i]);
  9. if($var[0] == $from)
  10. {
  11. $var[1] = $to;
  12. }
  13. $ret_val[$i] = $var[0]."=".$var[1];
  14. $i++;
  15. }
  16. file_put_contents($plik, implode('\n', $ret_val));
  17.  
  18. }
Suh
Chodziło mi o to abym mógł zobaczyć ten plik, o ile to możliwe.
Pokaż też przykładowe wywołanie tej funkcji w kodzie.
Matimor
Tak wygląda zawartość pliku nie ma po co go gdzies wrzucać.
Kod
Data=xqzxhw4\nRank=0\nKoszy



Wykorzystanie:
  1. setWartosc("data.txt", "Key", $rand);

Suh
Cytat(Matimor)
Ok ok rozumie, ale dlaczego zapisuje mi tylko pierwsze 3 zmienne zamiast 500 ?


No to sorry ale ja już Cie nie rozumiem. Skąd niby ma się wziąść te 500 zmiennych ? Same się nie wyczarują.. Z tego pliku otrzymasz tablicę 3-elementową i tyle. Wg. mnie wszystko działa dobrze.
Matimor
Jest plik, podczas rejestracji jest on kopiowany i tworzy ten plik co teraz widzisz, później każdy plik to dany użytkownik i ma on mieć dostęp do strony za pomocą tego pliku, który został utworzony z kopii. W pliku example znajdują się zmienne, które są wklejane do tworzonego pliku, zmienne sa zapisane prawidłowo czyli przez \n ale gdy użyję, tej najważniejszej funkcji czyli setWartosc to usuwa mi z pliku te wszystkie /n i chce aby po put_ dodawało mi to z powrotem ...
fander
Jakie kodowanie masz w tym pliku tekstowym ?
Suh
To jak ma w końcu wyglądać ten plik ? ma zawierać \n czy "kwadraciki" questionmark.gif
Jeżeli \n to zostaw tak jak jest, jeżeli "kwadraty" to w funkcji implode zmień apostrofy na cudzysłów.
Matimor
Kodowanie utf8 bez boom zaraz do was napisze ide do sklepu...

Nie no tego nie da się zrobić :/

Ma ktoś jakieś pomysły? ...
fander
jaki kod w utf8 ma ten kwadracik który chcesz wyświetlić.

Czy enter w utf8 to 0x10 ?
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.