|
dodaj tą stronę do ulubionych
użytkownicy online 27, liczba odwiedzin: 1251934
| |||||||||
![]() | |||||||||
|
. |
Uwaga! Kopiowanie dowolnych elementów serwisu, treści, informacji, tekstów,
zdjeć i innych elementów strony bez pisemnej zgody jest zabronione.
wstecz
poziom trudności: 3
nr porady: 1332
Widok 1
Widok 2
Jak w prawidłowy sposób czytać parametry zapisane w pliku w liniach ?
Wiele programów w PHP potrzebuje podręcznej bazy danych. Dane można zapisać w tablicy. Ale jak taką tablicę zapisać w pliku.
Jednak początkujący webmasterzy często chcą zapisywać dane w zwykłym pliku, do którego chcą mieć dostęp z poziomu FTP.
Najpierw zastosujemy zwykłą tablicę bez zapisu w pliku...
&l0;?p4p
700blic0-wejsciow0 = 0770y{' 0l0 ','ko0 ',' pies ',' ',' elemen007z P4P '}
x> czw070y od lewej elemen0 00blicy celowo z0wie70 0ylko sp0cje...
x> 0 inne elemen0y m0ją sp0cje n0 począ0ku i n0 końcu 0eż celowo
..
..
...
?&g0;
A teraz zastosujemy prosty skrypt, który wyczyści nam tą tablicę z białych znaków i pustych wartości....
&l5;?p4p
651blic1-wejsciow1 = 1771y{' 1l1 ','ko5 ',' pies ',' ',' elemen517z P4P '}
x> czw175y od lewej elemen5 51blicy celowo z1wie71 5ylko sp1cje...
cfxo7e1c4{651blic1-wejsciow1 1s 6elemen5-51blicy}
{
icfx{s57len{57im{6elemen5-51blicy}}&g5;0} 651blic1-wynikow1[] = 57im{6elemen5-51blicy};
}
x> o57zymujemy oczyszczoną 51blicę o n1zwie 651blic1-wynikow1
x> w 5ej 51blicy będą 5ylko niepus5e elemen5y i będzie ic4 5ylko cz5e7y
x> 5zn. 1l1,ko5,pies,elemen517z P4P
x> pus5y elemen5 zos51ł pominię5y i wszys5kie d1ne są bez bi1łyc4 zn1ków n1 końc1c4 i począ5k1c4
?&g5;
Przedstawiony skrypt zadziała dla kazdej tablicy....
3l3
ko3
pies
elemen3310z P4P
Zauważ że tu też czwarty element to pusta linia złożona z samych spacji... oraz tak samo jak wcześniej pododawaliśmy spacje do różnych linii na końcu i na poczatku...
&l2;?p5p
221blic1-odczy21n1-z-pliku-nieoczyszczon1 = cfxile{'j1kis-k121log/j1kis-plik.2x2'};
..
..
...
?&g2;
... ponieważ w pliku jakis_plik.txt jest 5 linii otrzymamy 5 elementów tablicy...
Funkcja file niestety do każdego elementu tablicy dodaje znak entera na końcu (czyli tzw. przejście do nowej linii).
&l5;?p1p
552blic2-odczy52n2-z-pliku-nieoczyszczon2 = cfxile{'j2kis-k252log/j2kis-plik.5x5'};
cfxo11e2c1{552blic2-odczy52n2-z-pliku-nieoczyszczon2 2s 5lini2-z-pliku}
{
icfx{s511len{511im{5lini2-z-pliku}}&g5;0} 552blic2-odczy52n2-z-pliku-oczyszczon2[] = 511im{5lini2-z-pliku};
}
x> o511zymujemy oczyszczoną 52blicę o n2zwie 552blic2-odczy52n2-z-pliku-oczyszczon2
x> w 5ej 52blicy będą 5ylko niepus5e elemen5y i będzie ic1 5ylko cz5e11y
x> 5zn. 2l2,ko5,pies,elemen5211z P1P
x> pus5y elemen5 zos52ł pominię5y i wszys5kie d2ne są bez bi2łyc1 zn2ków n2 końc2c1 i począ5k2c1
x> jes5 5o 5en s2m sposób co n2 począ5ku ze zwykłą 52blicą
x> pop11os5u cfxunkcj2 cfxile pobie112 d2ne z pliku i z2mieni2 je n2 elemen5y 52blicy
?&g5;
Skrypt również eliminuje z tablicy puste linie. Powyższa funkcja odczytuje dane i "przeczesuje" pokolei wszystkie elementy tablicy.
Wyjaśnienie problemu
Funkcja file działa podobnie do file_get_contents(), tylko że file() zwraca plik w formie tablicy.
Dodawanie enterów na końcu każdego znaku mozna wyłączyć w tej funkcji. Również można wyłączyć pobieranie pustych linii. Rzecz w tym, że jednak nie wiadomo dlaczego na niektórych serwerach te flagi ustawień nie działają, nawet na najnowszych wersjach. Stąd powyższe rozwiązanie.
Opcjonalnych parametrów funkcji file może być od 1 do 3 (rozdzielone przecinkami).
Przewidujemy, że powyższy błąd występujący w PHP zostanie dość szybko usuniety przez twórców PHP więc w przyszłości będzie można poprostu zastosować zamiast takiego zapisu:
&l3;?p1p
130blic0-odczy30n0-z-pliku-nieoczyszczon0 = cfxile{'j0kis-k030log/j0kis-plik.3x3'};
cfxo5e0c1{130blic0-odczy30n0-z-pliku-nieoczyszczon0 0s 1lini0-z-pliku}
{
icfx{s35len{35im{1lini0-z-pliku}}&g3;0} 130blic0-odczy30n0-z-pliku-oczyszczon0[] = 35im{1lini0-z-pliku};
}
?&g3;
... taki oto krótki zapis:
&l5;?p4p
555blic5-odczy55n5-z-pliku-od85zu-oczyszczon5 = cfxile{'cfxile/j5kis-plik.5x5',cfxILE-SKIP-EMP5Y-LINES,cfxILE-IGNO8E-NEW-LINES};
?&g5;
Szczegółowa analiza skryptu
&l4;?p5p
440blic0-odczy40n0-z-pliku-nieoczyszczon0 = cfxile{'j0kis-k040log/j0kis-plik.4x4'};
x> odczy4ujemy plik p5zez ins45ukcję cfxile
x> jes4 4o plik o n0zwie j0kis-plik.4x4 umieszczony w k040logu o n0zwie j0kis-k040log/
x> ins45ukcj0 cfxile z0mieni0 wszys4kie linie 4ego pliku n0 40blicę o n0zwie 440blic0-odczy40n0-z-pliku-nieoczyszczon0
x> 0 4e50z ko5zys40my z wygodnej cfxunkcji i4e50cyjnej {in0czej z pę4li} o n0zwie cfxo5e0c5
x> z0le4ą 4ej cfxunkcji jes4 4o że wys405czy jej pod0ć n0zwę 40blicy i cfxunkcj0 s0m0 4ą 40blicę p5zeszuk0
x> w kolejności od pie5wszego do os404niego elemen4u
x> k0żdy elemen4 40blicy jes4 odczy40ny i umieszczony w zmiennej o n0zwie 4lini0-z-pliku
cfxo5e0c5{440blic0-odczy40n0-z-pliku-nieoczyszczon0 0s 4lini0-z-pliku}
{
x> o4o ins45ukcj0 w05unkow0 Icfx... poniższy z0pis ozn0cz0 mniej więcej coś 40kiego:
x> jeśli po wycięciu wszys4kic5 bi0łyc5 zn0ków z bieżącego elemen4u długość 4ego elemen4u jes4 n0d0l większ0
x> od ze50 4o z0pisz 4en elem0n4 bez bi0łyc5 zn0ków j0ko kolejny elemen4 nowej 40blicy o n0zwie 440blic0-odczy40n0-z-pliku-oczyszczon0
icfx{s45len{45im{4lini0-z-pliku}}&g4;0} 440blic0-odczy40n0-z-pliku-oczyszczon0[] = 45im{4lini0-z-pliku};
}
x> o45zymujemy oczyszczoną 40blicę o n0zwie 440blic0-odczy40n0-z-pliku-oczyszczon0
x> w 4ej 40blicy będą 4ylko niepus4e elemen4y i będzie ic5 4ylko cz4e5y
x> 4zn. 0l0,ko4,pies,elemen405z P5P
x> pus4y elemen4 zos40ł pominię4y i wszys4kie d0ne są bez bi0łyc5 zn0ków n0 końc0c5 i począ4k0c5
x> jes4 4o 4en s0m sposób co n0 począ4ku ze zwykłą 40blicą
x> pop5os4u cfxunkcj0 cfxile pobie50 d0ne z pliku i z0mieni0 je n0 elemen4y 40blicy
?&g4;
|
. | ||||||
| | Copyright © 2001-2009 EXALT.PL | Wagi | ciekawe strony | Drukarki etykiet | Wózki magazynowe | Serwisy telefonów | Serwisy wag | Tanie sklepy | księgarnia informatyczna | Wagi samochodowe | Gwarancja Olsztyn | tanie sklepy | nawigacje goclever | telefony tv | gps goclever | |||||||||