c4


Programowanie 2
Perl - Podstawowe operacje wejścia/wyjścia
Marcin Junczys-Dowmunt
junczys@amu.edu.pl
http://www.staff.amu.edu.pl/~junczys/
Marcin Junczys-Dowmunt Programowanie 2 1/13
Dzisiejszy wykład
Omówimy sposoby wczytywania danych z wejścia
standardowego (STDIN)
Marcin Junczys-Dowmunt Programowanie 2 2/13
Dzisiejszy wykład
Omówimy sposoby wczytywania danych z wejścia
standardowego (STDIN)
Zajmiemy się sposobami zapisu danych do wyjścia
standardowego (STDOUT)
Marcin Junczys-Dowmunt Programowanie 2 2/13
Dzisiejszy wykład
Omówimy sposoby wczytywania danych z wejścia
standardowego (STDIN)
Zajmiemy się sposobami zapisu danych do wyjścia
standardowego (STDOUT)
Omówimy podstawowe sposoby odczytu i zapisu do plików
Marcin Junczys-Dowmunt Programowanie 2 2/13
Wczytywanie pojedynczego wiersza z STDIN
1 print "Podaj imie: ";
$name = ;
chomp $name;
5
print "Witaj, \"$in\"!\n";
Marcin Junczys-Dowmunt Programowanie 2 3/13
Wczytywanie pojedynczego wiersza z STDIN
1 print "Podaj imie: ";
$name = ;
chomp $name;
5
print "Witaj, \"$in\"!\n";
zSTDINmożemy jedynie wczytywać dane
Służą do tego operator<...>oraz operator przypisania=
FragmentSTDINto nazwa uchwytu do pliku, tutaj do wejścia
standardowego
Wywoływanie operatora<...>domyślnie powoduje wczytanie
jednego wiersza wraz ze znakiem terminującym
Marcin Junczys-Dowmunt Programowanie 2 3/13
Wczytywanie pojedynczego wiersza z STDIN
1 print "Podaj imie: ";
$name = ;
chomp $name;
5
print "Witaj, \"$in\"!\n";
zSTDINmożemy jedynie wczytywać dane
Służą do tego operator<...>oraz operator przypisania=
FragmentSTDINto nazwa uchwytu do pliku, tutaj do wejścia
standardowego
Wywoływanie operatora<...>domyślnie powoduje wczytanie
jednego wiersza wraz ze znakiem terminującym
Funkcjachompusuwa znaki terminujące
Marcin Junczys-Dowmunt Programowanie 2 3/13
Kolejne wczytywanie wszystkich wierszy z STDIN
1 while(defined($line = )) {
chomp $line;
print "Wiersz nr $. zawiera ".length($line).
" znakow\n";
5 }
Marcin Junczys-Dowmunt Programowanie 2 4/13
Kolejne wczytywanie wszystkich wierszy z STDIN
1 while(defined($line = )) {
chomp $line;
print "Wiersz nr $. zawiera ".length($line).
" znakow\n";
5 }
Kolejne wywołania operatora<...>wczytują kolejne wiersze
Marcin Junczys-Dowmunt Programowanie 2 4/13
Kolejne wczytywanie wszystkich wierszy z STDIN
1 while(defined($line = )) {
chomp $line;
print "Wiersz nr $. zawiera ".length($line).
" znakow\n";
5 }
Kolejne wywołania operatora<...>wczytują kolejne wiersze
Gdy operator dotrze do końca pliku zwraca wartośćundef
Marcin Junczys-Dowmunt Programowanie 2 4/13
Kolejne wczytywanie wszystkich wierszy z STDIN
1 while(defined($line = )) {
chomp $line;
print "Wiersz nr $. zawiera ".length($line).
" znakow\n";
5 }
Kolejne wywołania operatora<...>wczytują kolejne wiersze
Gdy operator dotrze do końca pliku zwraca wartośćundef
Funkcjadefinedsprawdza, czy dana wartość jest różna od
undef Dlaczego taka postać warunku?
Marcin Junczys-Dowmunt Programowanie 2 4/13
Kolejne wczytywanie wszystkich wierszy z STDIN
1 while(defined($line = )) {
chomp $line;
print "Wiersz nr $. zawiera ".length($line).
" znakow\n";
5 }
Kolejne wywołania operatora<...>wczytują kolejne wiersze
Gdy operator dotrze do końca pliku zwraca wartośćundef
Funkcjadefinedsprawdza, czy dana wartość jest różna od
undef Dlaczego taka postać warunku?
Funkcjalengthzwraca  długość napisu, tzn. ilość znaków
z których składa się napis,
Zmienna specjalna$.zawiera aktualny numer wiersza
Marcin Junczys-Dowmunt Programowanie 2 4/13
Kolejne wczytywanie wszystkich wierszy z STDIN (krócej)
1 while() {
chomp;
print "Wiersz nr $. zawiera ".length($_).
" znaków\n";
5 }
Marcin Junczys-Dowmunt Programowanie 2 5/13
Kolejne wczytywanie wszystkich wierszy z STDIN (krócej)
1 while() {
chomp;
print "Wiersz nr $. zawiera ".length($_).
" znaków\n";
5 }
Taki zapis jest idiomem Perla równoważny z poprzednim
przykładem
Wewnętrznie te dwa programy niczym się nie różnią
Marcin Junczys-Dowmunt Programowanie 2 5/13
Kolejne wczytywanie wszystkich wierszy z STDIN (krócej)
1 while() {
chomp;
print "Wiersz nr $. zawiera ".length($_).
" znaków\n";
5 }
Taki zapis jest idiomem Perla równoważny z poprzednim
przykładem
Wewnętrznie te dwa programy niczym się nie różnią
Brak jawnego zapisu do zmiennej, korzystamy ze zmiennej
domyślnej$
Ze zmienną domyślną spotkamy się jeszcze nieraz
Marcin Junczys-Dowmunt Programowanie 2 5/13
Wczytywanie wszystkich wierszy z STDIN do tablicy
1 chomp(@wiersze = );
foreach (@wiersze) {
print "Wiersz nr $. zawiera ".length($_).
" znaków\n";
5 }
Marcin Junczys-Dowmunt Programowanie 2 6/13
Wczytywanie wszystkich wierszy z STDIN do tablicy
1 chomp(@wiersze = );
foreach (@wiersze) {
print "Wiersz nr $. zawiera ".length($_).
" znaków\n";
5 }
Użycie operatora<...>w kontekście listowym spowoduje
wczytanie wszystkich wierszy do elementów tablicy
Marcin Junczys-Dowmunt Programowanie 2 6/13
Wczytywanie wszystkich wierszy z STDIN do tablicy
1 chomp(@wiersze = );
foreach (@wiersze) {
print "Wiersz nr $. zawiera ".length($_).
" znaków\n";
5 }
Użycie operatora<...>w kontekście listowym spowoduje
wczytanie wszystkich wierszy do elementów tablicy
Funkcjachompwykonana na tablicy powoduje obcięcie
znaków terminujących w każdym elemencie tablicy
Marcin Junczys-Dowmunt Programowanie 2 6/13
Wczytywanie wszystkich wierszy z STDIN do tablicy
1 chomp(@wiersze = );
foreach (@wiersze) {
print "Wiersz nr $. zawiera ".length($_).
" znaków\n";
5 }
Użycie operatora<...>w kontekście listowym spowoduje
wczytanie wszystkich wierszy do elementów tablicy
Funkcjachompwykonana na tablicy powoduje obcięcie
znaków terminujących w każdym elemencie tablicy
Znowu pojawia się zmienna domyślna$  iteruje ona po
wszystkich elementach tablicy
Marcin Junczys-Dowmunt Programowanie 2 6/13
Wczytywanie wszystkich wierszy z STDIN do tablicy
1 chomp(@wiersze = );
foreach (@wiersze) {
print "Wiersz nr $. zawiera ".length($_).
" znaków\n";
5 }
Użycie operatora<...>w kontekście listowym spowoduje
wczytanie wszystkich wierszy do elementów tablicy
Funkcjachompwykonana na tablicy powoduje obcięcie
znaków terminujących w każdym elemencie tablicy
Znowu pojawia się zmienna domyślna$  iteruje ona po
wszystkich elementach tablicy
Tutaj zmienna$.działa w sposób nieoczekiwany  dlaczego?
Marcin Junczys-Dowmunt Programowanie 2 6/13
Zapisywanie doSTDOUT
1 print STDOUT "Wypisujemy dane do STDOUT";
Marcin Junczys-Dowmunt Programowanie 2 7/13
Zapisywanie doSTDOUT
1 print STDOUT "Wypisujemy dane do STDOUT";
Wyjście standardowe jest takie jak jego nazwa wskazuje
Marcin Junczys-Dowmunt Programowanie 2 7/13
Zapisywanie doSTDOUT
1 print STDOUT "Wypisujemy dane do STDOUT";
Wyjście standardowe jest takie jak jego nazwa wskazuje
Korzystając zprintdomyślnie (standardowo!) zapisujemy do
wyjścia standardowegoSTDOUT
Marcin Junczys-Dowmunt Programowanie 2 7/13
Zapisywanie doSTDOUT
1 print STDOUT "Wypisujemy dane do STDOUT";
Wyjście standardowe jest takie jak jego nazwa wskazuje
Korzystając zprintdomyślnie (standardowo!) zapisujemy do
wyjścia standardowegoSTDOUT
Możemy więc opuścić nazwę uchwytu:
1 print "Wypisujemy dane do STDOUT";
Marcin Junczys-Dowmunt Programowanie 2 7/13
Uchwyty do plików
Poznaliśmy juz standardowe uchwyty do plików (wirtualnych):
STDIN,STDOUT
Marcin Junczys-Dowmunt Programowanie 2 8/13
Uchwyty do plików
Poznaliśmy juz standardowe uchwyty do plików (wirtualnych):
STDIN,STDOUT
STDINto uchwyt otwarty tylko do odczytu
Marcin Junczys-Dowmunt Programowanie 2 8/13
Uchwyty do plików
Poznaliśmy juz standardowe uchwyty do plików (wirtualnych):
STDIN,STDOUT
STDINto uchwyt otwarty tylko do odczytu
STDOUTto uchwyt otwarty tylko do zapisu
Marcin Junczys-Dowmunt Programowanie 2 8/13
Uchwyty do plików
Poznaliśmy juz standardowe uchwyty do plików (wirtualnych):
STDIN,STDOUT
STDINto uchwyt otwarty tylko do odczytu
STDOUTto uchwyt otwarty tylko do zapisu
Możemy tworzyć własne uchwyty do konkretnych plików
Marcin Junczys-Dowmunt Programowanie 2 8/13
Uchwyty do plików
Poznaliśmy juz standardowe uchwyty do plików (wirtualnych):
STDIN,STDOUT
STDINto uchwyt otwarty tylko do odczytu
STDOUTto uchwyt otwarty tylko do zapisu
Możemy tworzyć własne uchwyty do konkretnych plików
Własne uchwyty obsługujemy tak samo jak uchwyty
standardowe
Marcin Junczys-Dowmunt Programowanie 2 8/13
Wczytywanie danych z plików
1 open(IN, "or die "plik nie istnieje";
while() {
5 chomp;
print "Wiersz $.. zawiera ".length($_).
" znaków\n";
}
close(IN);
Marcin Junczys-Dowmunt Programowanie 2 9/13
Wczytywanie danych z plików
1 open(IN, "or die "plik nie istnieje";
while() {
5 chomp;
print "Wiersz $.. zawiera ".length($_).
" znaków\n";
}
close(IN);
Funkcjaopensłuży do tworzenie własnych uchwytów
Marcin Junczys-Dowmunt Programowanie 2 9/13
Wczytywanie danych z plików
1 open(IN, "or die "plik nie istnieje";
while() {
5 chomp;
print "Wiersz $.. zawiera ".length($_).
" znaków\n";
}
close(IN);
Funkcjaopensłuży do tworzenie własnych uchwytów
Podajemy dwa argumenty: nazwę uchwytu, sposób korzystania
z pliku połączony nazwę pliku
Marcin Junczys-Dowmunt Programowanie 2 9/13
Wczytywanie danych z plików
1 open(IN, "or die "plik nie istnieje";
while() {
5 chomp;
print "Wiersz $.. zawiera ".length($_).
" znaków\n";
}
close(IN);
Funkcjaopensłuży do tworzenie własnych uchwytów
Podajemy dwa argumenty: nazwę uchwytu, sposób korzystania
z pliku połączony nazwę pliku
Sposób korzystania dla pliku tylko do odczytu oznaczamy
przez<
Marcin Junczys-Dowmunt Programowanie 2 9/13
Zapisywanie danych do plików
1 open(IN, "or die "plik nie istnieje";
open(OUT, ">log.txt")
or die "Nie moglem zapisac danych";
5
while() {
chomp;
print OUT "Wiersz nr $. zawiera ".length($_).
" znaków\n";
10 }
close(IN);
close(OUT);
Marcin Junczys-Dowmunt Programowanie 2 10/13
Zapisywanie danych do plików
1 open(IN, "or die "plik nie istnieje";
open(OUT, ">log.txt")
or die "Nie moglem zapisac danych";
5
while() {
chomp;
print OUT "Wiersz nr $. zawiera ".length($_).
" znaków\n";
10 }
close(IN);
close(OUT);
Sposób korzystania z uchwytu oznaczamy przez>
Marcin Junczys-Dowmunt Programowanie 2 10/13
Zapisywanie danych do plików
1 open(IN, "or die "plik nie istnieje";
open(OUT, ">log.txt")
or die "Nie moglem zapisac danych";
5
while() {
chomp;
print OUT "Wiersz nr $. zawiera ".length($_).
" znaków\n";
10 }
close(IN);
close(OUT);
Sposób korzystania z uchwytu oznaczamy przez>
Jak będzie działał znak>a jak znak>>?
Marcin Junczys-Dowmunt Programowanie 2 10/13
Zapisywanie danych do plików
1 open(IN, "or die "plik nie istnieje";
open(OUT, ">log.txt")
or die "Nie moglem zapisac danych";
5
while() {
chomp;
print OUT "Wiersz nr $. zawiera ".length($_).
" znaków\n";
10 }
close(IN);
close(OUT);
Sposób korzystania z uchwytu oznaczamy przez>
Jak będzie działał znak>a jak znak>>?
Zapisu do pliku dokonujemy używając funkcjiprint
Marcin Junczys-Dowmunt Programowanie 2 10/13
Operator diamentowy<>
1 while(<>) {
chomp;
print "Wiersz nr $. zawiera ".length($_).
" znaków\n";
5 }
Marcin Junczys-Dowmunt Programowanie 2 11/13
Operator diamentowy<>
1 while(<>) {
chomp;
print "Wiersz nr $. zawiera ".length($_).
" znaków\n";
5 }
Operator diamentowy to kolejny idiom perlowy (perlizm)
Marcin Junczys-Dowmunt Programowanie 2 11/13
Operator diamentowy<>
1 while(<>) {
chomp;
print "Wiersz nr $. zawiera ".length($_).
" znaków\n";
5 }
Operator diamentowy to kolejny idiom perlowy (perlizm)
Operator diamentowy wczytuje wszystkie dane ze wszystkich
plików podanych w następujący sposób (jako argumenty do
programu w wierszu poleceń):
perl diament.pl plik1.txt plik2.txt ... plikn.txt
Marcin Junczys-Dowmunt Programowanie 2 11/13
Operator diamentowy<>
1 while(<>) {
chomp;
print "Wiersz nr $. zawiera ".length($_).
" znaków\n";
5 }
Operator diamentowy to kolejny idiom perlowy (perlizm)
Operator diamentowy wczytuje wszystkie dane ze wszystkich
plików podanych w następujący sposób (jako argumenty do
programu w wierszu poleceń):
perl diament.pl plik1.txt plik2.txt ... plikn.txt
Gdy nie podamy żadnego pliku, wczytuje dane zSTDIN
Marcin Junczys-Dowmunt Programowanie 2 11/13
Tablica specjalna@ARGV
Wewnętrznie operator diamentowy korzysta ze specjalnej
wbudowanej tablicy@ARGV
Ta tablica zawiera wszystkie argumenty podane w wierszu
poleceń za nazwą programu
Marcin Junczys-Dowmunt Programowanie 2 12/13
Tablica specjalna@ARGV
Wewnętrznie operator diamentowy korzysta ze specjalnej
wbudowanej tablicy@ARGV
Ta tablica zawiera wszystkie argumenty podane w wierszu
poleceń za nazwą programu
1 for($i = 0; $i < @ARGV; $i++) {
print "Element o indeksie $i to $ARGV[$i]\n";
}
Marcin Junczys-Dowmunt Programowanie 2 12/13
Tablica specjalna@ARGV
Wewnętrznie operator diamentowy korzysta ze specjalnej
wbudowanej tablicy@ARGV
Ta tablica zawiera wszystkie argumenty podane w wierszu
poleceń za nazwą programu
1 for($i = 0; $i < @ARGV; $i++) {
print "Element o indeksie $i to $ARGV[$i]\n";
}
Możemy wykonać powyższy program np. w taki sposób:
perl argv.pl zupa tygrys 45 tango 5.7 -h test
Marcin Junczys-Dowmunt Programowanie 2 12/13
Podsumowanie
Wiemy teraz jak:
Marcin Junczys-Dowmunt Programowanie 2 13/13
Podsumowanie
Wiemy teraz jak:
Wczytywać dane z wejścia standardowego (też z klawiatury)
Marcin Junczys-Dowmunt Programowanie 2 13/13
Podsumowanie
Wiemy teraz jak:
Wczytywać dane z wejścia standardowego (też z klawiatury)
Wczytywać dane z dowolnego pliku
Marcin Junczys-Dowmunt Programowanie 2 13/13
Podsumowanie
Wiemy teraz jak:
Wczytywać dane z wejścia standardowego (też z klawiatury)
Wczytywać dane z dowolnego pliku
Korzystać ze zmiennej wbudowanej@ARGV
Marcin Junczys-Dowmunt Programowanie 2 13/13
Podsumowanie
Wiemy teraz jak:
Wczytywać dane z wejścia standardowego (też z klawiatury)
Wczytywać dane z dowolnego pliku
Korzystać ze zmiennej wbudowanej@ARGV
Zapisywać dane do wyjścia standardowego
Marcin Junczys-Dowmunt Programowanie 2 13/13
Podsumowanie
Wiemy teraz jak:
Wczytywać dane z wejścia standardowego (też z klawiatury)
Wczytywać dane z dowolnego pliku
Korzystać ze zmiennej wbudowanej@ARGV
Zapisywać dane do wyjścia standardowego
Zapisywać dane do dowolnego pliku
Marcin Junczys-Dowmunt Programowanie 2 13/13
Podsumowanie
Wiemy teraz jak:
Wczytywać dane z wejścia standardowego (też z klawiatury)
Wczytywać dane z dowolnego pliku
Korzystać ze zmiennej wbudowanej@ARGV
Zapisywać dane do wyjścia standardowego
Zapisywać dane do dowolnego pliku
Wniosek: Nasze programy od tej chwili potrafią się komunikować
ze światem zewnętrznym
Marcin Junczys-Dowmunt Programowanie 2 13/13


Wyszukiwarka

Podobne podstrony:
naprawa licznik audi 80 b3, b4, audi 100 c3, c4 (146504970) aukcje intern
highwaycode pol c4 zwierzeta rowery (s 18 21, r 47 59)
cw9z1(C4)
how to do mb sd c4 self test
Zadanie C4
Bezpieczny obszar pracy 2c pr c4 85d kolektora 2c moc strat 2c cz 6
Aperturas y Variantes N 17 A09 Apertura Reti 1 Cf3 d5 2 c4
how to install mb sd c4 wifi card
Drenaz klimy C4
c4
C4 4
cw9z3(C4)

więcej podobnych podstron