Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [funkcja]Pobieranie danych z eksportu kontaktów z GG
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
Trobin
Dzisiaj potrzebowałem do swojego projektu takiej pierdółki jak wyciąganie z eksportu kontaktów Gadu - Gadu danych o kontakcie. Napisałem taką oto funkcję:
  1. <?php
  2. function fromGG($contact){
  3. $pattern='/;*(^[a-zA-ZźćśńąęłżŹĆŚŃĄĘŁŻ"'^[0-9]+)*;*(^[a-zA-ZźćśńąęłżŹĆŚŃĄĘŁŻ"'s*^[0-9]+)*;*([a-zA-ZźćśńąęłżŹĆŚŃĄĘŁŻ"'s*^[0-9]+)*;*([a-zA-ZźćśńąęłżŹĆŚŃĄĘŁŻ"'s*^[0-9]+)*;*(+48[0-9]+)*;*([a-zA-Zs*]+)*;*([0-9]+)*/';
  4. $contact=preg_match ($pattern, $contact, $contact_data);
  5. return $contact_data;
  6. }
  7. ?>

Funkcja zwraca w wyniku tablicę z określonymi danymi:
  1. <?php
  2. $contact_data['1'] //Imię
  3. $contact_data['2'] //Nazwisko
  4. $contact_data['3'] //Pseudo
  5. $contact_data['4'] //Nazwa wyświetlana
  6. $contact_data['5'] //Numer komórki
  7. $contact_data['6'] //Grupa do której należy kontakt
  8. $contact_data['7'] //Najważniejsze - numer Gadu - Gadu
  9. ?>

Przykład:
I.
Cytat
Imię;Nazwisko;Pseudo;Wyświetlanie;+480000;Grupa;5836987;email@wp.pl;0;;0;;0;1111

Tak wyeksportowany kontakt w wyniku da:
Cytat
Array (
[0] => Imię;Nazwisko;Pseudo;Wyświetlanie;+480000;Grupa;5836987;
[1] => Imię
[2] => Nazwisko
[3] => Pseudo
[4] => Wyświetlanie
[5] => +480000
[6] => Grupa
[7] => 5836987 )

II.
Bardzo często zdarza się tak, że w edycji kontaktu nie wpisujemy imienia bądź nazwiska. Taki kontakt:
Cytat
;;Pseudo;Wyświetlanie;+480000;Grupa;5836987;email@wp.pl;0;;0;;0;1111

Da w efekcie:
Cytat
Array (
[0] => ;;Pseudo;Wyświetlanie;+480000;Grupa;5836987
[1] =>
[2] =>
[3] => Pseudo
[4] => Wyświetlanie
[5] => +480000
[6] => Grupa
[7] => 5836987 )


ISTOTNE: numer telefonu MUSI rozpoczynać się od +48 - inaczej wzorzec dla numeru telefonu będzie pasował też dla numeru gg i kolejność się zmieni. W najbliższym czasie postaram się to dopracować.

Być może komuś się przyda smile.gif
klocu
Jak dla mnie to zawracanie kijem Wisły.
Parsujesz jeden kontakt i zaprzęgasz do tego prega. Można i tak, ale gdybym potrzebował sparsować cały plik zrobi się bałagan. (zamieniając preg_match na preg_match_all). A jeśli puścisz w pętli i trafisz na zapis wersji (linia pierwsza dla GG7) albo ignorowane kontakty?
Zmuszasz po części ludzi do formatowania danych w/g tego jak Twoja funkcja je sparsuje.
Działaj odwrotnie - to Ty dopasuj się do dziwactw wymyślanych przez ludzi.
Ja proponuje coś skleconego na szybko (czyli wersja 0.0.1 :]):
  1. <?php
  2. function gg_contact_list( $file ) {
  3.  
  4. if( !file_exists( $file ) ) return "brak pliku";
  5.  
  6. $return_array = array();
  7. $temp = explode( "r\n", implode( file( $file ) ) );
  8.  
  9. for( $i=0; $i<=count( $temp ); $i++ ) {
  10. $linia = explode( ";", $temp[$i] );
  11. if( $linia[6] and $linia[3] ) { $return_array[] = $linia; }
  12. $linia=null;
  13. }
  14.  
  15. return $return_array;
  16.  
  17. }
  18.  
  19. print_r( gg_contact_list( 'kontakty.txt' ));
  20.  
  21. ?>

Z drugiej strony, mógłbym powiedzieć że wkładanie do tablicy wynikowej pustych wpisów nie ma sensu ale, aby zachować strukturę parsowanych danych warto to zrobić.
Trobin
Jakie to piękne jak kilka czyiś linii kodu i to pisanych na szybko niszczy twoje kilkanaście... biggrin.gif
Docelowo to zamiast dawania tylko stringa miało być podawanie jako atrybutu pliku z kontaktami, puszczenie w pętle i wstawianie do bazy (w moim projekcie odbywa się to jednorazowo i to na localhoscie, więc wydajność nie jest dla mnie najważniejsza winksmiley.jpg ). Mówiąc szczerze to myślałem nad explode, ale jakoś nie mogłem tego zwizualizować i dlatego pomyślałem: wezmę preg i potraktuje to jako dobry moment na naukę wyrażeń regularnych winksmiley.jpg .
Cytat
Z drugiej strony, mógłbym powiedzieć że wkładanie do tablicy wynikowej pustych wpisów nie ma sensu ale, aby zachować strukturę parsowanych danych warto to zrobić.

W sumie masz rację smile.gif postaram się udoskonalić swoja "funkcję" i przedstawić wynik winksmiley.jpg .
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.