Pokaż wyniki 1 do 2 z 2

Temat: [Perl]wyciaganie tekstu z pliku

  1. #1

    Domyślnie [Perl]wyciaganie tekstu z pliku

    Witajcie!
    Mam plik z danymi postaci:
    <UCZEN nazwisko="LLL" nazwisko_rodowe="" imie="Dominik" imie2="Marcin" plec="męska" data_ur="1999-01-10" msc_ur="Bydgoszcz" msc_ur_m="Bydgoszczy" woj_ur="KUJAWSKO-POMORSKIE" kraj_ur="Polska" pesel="111"
    <ADRES_U ktg="" miejscowosc="Torun" msc_m="Torun" ulica="R" nr_domu="1" nr_lok="4" kod="85-000" poczta="Torun" gmina="Torun" powiat="Bydgoszcz" woj="KUJAWSKO-POMORSKIE" kraj="Polska" e_mail="" />

    itd.

    Chciałabym wyciagnac z tego pliku tylko imie, nazwisko, ulice, nr_domu i nr_lok.

    W tym celu probuje napisac skrypt, na poczatku chce wyciagnac tylko imie:
    Kod:
    #!/usr/bin/perl
    
    use strict;
    
    open my $fh, '<', 'dane.txt' or die "open: $!";
    chomp(my @data1 = <$fh>);
    close($fh);
    
    
    my  @x = grep {
        my $v=$_;
        $v =~ m/imie=.*/;
             
    } @data1;
    
    print @x;
    Jednakze wyswietla mi wszystkie linie, ktore zawieraja imie.

    Probowalam rowniez w taki sposob:
    Kod:
    #!/usr/bin/perl
    
    use strict;
    
    my @dane;
    
    open my $fh, '<', 'eksport_sou.xml' or die "open: $!";
    chomp(my @data1 = <$fh>);
    close($fh);
    
     my @tab = split/ /;
    
    foreach (@tab){
     my $v =~/imie=.*/;
     push (@dane,$v);
    }
     print @dane;
    Jednakze w tej sytuacji nic nie jest wyswietlane.

    Czy moglabym prosic o wskazowki jak poprawnie to powinnam uczynic?
    Ostatnio edytowane przez Gosik : 03-03-2013 - 16:49

  2. #2
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Pierwszy przyklad robi dokladnie to co podalas ze ma robic. Drugi tak samo...
    Jesli chcesz zlapac dopasowany tekst to musisz zrobic zlapac go w nawiasach i bedzie wtedy wpisany do zmiennej $1, $2, itd... poza tym regex masz w postaci .* czyli dopasuj od pierwszego pasujacego znaku do konca linii, wiec nie masz szans zlapac pozostalych wartosci w ten sposob - muisz uzyc .*? i podac dalej jeszcze jeden znak ktory jest ograniczeniem ciagu dopasowujacego.

    Proste rozwiazanie uzywajace malej sztuczki - jesli przypisujesz tablice do hash'a do masz takie cos:

    Kod:
    #!/usr/bin/perl
    use strict;
    use warnings;
    use Data::Dumper;
    
    my @tab = ('k1','v1','k2','v2');
    my %hash = @tab;
    print Dumper \%hash;
    ... zwraca ...

    Kod:
    $VAR1 = {
              'k2' => 'v2',
              'k1' => 'v1'
            };
    Jelsi wiec biorac Twoj tekst dopasujemy nazwe zmiennej i jej wartosc i wpiszemy jako kolejne elementy tablicy na zasadzie jak wyzej, to pozniej mozemy to przepisac na hash i miec latwy dostep do zmiennych.

    Kod:
    #!/usr/bin/perl
    use strict;
    use warnings;
    use Data::Dumper;
    
    my @dane;
    while (<DATA>) {
            my @tmp = m/\s+(\S+)="(.*?)"\s+/mg;
            push @dane, @tmp;
    }
    my %uczen = @dane;
    print Dumper \%uczen;
    
    __DATA__
    <UCZEN nazwisko="LLL" nazwisko_rodowe="" imie="Dominik" imie2="Marcin" plec="męska" data_ur="1999-01-10" msc_ur="Bydgoszcz" msc_ur_m="Bydgoszczy" woj_ur="KUJAWSKO-POMORSKIE" kraj_ur="Polska" pesel="111"
    <ADRES_U ktg="" miejscowosc="Torun" msc_m="Torun" ulica="R" nr_domu="1" nr_lok="4" kod="85-000" poczta="Torun" gmina="Torun" powiat="Bydgoszcz" woj="KUJAWSKO-POMORSKIE" kraj="Polska" e_mail="" />
    zwraca

    Kod:
    $VAR1 = {
              'e_mail' => '',
              'plec' => 'męska',
              'gmina' => 'Torun',
              'msc_m' => 'Torun',
              'kod' => '85-000',
              'nr_domu' => '1',
              'nazwisko' => 'LLL',
              'imie' => 'Dominik',
              'msc_ur' => 'Bydgoszcz',
              'woj' => 'KUJAWSKO-POMORSKIE',
              'woj_ur' => 'KUJAWSKO-POMORSKIE',
              'pesel' => '111',
              'ktg' => ''
            };
    Pamietaj tylko ze podalas urwane linie w przyjladzie
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj