![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 176 Pomógł: 18 Dołączył: 5.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Stanąłem przed problemem wczytania pliku z bilingiem telefonicznym. Na późniejszym etapie będę wrzucał to do bazy, ale z tym to nie ma żadnego problemu, natomiast nie wiem jak w ogóle się do tego zabrać. Plik bilingu ma straszną strukturę. Przykładowy plik bilingu Takich stron może być kilkanaście. Oddzielone są od siebie liniami ze znaku "-" W kolumnie połączenie mogą być inne wpisy niż "lokalne" (ale to już nie jest istotne) Nie będę się rozpisywał co musi być w skrypcie, aby później wczytać to do bazy. Proszę o wskazówki. Pozdrawiam |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
No coż, bez wyrażeń się raczej nie obejdzie.
Wydaje mi się, że najlepiej najpierw rozbić plik na konkretne bilingi. Skoro rodzielone one będą --------- to użyć do tego można preg_split() Mając już konkretny biling, pobierać informacje z niego będziesz przy pomocy preg_match(). -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 590 Pomógł: 107 Dołączył: 25.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Etam, od razu "rozbijać". Zakładam, że interesują nas TYLKO rozmowy. A wszystkie rozmowy (i tylko rozmowy, bez podsumowań pokaże jeden preg_match na [0-9\ ][0-9]:[0-9][0-9]:[0-9][0-9] (uwaga na dołożoną spację w pierwszych []
![]() Potem tylko rozbić na pola (ciut więcej zabawy będzie z czasem) i wrzucać do bazy. Oczywiście nagiąłem założenie: powinien nas interesować także numer telefonu, z którego te rozmowy zostały przeprowadzone: zakładam, że to jest to wyiksowane pole tuż przed zestawieniem. Tu wystarczy nawet explode. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 176 Pomógł: 18 Dołączył: 5.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Póki co napisałem
Kod jest z moimi tekstami, które może sa prozaiczne, ale lubię prostotę ![]() Ładnie dzieli mi na odpowiednie komórki, które później będą dodawane do bazy. Cytat Etam, od razu "rozbijać". Zakładam, że interesują nas TYLKO rozmowy Generalnie chodzi mi o wszystkie dane zawarte w pliku Dziękuje za zainteresowanie. Temat dalej będzie kontynuowany. Pozdrawiam |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 307 Pomógł: 37 Dołączył: 9.11.2010 Skąd: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Tak może być ? Kod jest zrobiony 'na kolanie', na pewno można to zrobic jeszcze tysiąc razy lepiej i pewnie zawiera jeszcze 500 błędów ale działa
![]() EFEKT: ![]() KOD:
Ten post edytował Uriziel01 1.12.2011, 10:49:06 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 590 Pomógł: 107 Dołączył: 25.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Potestuj wyrażenia regularne - to skraca kod:
Starałem się intuicyjnie nazywać zmienne. Potestuj. |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 176 Pomógł: 18 Dołączył: 5.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuje Wam wszystkim.
Cóż, dostałem gotowca i się z tego cieszę, aczkolwiek teraz muszę zrozumieć wyrażenia regularne. Lektura z internetu jest troszkę chaotyczna i jak na moje lata mało zrozumiała. Dziękuję jeszcze raz za zainteresowanie i odwdzięczam się jak tylko mogę. --- EDIT --- Zauważyłem jeden problem w wyrażeniu regularnym, które napisał @abort. (chłopak nie wiedział, że taka może być sytuacja - w załączonym pliku tego nie ma) Przy typie połączenia (w pliku mogą być wpisy: "lokalne","KRAKÓW","PLUS GSM", itp.) nie wczytuje połączeń, gdzie typ składa się z dwóch członów, czyli z trzech przytoczonych przykładów wczyta dwa pierwsze wiersze, a pominie "PLUS GSM". Dzisiaj już siły mi brak, ale jutro siądę nad tym i będę mógł przy okazji poćwiczyć to czego się uczyłem od wczoraj. Pozdrawiam ---- EDIT ---- Siedzę nad wyrażeniem i przerobiłem to co napisał @abort
wczytuje mi już dwuczłonowe typy połączeń jednak coś pomija. Podpinam do wczytania plik, na którego końcu jest podsumowanie, gdzie napisano, że abonent wykonał 695 połączeń, a mój preg_match wczytuje mi 647. Proszę o pomoc z tym wyrażeniem. Ten post edytował pianta_d 2.12.2011, 19:53:44 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
na pewno Ci pomija "KRAKÓW" gdyż nie widzę polskich znaków w zestawie znaków...
co do wyrażeń regularnych jest wiele dobrych stron (także manual PHP)... z polskich artykułów co na szybko przychodzi mi do głowy i nie jest najgorszy to: Wyrażenia regularne PCRE w PHP Tutorial - w nowej wersji PHP dodali jeszcze kilka w sumie zbędnych szczegółów... -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 590 Pomógł: 107 Dołączył: 25.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
Zamiast (\w+) daj coś, co zadziała dla dwóch wyrazów:
Kod (\w+(\s{1}\w+){0,1}) Tylko indeksy Ci się rozjadą, użyj:
Nie ma indeksu "$match[5]". A precyzyjniej: jest, ale nie do końca pokazuje to, co chcesz. A co pokazuje? Sprawdź, zapewne dojdziesz, dlaczego. P.S. W "([0-9x\ \(\)]+)" usuń znak "x" - on był po to, by łapać Twoje wyiksowane (zaciemnione) numery - normalnie tam powinny być cyfry, spacje i nawiasy, iksa tam nie będzie chyba nigdy. Ten post edytował abort 3.12.2011, 00:02:05 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 07:09 |