Pokaż wyniki 1 do 7 z 7

Temat: Tablice zmiennych (zielony)

  1. #1
    Zarejestrowany
    May 2007
    Skąd
    Elbląg
    Postów
    42

    Domyślnie Tablice zmiennych (zielony)

    Mam problem- próbuję nauczyć się perla i niestety jak przy c++ zatrzymałem sie na tablicach zmiennych :/ googlowałem ale znajdowałem tylko info jak deklarować... mógłby mi ktoś na przykładzie pokazać praktyczne zastosowanie tablic zmiennych? Wtedy mógłbym dalej sie uczyć perla.

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

    Domyślnie

    Co rozumiesz jako tablice zmiennych?
    AoA - array of arrays (tablice wielowymiarowe)
    AoH - Array of hashes
    HoA - Hash of arrays
    HoH - Hash of hashes

    ?

    W perlu mozesz sobie stworzyc dowolna strukture... Tworzenie robi sie bardzo prosto - zwyczajnie umieszczasz w tablicy jako kolejny element odwolanie (cos jak pointer w C) do zmiennej - niezaleznie od jej typu.

    Kod:
    my %ludziska = ( 'user1' => 'ala', 'user2' => 'ola', user3 => 'ula');
    my @pliki = ('raport.pdf', 'raport.doc', 'raport.txt');
    my $skalar = 'cokolwiek';
    my $skalar2 = 123456;
    Zmienne zadeklarowane - teraz czytamy:

    Kod:
    print "User1 to $ludziska{'user1'}\n";
    print "User1 to $ludziska{user1}\n";    # te 2 linie zwroca do tamo
    print "Plik 1 to $pliki[1]\n";   # czyli raport.doc - numeracja idzie od 0 nie od 1
    print "Skalar to $skalar a drugi to $skalar2\n";  # nie trzeba 
    #konwertowac liczb na stringi - perl sam wie co chcesz zrobic
    To teraz poskladajmy calosc w jedna tablice po kolei:

    Kod:
    my @smietnik = (\%ludziska, \@pliki, \$skalar, \$skalar2);
    Efekt jest taki, ze mamy tablice a w niej zebrane wszystkie inne struktury danych Mozemy sie teraz do tego odwolac tak:

    Kod:
    print "user1 to $smietnik[0]->{user1}";   # ala
    print "plik1 to $smietnik[1]->[1]";  # raport.doc
    print "skalar1 to ${$smietnik[2]}"; # tak tez mozna - znaczy sie odczytaj 
    # skalar opisany o nazwie $smietnik[2]
    # mozna zapisac tez jako $$smietnik[2] ale z {} jest czytelniej
    Mam nadzieje ze chodzilo o cos mniej wiecej w tym stylu. Cala sztuka polega na tym, ze przekazujac parametry do funkcji ktora napisales moze uzyc zmiennych globalnych, mozesz przekazac jako parametry (nawet okreslajac tzw prototypy) albo jesli sa bardziej skomplikowane, mozesz przekazac je jako referencje...

    Kod:
    sub dzialaj {
        # wywolanie jako: dzialaj(\@smietnik);
        my $smietnik_ref = $_[0];   #pierwszy parametr
        print "User1 to $smietnik_ref->[0]->{user1}\n";
    }
    Tak przekazalem obiekt z cala struktura... Moge ja zmieniac, itd.
    Jesli nie jestes pewien swojej struktury jak ona wyglada, to polecam:

    Kod:
    use Data::Dumper;
    print "DEBUG - struktura danych\n";
    print Dumper @smietnik;
    print Dumper \@smietnik;  #porownaj wyniki tych 2
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  3. #3
    Zarejestrowany
    May 2007
    Skąd
    Elbląg
    Postów
    42

    Domyślnie

    ehem... ja tak wolałbym dla bardziej zielonych siedze w programowaniu niedługo i nie wszystko stąd zrozumiałem. Chodziło mi o to żeby ktoś pokazał co dzięki nim moge uzyskać i do czego się przydają

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

    Domyślnie

    Ok - tylko zdefiniuj pojecie 'tablica zmiennych' to postaram sie odpowiedziec na Twoje pytanie i podac przyklady kodu.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  5. #5
    Zarejestrowany
    May 2007
    Skąd
    Elbląg
    Postów
    42

    Domyślnie

    uczę się perla stąd i na tej stronie są opisane zmienne i tablice. I przede wszystkim chciałbym się dowiedzieć do czego mi się te tablice przydadzą, bo jak je deklarować to tam pisze.

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

    Domyślnie

    Ok - no to teraz wiem co potrzebujesz

    Tablice (ang. array) - oznaczone znakiem @ to tablica plaska, jedno-wymiarowa, cos co mozna doslownie okreslic jako lista. Elementy sa numerowane od 0 w gore. $#tablica zwraca numer ostatniego elementu. Mozna na tym zrobic push, pop, shift i unshift, sort, reverse sort, itd. Dodanie elementu na koncu listy mozna tez tak $lista[$#lista++]=$wartosc :-)
    Tablice sa przydatne na przyklad jesli masz cos co wymaga pewnej kolejnosci i chcesz ta kolejnosc przechowac - niech to bedzie ilosc przeslanych przez siec bajtow mierzona co 5 minut, cokolwiek... Po prostu uporzadkowana lista.

    Tablica asocjacyjna (ang. hash) - oznaczona znakiem % to bardzo uzyteczny twor. Elementy nie maja kolejnosci - brak wiec kolejnych numerow, sa za to etykietki (tzw. klucze). Porownajmy hash do worka w ktorzym sa jakies rzeczy (skalary, tablice, odwolania do nich lub inne kombinacje) do ktorych na sznurku przywiazane sa etykiety i te wystaja z worka Nie wiesz gdzie w worku jest to czego szukasz ale znajac wartosc klucza mozesz wyciagnac co chcesz.

    Co ja ostatnio w tym implementowalem? Wykres ilosci sluchaczy naszego radia internetowego w czasie... Co minute czytam dane z serwera i zapisuje do pliku, kazda linia to kolejna minuta i zawiera informacje:
    - data i godzina
    - ilosc sluchaczy
    - peak (max. slychaczy)
    - ilosc 'slow listeners' czyli tych co maja za slabe lacza by sluchac programu
    - ilosc danych wyslanych
    - ilosc danych odebranych ze studia
    - itd... okolo 20 parametrow

    Pozniej gdy wchodze na strone rapotow, skrypt czyta te dane z pliku i tworzy 3 array'e - jeden zawierajacy kolejno czas, drugi ilosc sluchaczy, trzeci ilosc powolnych sluchaczy... poniewaz to tablica to element na danej pozycji pasuje do elementu na tej samej pozycji w pozostalych 2 tablicach - to wlasnie przekazuje do procedury generujacej obrazki (wykresy). Interesuje mnie tutaj szczegolnie przebieg w czasie, wiec elementy musza miec swoja kolejnosc.

    Hash'e sa uzywane do konfiguracji skryptu - samo rysowanie wykresow uzywa hash'y do ustawiania parametrow ale ja stworzylem swoj hash z tym co potrzebuje i zapisalem w osobnym pliku ktory laduje na starcie - tam user okresla jaki kolor ma miec ktora linia, itd... a pozniej podstawiam wartosc w kodzie jako $config{'peak_color'}, $config{'listeners_color'} itd. Nie interesuje mnie tutaj kolejnosc elementow ale wartosci przypisane danym kluczom.

    Taki opis jest lepszy?
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  7. #7
    Zarejestrowany
    May 2007
    Skąd
    Elbląg
    Postów
    42

    Domyślnie

    Nom i o to mi chodziło dzięki Tqm wielkie

Podobne wątki

  1. Naprawde Głupi!ZIELONY!POMOCY!
    By takeshi in forum Newbie - dla początkujących!
    Odpowiedzi: 14
    Autor: 08-19-2007, 20:41
  2. Zielony pyta :D
    By Olonor in forum Wardriving
    Odpowiedzi: 1
    Autor: 05-11-2007, 23:09
  3. Kolejny zielony
    By Sasuke in forum Hacking
    Odpowiedzi: 4
    Autor: 12-27-2006, 14:59

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