Dzisiejszy wykład
Programowanie w Perlu
Perl - Podstawowe operacje wejścia/wyjścia
Omówimy sposoby wczytywania danych z wejścia
standardowego
Marcin Junczys-Dowmunt
Zajmiemy się sposobami zapisu danych do wyjścia
junczys@amu.edu.pl
standardowego i wyjścia błędów
Wydział Matematyki i Informatyki Omówimy podstawowe sposoby odczytu i zapisu do plików
http://web.wmi.amu.edu.pl
Marcin Junczys-Dowmunt Programowanie w Perlu 1/16 Marcin Junczys-Dowmunt Programowanie w Perlu 2/16
Potoki a Perl Wczytywanie pojedynczego wiersza z STDIN
1 print "Podaj imie: ";
C:\> perl test.pl < in.txt > out.txt 2> log.txt
$name =
;
chomp $name;
Podobnie jak w przypadku komend wiersza poleceń możemy
5
przekierować strumienie wejścia/wyjścia
print "Witaj, \"$in\"!\n";
Złożona komendaperl test.pldziała jak zwykła komenda
zSTDINmożemy jedynie wczytywać dane
wiersza poleceń
Służą do tego operator<...>oraz operator przypisania=
W przykładzie przekierujemy plikin.txtnaSTDIN,
zapisujemySTDOUTdoout.txt, aSTDERRdolog.txt FragmentSTDINto nazwa uchwytu do pliku, tutaj do wejścia
standardowego
Najpierw musimy poznać wewnętrzne mechanizmy Perla
pozwalające na przetwarzanie strumieni standardowych Wywoływanie operatora<...>domyślnie powoduje wczytanie
jednego wiersza wraz ze znakiem terminującym
Funkcjachompusuwa znaki terminujące
Marcin Junczys-Dowmunt Programowanie w Perlu 3/16 Marcin Junczys-Dowmunt Programowanie w Perlu 4/16
Kolejne wczytywanie wszystkich wierszy z STDIN Kolejne wczytywanie wszystkich wierszy z STDIN (krócej)
1 while() {
1 while(defined($line = )) {
chomp;
chomp $line;
print "Wiersz $.. zawiera ".length($_).
print "Wiersz $.. zawiera ".length($line).
" znakow\n";
" znakow\n";
5 }
5 }
Taki zapis jest idiomem Perla równoważny z poprzednim
Kolejne wywołania operatora<...>wczytują kolejne wiersze
przykładem
Gdy operator dotrze do końca pliku zwraca wartośćundef
Wewnętrznie te dwa programy niczym się nie różnią
Funkcjadefinedsprawdza, czy dana wartość jest różna od
Brak jawnego zapisu do zmiennej, korzystamy ze zmiennej
undef Dlaczego taka postać warunku?
domyślnej$
Zmienna specjalna$.zawiera aktualny numer wiersza
Ze zmienną domyślną spotkamy się jeszcze nieraz
Marcin Junczys-Dowmunt Programowanie w Perlu 5/16 Marcin Junczys-Dowmunt Programowanie w Perlu 6/16
Wczytywanie wszystkich wierszy z STDIN do tablicy Zapisywanie doSTDOUT
1 chomp(@wiersze = );
foreach (@wiersze) {
print "Wiersz $.. zawiera ".length($_).
1 print STDOUT "Wypisujemy dane do STDOUT";
" znakow\n";
5 }
Wyjście standardowe jest takie jak jego nazwa wskazuje
Korzystając zprintdomyślnie (standardowo!) zapisujemy do
Użycie operatora<...>w kontekście listowym spowoduje
wyjścia standardowegoSTDOUT
wczytanie wszystkich wierszy do elementów tablicy
Możemy więc opuścić nazwę uchwytu:
Funkcjachompwykonana na tablicy powoduje obcięcie
znaków terminujących w każdym elemencie tablicy
1 print "Wypisujemy dane do STDOUT";
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 w Perlu 7/16 Marcin Junczys-Dowmunt Programowanie w Perlu 8/16
Zapisywanie doSTDERR Uchwyty do plików
Poznaliśmy juz trzy standardowe uchwyty do plików
(wirtualnych):STDIN,STDOUTiSTDERR
1 print STDERR "Wypisujemy dane do STDERR";
STDINto uchwyt otwarty tylko do odczytu
Gdy zapisujemy dane doSTDERR, musimy jawnie podać nazwę
STDOUTorazSTDERRsą otwarte tylko do zapisu
uchwytu
Możemy tworzyć własne uchwyty do konkretnych plików
Własne uchwyty obsługujemy tak samo jak uchwyty
standardowe
Marcin Junczys-Dowmunt Programowanie w Perlu 9/16 Marcin Junczys-Dowmunt Programowanie w Perlu 10/16
Wczytywanie danych z plików Zapisywanie danych do plików
1 open(IN, "1 open(IN, "or die "plik nie istnieje";
or die "plik nie istnieje";
open(OUT, ">log.txt")
or die "Nie moglem zapisac danych";
while() {
5
5 chomp;
while() {
print "Wiersz $.. zawiera ".length($_).
chomp;
" znakow\n";
print OUT "Wiersz $.. zawiera ".length($_).
}
" znakow\n";
close(IN);
10 }
close(IN);
Funkcjaopensłuży do tworzenie własnych uchwytów
close(OUT);
Podajemy dwa argumenty: nazwę uchwytu, sposób korzystania
z pliku połączony nazwę pliku
Sposób korzystania z uchwytu oznaczamy przez>
Sposób korzystania dla pliku tylko do odczytu oznaczamy
Jak będzie działał znak>a jak znak>>?
przez<
Zapis do pliku odbywa się jak poprzednio doSTDERR
Marcin Junczys-Dowmunt Programowanie w Perlu 11/16 Marcin Junczys-Dowmunt Programowanie w Perlu 12/16
Operator diamentowy<> Tablica specjalna@ARGV
1 while(<>) {
Wewnętrznie operator diamentowy korzysta ze specjalnej
chomp;
wbudowanej tablicy@ARGV
print "Wiersz $.. zawiera ".length($_).
" znakow\n";
Ta tablica zawiera wszystkie argumenty podane w wierszu
5 }
poleceń za nazwą programu
Operator diamentowy to kolejny idiom perlowy (perlizm)
1 for($i = 0; $i < @ARGV; $i++) {
print "Element o indeksie $i to $ARGV[$i]\n";
Operator diamentowy wczytuje wszystkie dane ze wszystkich
}
plików podanych w następujący sposób (jako argumenty do
programu w wierszu poleceń):
Możemy wykonać powyższy program np. w taki sposób:
perl diament.pl plik1.txt plik2.txt ... plikn.txt
perl argv.pl zupa tygrys 45 tango 5.7 -h test
Gdy nie podamy żadnego pliku, wczytuje dane zSTDIN
Marcin Junczys-Dowmunt Programowanie w Perlu 13/16 Marcin Junczys-Dowmunt Programowanie w Perlu 14/16
Specjalny uchwyt plikowyDATA Podsumowanie
1 while() {
chomp;
Wiemy teraz jak:
print "Wiersz $.. zawiera ".length($_).
Wczytywać dane z wejścia standardowego (też z klawiatury)
" znakow\n";
5 } Wczytywać dane z dowolnego pliku
Wczytywać dane ze środowiskaDATA
__END__
Korzystać ze zmiennej wbudowanej@ARGV
Taki sobie tekst
ktory sluzy
Zapisywać dane do wyjścia standardowego i wyjścia błędów
10 jedynie przykladem
Zapisywać dane do dowolnego pliku
UchwytDATAsłuży tylko do odczytu danych zapisanych po
Wniosek: Nasze programy od tej chwili potrafią się komunikować
END , kod Perla tutaj nie działa
ze światem zewnętrznym
Przydatne przy testowaniu programów, nie trzeba tworzyć
zewnętrznych plików
Marcin Junczys-Dowmunt Programowanie w Perlu 15/16 Marcin Junczys-Dowmunt Programowanie w Perlu 16/16
Wyszukiwarka
Podobne podstrony:
Wyklad4 handout
Wyklad07 handout
Wyklad17 handout
Wyklad06 handout
Wyklad5 handout
Wyklad2 handout
Wyklad04 2008 handout
Wyklad xmlparse handout
Wyklad1 2008 handout
20151012 MichalTrzesiok Statystyka wyklad2 miary statystyczne handout
Wyklad03 2008 handout
Wyklad2 2008 handout
Wyklad05 2008 handout
20151019 MichalTrzesiok Statystyka wyklad3 analiza korelacji handout
Sieci komputerowe wyklady dr Furtak
Wykład 05 Opadanie i fluidyzacja
AGH Sed 4 sed transport & deposition EN ver2 HANDOUT
więcej podobnych podstron