Wyklad06 handout


Dzisiejszy wykład
Narzędzia informatyczne w językoznawstwie
Perl - Podstawowe operacje wejścia/wyjścia
î%
Omówimy sposoby wczytywania danych z wejścia
standardowego1
Marcin Junczys-Dowmunt
î%
Zajmiemy się sposobami zapisu danych do wyjścia
junczys@amu.edu.pl
standardowego i wyjścia błędów
ZakÅ‚ad Logiki Stosowanej î%
Omówimy podstawowe sposoby odczytu i zapisu do plików
http://www.logic.amu.edu.pl
19 listopada 2008
1
Proszę przypomnieć sobie informacje z drugiego wykładu o wierszu poleceń
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 1/16 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 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 komenda perl test.pl działa jak zwykła komenda
î%
z STDIN możemy jedynie wczytywać dane
wiersza poleceń
î%
Służą do tego operator <...> oraz operator przypisania =
î%
W przykładzie przekierujemy plik in.txt na STDIN,
î%
zapisujemy STDOUT do out.txt, a STDERR do log.txt Fragment STDIN to 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
î%
Funkcja chomp usuwa znaki terminujÄ…ce
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 3/16 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 4/16
Kolejne wczytywanie wszystkich wierszy z STDIN Kolejne wczytywanie wszystkich wierszy z STDIN (krócej)
1 while (< STDIN >) {
1 while ( defined( $line = )) {
chomp ;
chomp $line ;
print " Wiersz $ .. zawiera ". length ( $_ ).
print " Wiersz $ .. zawiera ". length ( $line ).
" znaków \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ą
î%
Funkcja defined sprawdza, 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 Narzędzia informatyczne w językoznawstwie 5/16 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 6/16
Wczytywanie wszystkich wierszy z STDIN do tablicy Zapisywanie do STDOUT
1 chomp ( @wiersze = );
foreach ( @wiersze) {
print " Wiersz $ .. zawiera ". length ( $_ ).
1 print STDOUT " Wypisujemy dane do STDOUT ";
" znaków \n";
5 }
î%
Wyjście standardowe jest takie jak jego nazwa wskazuje
î%
Korzystając z print domyślnie (standardowo!) zapisujemy do
î%
Użycie operatora <...> w kontekście listowym spowoduje
wyjścia standardowego STDOUT
wczytanie wszystkich wierszy do elementów tablicy
î%
Możemy więc opuścić nazwę uchwytu:
î%
Funkcja chomp wykonana 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 Narzędzia informatyczne w językoznawstwie 7/16 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 8/16
Zapisywanie do STDERR Uchwyty do plików
î%
Poznaliśmy juz trzy standardowe uchwyty do plików
(wirtualnych): STDIN, STDOUT i STDERR
1 print STDERR " Wypisujemy dane do STDERR ";
î%
STDIN to uchwyt otwarty tylko do odczytu
î%
Gdy zapisujemy dane do STDERR, musimy jawnie podać nazwÄ™ î%
STDOUT oraz STDERR sÄ… 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 Narzędzia informatyczne w językoznawstwie 9/16 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 10/16
Wczytywanie danych z plików Zapisywanie danych do plików
1 open(IN , " < uchwyt . pl")
1 open(IN , " < uchwyt . pl")
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 ;
" znaków \n";
print OUT " Wiersz $ .. zawiera ". length ( $_ ).
}
" znaków \n";
close ( IN );
10 }
close ( IN );
î%
Funkcja open sł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 do STDERR
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 11/16 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 12/16
Operator diamentowy <> Tablica specjalna @ARGV
1 while ( < >) {
î%
Wewnętrznie operator diamentowy korzysta ze specjalnej
chomp ;
wbudowanej tablicy @ARGV
print " Wiersz $ .. zawiera ". length ( $_ ).
" znaków \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 z STDIN
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 13/16 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 14/16
Specjalny uchwyt plikowy DATA Podsumowanie
1 while () {
chomp ;
Wiemy teraz jak:
print " Wiersz $ .. zawiera ". length ( $_ ).
î%
Wczytywać dane z wejścia standardowego (też z klawiatury)
" znaków \n";
î%
5 } Wczytywać dane z dowolnego pliku
î%
Wczytywać dane ze środowiska DATA
__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
î%
Uchwyt DATA sł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 Narzędzia informatyczne w językoznawstwie 15/16 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 16/16


Wyszukiwarka