Programowanie > Języki skryptowe
[Perl] suma liczb (wyciągniętych z pliku)
(1/1)
kapio:
Mam pewien problem i nie mogę sobie z nim poradzić. A dokładnie mam plik, a w nim liczby (kilka kolumn, ale tylko we 2 są liczby) i normalnie wyciąga liczby z kolumny numer 1 i otrzymuje je w takim formacie (print) :
--- Kod: ---
123123129312312312312312312
--- Koniec kodu ---
gdy dam
--- Kod: ---
print $zmienna . "\\n";
--- Koniec kodu ---
otrzymam już normalny wynik
--- Kod: ---
123
123
123
123
321
123
--- Koniec kodu ---
ale gdy chce to dodać to cały czas wypluwa to samo (czyli wynik taki jak wyżej), a ich nie dodaje.
Tak wygląda kod na wyciąganie liczb
--- Kod: ---
#!/usr/bin/env perl
use strict;
use warnings;
open my $file, '
Paweł Kraszewski:
Zasadniczym mankamentem Twoich skryptów jest ich budowa. Zawartość pętli WHILE wykonuje się raz dla każdej linijki pliku wejściowego. Z tego powodu inicjalizowanie akumulatora w pętli, albo wypisywanie akumulatora w pętli jest bez sensu. Inicjalizować masz przed pętlą, sumować w pętli i wypisać za pętlą.
kapio:
Dzięki Wielkie :) Z 3 razy miałem przygotowanego dużego posta, ale za każdym razem wracałem do kodu, aż się sam z nim uporałem. Miałem błąd z
--- Kod: ---
my $sum = 0;
--- Koniec kodu ---
który siedział w pętli i analogicznie od nowa była przypisywana ta zmienna dlatego potem cały czas otrzymywałem:
a) w pętli wszystkie liczby po kolei
b) poza pętlą ostatnią liczbę.
Tylko jeszcze nie rozumiem do końca:
--- Kod: ---
strict;
--- Koniec kodu ---
przy tej bibliotece musimy deklarować zmienne (tworzymy zmienne lokalne) i ja myślałem, że wtedy nasze zmienne lokalne będą działały przez cały program no i tutaj się myliłem. Ponieważ jak chciałem wydrukować tekst za pętlą to otrzymywałem, że $sum nie istnieje. Poszukałem w google i znalazłem our i na samym początku mam:
--- Kod: ---
our ($sum);
--- Koniec kodu ---
i teraz ładnie skrypt działa, ale dlaczego? Dlaczego zmienna lokalna działa tylko w danym bloku? Czyli w tym przypadku tylko w pętli while? Rozumiem, że to ma nam pomóc, aby nie nakładać na siebie zmiennych (większy program X zmiennych i żeby nie mieć tych samym z innymi wartościami). Ale dlaczego ona zamyka się w danym miejscu? A our informuje, że zmienna X, Y, Z mają działać po całości tak? Cały kod wygląda tak:
--- Kod: ---
#!/usr/bin/env perl
use strict;
use warnings;
open(DATA, "
Nawigacja
Idź do wersji pełnej