Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Skrypt do przetworzenia pliku tekstowego
Forum PHP.pl > Forum > Przedszkole
fizzlebubble
Witajcie,
Potrzebuję napisać skrypt, który odczytywałby podany plik linia po linii i dane, w tym przypadku adresy e-mail, zapisywał do innego pliku wyjściowego, ale jako że dopiero raczkuję w tematyce PHP nie za bardzo wiem jak się za to zabrać. Przypuszczam, że nie obejdzie się bez wykorzystania wyrażenia regularnego, ale dalej to już nie mam pojęcia sad.gif. Byłbym bardzo wdzięczny za podpowiedzi dotyczące wymaganych funkcji!

Dzięki z góry,
Oskar
Kshyhoo
Wszystkie materiały można znaleźć w Google. Przykład czytania pliku tekstowego linia po linii w pętli:
  1. $uchwyt = @fopen("plik.txt", "r");
  2. if ($uchwyt) {
  3. while (($bufor = fgets($uchwyt, 4096)) !== false) {
  4. // tu obróbka pliku
  5. }
  6. if (!feof($uchwyt)) {
  7. echo "Błąd: niespodziewany błąd fgets()\n";
  8. }
  9. fclose($uchwyt);
  10. }

Wyrażenie regularne np.:
  1. preg_match_all("/[-a-z0-9\._]+@[-a-z0-9\._]+\.[a-z]{2,4}/", file_get_contents('szukajEmail.txt'), $emails, PREG_OFFSET_CAPTURE);

Ponowny zapis w pliku:
  1. $f = fopen('plik2.txt', 'a');
  2. fputs($f, $data);
  3. fclose($f);
  4. continue;

Oczywiści też najlepiej w pętli...
ethann
Nie do końca rozumiem czy każda linia to adres e-mail, no ale jeśli tak to żadnego problemu nie ma i obejdzie się bez regexp'ów.
file - ta funkcja zwróci Ci dany plik jako tablicę - każda linia to osobny element tablicy. A do usunięcia z każdego adresu zbędnych znaków białych z początku i z końca może posłużyć trim.
aby zapisać dane do pliku możesz skorzystać np z funkcji file_put_contents.

Możesz także wczytać plik przy pomocy file_get_contents, a następnie posłużyć się funkcją explode, która rozdzieli treść pliku po znakach końca linii "\n". Także otrzymasz tablicę, gdzie każdy element to osobna linia.
fizzlebubble
Dziękuję za powyższe rady, przyznam że nie spodziewałem się tak szybkiej pomocy smile.gif. Problem polega na tym, że pożądana treść wymieszana jest z różnym "śmieciem". Myślę, że już powinienem spokojnie dać sobie radę, na koniec zamieszczę swoje wypociny do Waszej oceny.

Przysiadłem dzisiaj i naskrobałem coś takiego:
  1. $plik = file('1.html');
  2. foreach ($plik as $line_num => $line) {
  3.  
  4. if (preg_match_all("/[-a-z0-9\._]+@[-a-z0-9\._]+\.[a-z]{2,4}/", htmlspecialchars($line), $matches)) {
  5. }


Teraz mam problem, ponieważ $matches jest wielowymiarową tablicą o budowie:
  1. Array
  2. (
  3. [0] => Array
  4. (
  5. [0] => email@wp.pl
  6. )
  7.  
  8. )

i tak każdy kolejny. W jaki sposób mogę wyłuskać sam adres i zapisać go do pliku? Każda tablica zawiera te same indeksy, czyli w tym przypadku [0][0].

Ktokolwiek? Proszę, jestem w kropce sad.gif.
Kshyhoo
No to przypisz element tablicy do zmiennej a zmienną zapisz (zresztą i sam element tablicy możesz zapisać).
if (ble, ble) {
// tu operacje wyłuskania i zapisania.
}

  1. <?php
  2.  
  3. preg_match_all("/[-a-z0-9\._]+@[-a-z0-9\._]+\.[a-z]{2,4}/", file_get_contents('szukajEmail.txt'), $emails, PREG_OFFSET_CAPTURE);
  4. $emails = $emails[0];
  5.  
  6. $output = '';
  7. foreach($emails as $email) {
  8. $output .= $email[0]."\r\n";
  9.  
  10. $f = fopen('email.txt', 'a');
  11. fputs($f, $output);
  12. fclose($f);
  13. continue;
  14.  
  15. //echo $output;
  16. }
  17.  
  18. ?>
fizzlebubble
Jesteś genialny, dziękuję bardzo!
Kshyhoo
Cytat(haerde @ 16.04.2012, 22:14:52 ) *
Jesteś genialny, dziękuję bardzo!

Ale mnie miłe połechtałeś, ja genialny Lkingsmiley.png
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.