Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]czytanie z pliku
piasekps
post
Post #1





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 26.03.2007

Ostrzeżenie: (0%)
-----


czesc

mam problem z czytaniem z plika textowego.
mianowicie zapisuje sobie do pliku wartosci oddzielone |
wczytuje je w za pomoca file i zliczajac kolejne linie rozdzielam
wartosci odseparowane |, wszystko dziala ok dopuki
nie pojawi sie nowa linia w danych wtedy 'szablon' sie rozwala
i zamiast wszystkich informacji w jednej linii rozwala mi sie na kilka
np. tak : 15|maj|karol jest u cioci
a ciocia jest u nas|15:16

normalnie w linii powinny byc 4 zmienne (oddzielone |)
a tak pojawiaja sie te zmienne w 2 liniach/wiecej

pomyslalem ze fajnie by bylo gdyby dalo sie czytac wartosc
pliku w sposob jaki jest dostepny w pythonie czyli: plik[poczatek:koniec]
i wtedy wycina mi tresc od 'poczatek' az do 'koniec'
wiem ze funkcja fread, pozwala czytac jakas dlugosc pliku ale czy da sie
w niej ustawic aby czytala od ktoregos znaku np od 20

jesli w jakiejs zmiennej wystepuje nowa linia aby sie pojawila rowniez po odczytaniu
mam nadzieje ze udalo mi sie to jakos wytlumaczyc
da sie cos takiego zrobic w php a moze da sie to zrobic jesce inaczej

pozdrawiam
p.s.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
brzuchalski
post
Post #2





Grupa: Zarejestrowani
Postów: 9
Pomógł: 1
Dołączył: 2.01.2008

Ostrzeżenie: (0%)
-----


najprościej:
  1. <?php
  2. preg_match_all('/(^|*)|([^|]*)|([^|]*)|([^|]*)/s', file_get_contents('plik.txt'), $wynik, PREG_SET_ORDER);
  3. print_r($wynik);
  4. ?>

to tak, a lepiej:
  1. <?php
  2. preg_match_all('/([0-9]{1,2}:[0-9]{1,2}s{1}[0-9]{1,2}-[0-9]{1,2}-[0-9]{4}|([^|]*)|([^|]*)|([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})/s', file_get_contents('plik.txt'), $wynik, PREG_SET_ORDER);
  3. print_r($wynik);
  4. ?>

to czytaj tak wyrazenie regularne=(1-2cyfry ":" 1-2cyfry 1"spacja" 1-2cyfry "-" 1-2cyfry "-" 4cyfry | wszystko co nie "|" | wszystko co nie "|" | 1-3cyfry "kropka" 1-3cyfry "kropka" 1-3cyfry "kropka" 1-3cyfry),
ale pierwszy sposob powinien bez problemu pojsc tyle ze nie ma takiej kontroli nad danymi

inny wogole sposob na:
  1. <?php
  2. $tmp[] = array($czas, $autor, $comment, $serwer);
  3. $tmp[] = array($czas, $autor, $comment, $serwer);
  4. $tmp[] = array($czas, $autor, $comment, $serwer);
  5.  
  6. //zapisanie do pliku zamiast tekstu to zapisuj tekst jaki powstaje 
  7. $tmp = serialize($tmp);
  8.  
  9. //a potem czytaj
  10.  
  11. $tmp = unserialize(file_get_contents('plik.txt'));
  12. print_r($tmp); //tablica
  13.  
  14. ?>


Ten post edytował brzuchalski 3.01.2008, 20:10:29
Go to the top of the page
+Quote Post
piasekps
post
Post #3





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 26.03.2007

Ostrzeżenie: (0%)
-----


w przykladzie pierwszym wyskakuje taki komunikat
  1. <?php
  2. Warning: preg_match_all() [function.preg-match-all]: Compilation failed: nothing to repeat at offset 3 in /var/www/skrypty/main1.php on line 344
  3. ?>

w tejze linii znajduje sie :
  1. <?php
  2. preg_match_all('/(^|*)|([^|]*)|([^|]*)|([^|]*)/s', file_get_contents('plik.txt'), $wynik, PREG_SET_ORDER);
  3. ?>


drugi przyklad:

  1. <?php
  2. Warning: preg_match_all() [function.preg-match-all]: Compilation failed: missing ) at offset 124 in /var/www/skrypty/main1.php on line 344
  3. ?>


  1. <?php
  2. preg_match_all('/([0-9]{1,2}:[0-9]{1,2}s{1}[0-9]{1,2}-[0-9]{1,2}-[0-9]{4}|([^|]*)|([^|]*)|([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})/s', file_get_contents('plik.txt'), $wynik, PREG_SET_ORDER);
  3. ?>


czy tutaj nie powinno byc tak? aby uwydatnic co dodalem dam kilka spacji
  1. <?php
  2. preg_match_all('/([0-9]{1,2}:[0-9]{1,2}s{1}[0-9]{1,2} . [0-9]{1,2} . [0-9]{4} *)| ([^|]*)|([^|]*)|([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3} *) /s', file_get_contents('plik.txt'), $wynik, PREG_SET_ORDER);
  3. ?>


w trzecim przykladzie
jesli wystepuje w zmiennej $comment tresc z kilkoma liniami to po odczytaniu
wszystko jest w jednej linii, i po dopisaniu nowego rekordu nie da sie go odczytac

mam jesce jedno pytanie:
  1. <div class="comments">
  2. <div class="c1">
  3.  <form action="skrypt.php" method="post">
  4. <b>Autor:</b> 
  5. <input type="text" name="autor" size="15" class="in2"><br />
  6. <textarea name="komentarz" rows="5" cols="60" class="in2"></textarea>
  7. <?php  
  8. echo '<input type="hidden" name="p" value="'.$self.'">';
  9. echo '<input type="hidden" name="d" value="'.$dir.'">'; 
  10. echo '<input type="hidden" name="n" value="'.$nr.'">';
  11. ?>  
  12. <div class="in1">
  13.  <input type="submit" value="Dodaj">
  14. </div>
  15.  </form>
  16. </div>


wykorzystuje ten kod do pobrania komentarza i wysalania go do skryptu.php
gdzienastepnie jest zapisywany, ale po nacisnieciu przycisku Dodaj strona przeladowywuje
sie na pusta strone, moje pytanie gdzie i co powinienem zmienic zeby po nacisnieciu Dodaj
wrocilo spowrotem na strone z ktorej zostalo wyslane,
druga sprawa to czy mozna jakos w zrodle ukryc czesc kodu (chodzi o inputy, hidden)
nie chcialbym aby jakies wiadomosci/dane zostaly wyswietlane

dzieki wielkie

Ten post edytował piasekps 4.01.2008, 10:23:36
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.10.2025 - 23:06