Perlben szövegfeldolgozás

Hali!

Egy viszonylag nagy logfájl-t szeretnék átírni egy másik programnak megfelelő formátumra. Ehhez úgygondolom perl a legmegfelelőbb nyelv. Találtam is sok függvényt ehhez, de jó részük csak a kereséssel foglalkozik - nekem ennél kicsit több kéne.Valami olyasmire lenne szükségem mint a PHP explode() függvénye, ami egy adott sztringnél szétvélasztja tömbökbe a sor tartalmát és így azt fel lehetne dolgozni.
Ami még érdekelne az esetleg doksi/könyv/tutor PERL-XML-ről, lehet hogy praktikus lenne minden féle logot XML-be konvertálni (v. adatbázisba feltolni?) és akkor nem lenne gond a sok különböző program által kenerált logokkal.

Köszi a helpet!

Hozzászólások

Ha nagyon nagy a file, azt nem szabad egyből memóriába tenni tömbként, mert kifekszik az egész. Rá kell cat-olni egy script-re, ami soronként feldolgozza.
Pl. ez a program minden sor elejére tesz egy sorszámot, a végére meg odaírja, "hogy Hurrá!":


#!/usr/bin/perl
$i =0;
foreach(<>) # iterálunk stdin sorain
{
  $i++;
  chomp; # sorvégi enter leszedése
  print "$i $_ Hurrá!\n"; # $_ változóban van a sor
}

Modjuk nem próbáltam ki, lehet benne hiba.

Azt az XML dolgot ugye nem mondtad komolyan?

man perlfunc, keresd meg a 'split' nevű függvényt, egy regexp szerint vágja a stringet, az eredményt tömbbe teszi.

Itt van egy kicsit eggyügyű példa az /etc/passwd file olvasására,
a profik biztosan meg tudnák oldani egy sorban is:


#!/usr/bin/perl -w
my $username = $ENV{'LOGNAME'};                               
my $emailname = "";                                           
                                                              
open (PWDFILE, "/etc/passwd") or die "Error opening file: $!";
while (< PWDFILE >) {                                           
  my @fields = split(":", $_);                                
  if ($fields[0] eq $username) {                              
    my @namefld = split(",",$fields[4]);                      
    if ($#namefld > -1) {$emailname = $namefld[0];}           
    else {$emailname = $username;}                            
  }                                                           
}                                                             
close(PWDFILE) or die "Error closing PWD file: $!";           

ELaci

Én vmiért nem rajongok az ilyen agyba-főbe zsúfolt perl-progikért, az utólagos javítás sokkal egyszerűbb egy lazább, többsoros kódban... szerintem! :]
Ez részben nyelv, részben ember függő is. Ha nem hibázik, akkor biztos praktikusabb a tömör nagyobb alkalmazások esetén.

Hi!

Ilyen volt regebben ASM-ben, meg sok-sok eve.
Coder-l lista. Sajnos en mar csak az archivumot olvastam, evek mulva, amikor egyebkent a lista mar halott volt. Ha jol remlik, akkor voltak csak a listan feladott feladatok is (a lista moderator/admin a SZIFen oktatott valami ASM-es targyat, es az ott feladott feladatot kellett minel kevesebb byte-ban megirni), illetve volt egy Hugi-Compo is, amirol rendszeresen beszaloltak a listan.

By(t)e
TBS::Antiemes

Köszi a válaszokat, a "split" fv-t kerestem, csak nem nagyon esett le, hogy ez az.

Az ikszemeles cuccot még átolvasgatom, meg még rendesen meg is kéne tanulni.