Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> problem z plikiem textowym
miszqa
post
Post #1





Grupa: Zarejestrowani
Postów: 168
Pomógł: 0
Dołączył: 15.01.2004
Skąd: Suwalki/Poznan

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
hawk
post
Post #2





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


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ć.
Go to the top of the page
+Quote Post
miszqa
post
Post #3





Grupa: Zarejestrowani
Postów: 168
Pomógł: 0
Dołączył: 15.01.2004
Skąd: Suwalki/Poznan

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
hawk
post
Post #4





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

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


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ć?
Go to the top of the page
+Quote Post
miszqa
post
Post #5





Grupa: Zarejestrowani
Postów: 168
Pomógł: 0
Dołączył: 15.01.2004
Skąd: Suwalki/Poznan

Ostrzeżenie: (10%)
X----


hawk
a moglbys jasniej to opisac?(IMG:http://forum.php.pl/style_emoticons/default/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

Ten post edytował miszqa 31.07.2004, 14:24:33
Go to the top of the page
+Quote Post
rogrog
post
Post #6





Grupa: Zarejestrowani
Postów: 602
Pomógł: 1
Dołączył: 3.04.2004
Skąd: Trójmiasto (Gdańsk)

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


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
Go to the top of the page
+Quote Post
miszqa
post
Post #7





Grupa: Zarejestrowani
Postów: 168
Pomógł: 0
Dołączył: 15.01.2004
Skąd: Suwalki/Poznan

Ostrzeżenie: (10%)
X----


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 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ?
Go to the top of the page
+Quote Post
rogrog
post
Post #8





Grupa: Zarejestrowani
Postów: 602
Pomógł: 1
Dołączył: 3.04.2004
Skąd: Trójmiasto (Gdańsk)

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


o wlasnie o to mi chodzi żeby pominac biezaca date, a pobierac tylko numer aktualnego tygodnia

Ten post edytował rogrog 31.07.2004, 15:27:51
Go to the top of the page
+Quote Post
miszqa
post
Post #9





Grupa: Zarejestrowani
Postów: 168
Pomógł: 0
Dołączył: 15.01.2004
Skąd: Suwalki/Poznan

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 17:55