Pokaż wyniki 1 do 4 z 4

Temat: Perl - odczyt danych i zapis do pliku

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1

    Domyślnie Perl - odczyt danych i zapis do pliku

    Witam Wszystkich,

    mam takie zadanie do wykonania w Perlu i nie bardzo mogę sobie z nim poradzić, zapewne dlatego, że dopiero uczę się tego języka. Mianowicie muszę napisać skrypt, który rozbije plik tekstowy na dwa osobne pliki. Wymagania są takie:
    mam do dyspozycji plik txt z pewnymi danymi, które przyjmuje postać:
    <aaaaaabbbbbbbcccccc,
    aaaaabbbbbccccc
    aaaaabbbbbccccc
    aaa:12345:bbbb
    aaaaabbbbbccccc:><aaaaabbbbbccccc,
    aaaaabbbbbccccc
    bbb:6789:cccc
    aaaaabbbbbccccc:>

    muszę wyłuskać w pliku nr 12345 i 6789 i na ich podstawie zapisać bloki danych do osobnych plików txt. Charakterystyczne jest, że każdy blok zaczyna się znakiem "<" a i kończy ":>" Istotne jest, że blok danych jest zmiennej długości, może zawierać kilka a nawet kilkanaście wierszy.
    Będę wdzięczny za wszelkie podpowiedzi jak się do tego zabrać bo tak jak wspomniałem jestem laikiem w tej dziedzinie.

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

    Domyślnie

    A jak maja sie nazywac te pliki ktore tworzysz? Cos mi mowi ze to moze miec cos wspolnego z tymi numerami ale nie podales pelnych wymagan.

    Kod:
    @bloki = m/<(.*?):>/mg;
    i masz tablice zawierajaca wartosci kolejnych blokow - dlugosc bloku nie ma znaczenia, wazne tylko abys wczytal sobie caly plik wejsciowy do skalara jako jeden wiersz (dla ulatwienia)
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  3. #3

    Domyślnie

    Zgodnie z sugestią wrzuciłem sobie do tablicy zawartość bloków. Żeby zobaczyć jak wygląda tablica zapisałem dane do pliku, lecz nie bardzo wiem jak wczytać do skalara jako jedną linie a następni wyszukać ciąg znaków, który mnie interesuje.
    Skleciłem narazie tyle:
    Kod:
    #!usr/bin/perl
    use Data::Dumper;
    use strict;
    use warnings;
    
    my @tablica;
    open(FILE_1, 'c:\test\test.txt') || die ("Blad odczytu pliku!!!\n");
    open(FILE_2, '>c:\test\xxx.txt') || die ("Blad odczytu pliku!!!\n");
    while (<FILE_1>) {
       chomp;
       my @dane = split (m/{<(.*?):>/m);
       push @tablica,\@dane;
    }
    close(FILE_1);
    
    print FILE_2 Dumper \@tablica;
    close(FILE_2);

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

    Domyślnie

    Kod:
    my @dane = split (m/{<(.*?):>/m);
    Ta linia nie ma sensu... split i match z lapaniem wartosci?!

    Wczytujac w petli tak jak to robisz, wczytuj wszystko do jednego skalara, tzn z kazdej wczytanej robich chomp() i dopisujesz na koncu jendego skalara, w ten sposob dostajesz jeden dlugasny skalar z zawartoscia calego pliku wejsciowego. Wtedy wywalasz split i na tym wielkim skalarze robisz match - tak jak on jest zapisany dostaniesz tablice z wartosciami blokow, bez < i :> na koncach, dalej obrabiasz juz sobie pojedyncze komorki tablicy.
    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