Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] porownywanie lini z pliku
Forum PHP.pl > Forum > Przedszkole
Chumber
Interesuje mnie funkcja lub argorytm, ktory bedzie porownywal linie w pliku czy sa takie same.
strife
Cytat
Interesuje mnie funkcja lub argorytm, ktory bedzie porownywal linie w pliku czy sa takie same.


Takie same względem czego ? Czy linie są takie same w dwóch odzielnych plikach, możesz sprawdzić za pomocą pętli i warunku ( foreach, if ). Napisz coś więcej.
Chumber
Racja, nie sprecyzowalem problemu. Chodzi o porowannie liczb, np. 1234567, a w nastepnej linie bedzie 1234215. Ma sprawdzic czy liczby sie nie powielaja.
strife
Cytat(Chumber @ 12.06.2007, 17:44:46 ) *
Racja, nie sprecyzowalem problemu. Chodzi o porowannie liczb, np. 1234567, a w nastepnej linie bedzie 1234215. Ma sprawdzic czy liczby sie nie powielaja.


Chyba liczby ? (nie doczytałem)

  1. <?php
  2. $file = file('file.txt');
  3.  
  4. if ( trim($file[0]) == trim($file[1]) ) {
  5. echo 'Liczby sa takie same';
  6. } else {
  7. echo 'Liczby nie sa takie same';
  8. }
  9. ?>


Użyty plik:

Kod
1234567
1234567


Kod
Liczby sa takie same


O to Ci chodzi ?
Chumber
Liczba 0 lub 1 w tym przypadku: $file[0] mowi o numerze lini w pliku? Czyli by sprawdzal caly plik jedna linie po drugiej, wystarczy dac petle do konca pliku?
Kicok
1. Utwórz sobie jakąś tablicę, np: $liczby = array();
2. Odczytaj plik linijka po linijce
3. W pętli potraktuj każdą linijkę funkcją trim" title="Zobacz w manualu PHP" target="_manual, żeby usunąć znaki końca wiersza
4. Sprawdź, czy właśnie odczytana linijka znajduje się już w tablicy $liczby (in_array" title="Zobacz w manualu PHP" target="_manual)
>> 4a. Jeśli tak, to ta liczba się "powtarza"
>> 4b. Jeśli nie, to dopisz tą liczbę do tablicy $liczby
strife
Cytat(Chumber @ 12.06.2007, 18:00:28 ) *
Liczba 0 lub 1 w tym przypadku: $file[0] mowi o numerze lini w pliku?


Dokładnie.

Cytat(Chumber @ 12.06.2007, 18:00:28 ) *
Czyli by sprawdzal caly plik jedna linie po drugiej, wystarczy dac petle do konca pliku?


Ale nadal czegoś nie rozumiem, ma sprawdzać pierwszą liczbę czy w dalszych linijek się ona nie powiela tak, dobrze rozumiem? W każdym bądź razie musisz użyć do tego pętli, jakby nie było proponuje tutaj zastosowanie foreach" title="Zobacz w manualu PHP" target="_manual i przy warunek, aby przy każdej iteracji spradzał czy dana linijka jest taka sama jak ta pierwsza/wyznaczona.

  1. <?php
  2.  
  3. $file = file('file.txt');
  4. $rootVar = trim($file[0]);
  5.  
  6. array_shift($file);
  7.  
  8. $searchVars = array();
  9.  
  10. foreach( $file as $k => $v ) {
  11. if ( trim($v) == $rootVar ) {
  12.  
  13. // dodajemy poniewaz + 2
  14. // - pierwsza wartosc zostala wykasowana
  15. // - klucze zaczynaja sie od zera
  16.  
  17. $searchVars[] = $k + 2;
  18. }
  19. }
  20. if ( ! empty( $searchVars )) {
  21. echo 'Podana liczba <b>' . $rootVar . '</b>, wystepuje w linijkach: ';
  22. $implodeSearch = implode(', ', $searchVars);
  23. echo $implodeSearch;
  24. } else {
  25. echo 'Podana liczba wystepuje tylko raz na poczatku pliku';
  26. }
  27.  
  28.  
  29. ?>


Użyty plik:

Kod
1234567
1234560
1234566
1234565
1234564
1234567
1234565
1234567
1234567


Kod
Wynik: Podana liczba 1234567, wystepuje w linijkach: 6, 8, 9
Chumber
Dzieki za pomoc! W sumie to chodzi o to ze bedzie to lista ulozona w kolejnosci rosnacej i bedize sprawdzac czy kazda nastepna jest inna niz poprzednia.

np.

12345
12346
12347
12347
12348

i w tym wypadku wyskoczy komunikat ze 12347 juz wystepuje i wywale ta liczbe.

Ale wydaje mi sie ze juz dojde do tego smile.gif
webdice
A nie lepiej użyć bazy danych? Oczywiście jak masz do niej dostęp.
Chumber
Bazy danych beda zbedne. Problem ten rozwiaze na plikach. To powinno wystarczyc
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.