Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z plikiem textowym
Forum PHP.pl > Forum > PHP
miszqa
Witam!!!
Problem wyglada nastepujaco
Mam plik tak wygladajacy
...
data | data1 | nazwa | telefon
data | data1 | nazwa | telefon
...

I teraz chce zrobic cos takiego
pobrac informacje z pliku w ten sposob:
dzisiaj jest jakis dzien wiec pobieram tresc z przedzialu "data" i "data1". i ja wyswietlam jesli znajdzie taki przedzial
czyli np dzis jest
30.07.2004
a w pliku mam cos takiego
...
20.03.2004 | 29.07.2004 | aaa | 12345
30.07.2004 | 29.11.2004 | ccc | 1234
...

czyli porownuje daty wiec powinno mi wyswietlic informacje "ccc" i "1234"
tylko nie wiem jak to zrobic? czy ktos moze mi w tym pomoc?

dzieki bardzo
hawk
Wczytywać dane z pliku linia po linii (chyba fgets), rozbić stringa (explode), zamienić na timestamp i potem tylko porównywanie intów. Nie jest to zbyt optymalne wydajnościowo ale działa.

Optymalizacja 1: rozważ umieszczanie w pliku timestampów zamiast dat. Chyba że same daty są ci potrzebne do czegoś innego. To może trzymać jedno i drugie?

Optymalizacja 2: gdyby wszystkie linie w pliku były tej samej długości, mógłbyś zastosować szukanie binarne/interpolacyjne. Zwłaszcza jeżeli przedziały są mniej więcej równomiernie rozłożone.

Wszystko zależy od wielkości pliku. Dla kilkudziesięciu linii pewnie nie warto się męczyć.
miszqa
ale tu bedzie tylko 52x4 danych
bo to chodzi o tygodnie w roku + informacje o adresie i numerze telefonu.

a daty mi sie przydadza do dalszego wykorzystania

i teraz pojawia sie problem jak zamienic format daty zapisany w ten sposob dd.mm.yyyy na timestampa ?

poza tym nie wiem nawet jak tego uzyc wiec jesli moglby ktos przykladzik podrzucic bede wdzieczny
hawk
Do zamiany na timestampa służy chyba funkcja strtotime. Ale mi się przykładu pisać nie chce, bo mi się generalnie nie chce pisać przykładów, więc pewnie musisz sobie sam sprawdzić w manualu i sklecić.

A przy 52 rekordach to oczywiście nie ma sensu bawić się w optymalizację.

Natomiast jeżeli to mają być konkretnie tygodnie w roku, to może da się mając datę wyznaczyć tydzień i skoczyć bezpośrednio do właściwej linii zamiast sprawdzać?
miszqa
hawk
a moglbys jasniej to opisac?questionmark.gif bo jakos nie moge zczzaic o co biega?

Moze macie inne pomysly bo ja myslalem aby date rozbijac na dwie czesci i sprawdzac miesiac i dzien i porownywac tylko jeszcze nie wiem jak zrobic przeszukiwanie wszystkich rekordow.

  1. <?php
  2.  
  3. $row = 1; 
  4. $fp = fopen (&#092;"plik.txt\",\"r\");
  5. while ($data = fgetcsv ($fp, 4096, &#092;"|\")) {
  6. $idx[$row]=$data[0]; 
  7. $data_od[$row]=$data[1]; 
  8. $data_do[$row]=$data[2]; 
  9. $nazwa[$row]=$data[3];
  10. $telefon[$row]=$data[4]; 
  11. $row++; 
  12. } 
  13. fclose ($fp);
  14. $l=$row-1; 
  15. $k=$row-$row; 
  16. for ($numer_wpisu = $l; $numer_wpisu > k; $numer_wpisu--) {
  17. echo &#092;"<table width=500 align=\"center\\">\";
  18. echo &#092;"<tr><td>\";
  19. echo &#092;"<b>\".$idx[$numer_wpisu].\"-\".$data_od[$numer_wpisu].\"-\".$data_do[$numer_wpisu].\"</b> \".$nazwa[$numer_wpisu].\"-\".$telefon[$numer_wpisu];
  20. echo &#092;"</td></tr>\";
  21. }
  22. echo '</table>';
  23. echo '</body></html>';
  24.  
  25. ?>

i teraz nie wiem jak rozbic date z pliku na 3 czescie
wiem ze uzywa sie funkcji explode ale nie wiem jak to odniesc do tego rodzaju danej
bo probowalem napisac tak
$aaa = explode(".", $idx[$numer_wpisu]);
ale funkcja zwraca blad Array
rogrog
nie lepiej trzymać w takiej postaci??

Kod
tydzien | nazwa | telefon
tydzien | nazwa | telefon


albo wręcz

Kod
nazwa | telefon
nazwa | telefon

gdzie numer linii => numer tygodnia


masz 52 wiersze numerowane po tygodniu i potem

  1. <?php
  2. /* tutaj wczytujesz sobie jakos do tablicy, w ktorej numery tygodnia sa indeksami
  3. */
  4.  
  5. $numer_tygodnia = strftime('%U');
  6. echo $tablica[$numer_tygodnia];
  7.  
  8. ?>


i po sprawie
miszqa
a mozesz to troszke rozjasnic i zastosowac do mojego przykladu bo nie za bardzo sie lapie
tym bardziej jak mam porownywac biezaca date z numerem tygodnia questionmark.gif?
rogrog
o wlasnie o to mi chodzi żeby pominac biezaca date, a pobierac tylko numer aktualnego tygodnia
miszqa
no tak tylko ze jest pewien problem potrzebuje jednak wyciagac date biezaca bo to jest podzielone w ten sposob
od srody do wtorku itd...
wiec... tygodnie odpadaja
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.