• Nie Znaleziono Wyników

Narzędzia informatyczne w językoznawstwie Perl - Podstawowe operacje wejścia/wyjścia Marcin Junczys-Dowmunt

N/A
N/A
Protected

Academic year: 2021

Share "Narzędzia informatyczne w językoznawstwie Perl - Podstawowe operacje wejścia/wyjścia Marcin Junczys-Dowmunt"

Copied!
60
0
0

Pełen tekst

(1)

Narzędzia informatyczne w językoznawstwie

Perl - Podstawowe operacje wejścia/wyjścia

Marcin Junczys-Dowmunt junczys@amu.edu.pl

Zakład Logiki Stosowanej http://www.logic.amu.edu.pl

5. grudnia 2007

(2)

Dzisiejszy wykład

I Omówimy sposoby wczytywania danych z wejścia standardowego1

I Zajmiemy się sposobami zapisu danych do wyjścia standardowego i wyjścia błędów

I Omówimy podstawowe sposoby odczytu i zapisu do plików

(3)

Dzisiejszy wykład

I Omówimy sposoby wczytywania danych z wejścia standardowego1

I Zajmiemy się sposobami zapisu danych do wyjścia standardowego i wyjścia błędów

I Omówimy podstawowe sposoby odczytu i zapisu do plików

(4)

Dzisiejszy wykład

I Omówimy sposoby wczytywania danych z wejścia standardowego1

I Zajmiemy się sposobami zapisu danych do wyjścia standardowego i wyjścia błędów

I Omówimy podstawowe sposoby odczytu i zapisu do plików

(5)

Potoki a Perl

C:\> perl test.pl < in.txt > out.txt 2> log.txt

I Podobnie jak w przypadku komend wiersza poleceń możemy przekierować strumienie wejścia/wyjścia

I Złożona komenda perl test.pl działa jak zwykła komenda wiersza poleceń

I W przykładzie przekierujemy plik in.txt na STDIN, zapisujemy STDOUT do out.txt, a STDERR do log.txt

I Najpierw musimy poznać wewnętrzne mechanizmy Perla pozwalające na przetwarzanie strumieni standardowych

(6)

Potoki a Perl

C:\> perl test.pl < in.txt > out.txt 2> log.txt

I Podobnie jak w przypadku komend wiersza poleceń możemy przekierować strumienie wejścia/wyjścia

I Złożona komenda perl test.pl działa jak zwykła komenda wiersza poleceń

I W przykładzie przekierujemy plik in.txt na STDIN, zapisujemy STDOUT do out.txt, a STDERR do log.txt

I Najpierw musimy poznać wewnętrzne mechanizmy Perla pozwalające na przetwarzanie strumieni standardowych

(7)

Potoki a Perl

C:\> perl test.pl < in.txt > out.txt 2> log.txt

I Podobnie jak w przypadku komend wiersza poleceń możemy przekierować strumienie wejścia/wyjścia

I Złożona komenda perl test.pl działa jak zwykła komenda wiersza poleceń

I W przykładzie przekierujemy plik in.txt na STDIN, zapisujemy STDOUT do out.txt, a STDERR do log.txt

I Najpierw musimy poznać wewnętrzne mechanizmy Perla pozwalające na przetwarzanie strumieni standardowych

(8)

Potoki a Perl

C:\> perl test.pl < in.txt > out.txt 2> log.txt

I Podobnie jak w przypadku komend wiersza poleceń możemy przekierować strumienie wejścia/wyjścia

I Złożona komenda perl test.pl działa jak zwykła komenda wiersza poleceń

I W przykładzie przekierujemy plik in.txt na STDIN, zapisujemy STDOUT do out.txt, a STDERR do log.txt

I Najpierw musimy poznać wewnętrzne mechanizmy Perla pozwalające na przetwarzanie strumieni standardowych

(9)

Potoki a Perl

C:\> perl test.pl < in.txt > out.txt 2> log.txt

I Podobnie jak w przypadku komend wiersza poleceń możemy przekierować strumienie wejścia/wyjścia

I Złożona komenda perl test.pl działa jak zwykła komenda wiersza poleceń

I W przykładzie przekierujemy plik in.txt na STDIN, zapisujemy STDOUT do out.txt, a STDERR do log.txt

I Najpierw musimy poznać wewnętrzne mechanizmy Perla pozwalające na przetwarzanie strumieni standardowych

(10)

Wczytywanie pojedynczego wiersza z STDIN

1 p r i n t " P o d a j i m i e : ";

$ n a m e = < STDIN >;

c h o m p $ n a m e ;

5

p r i n t " Witaj , \" $in \ " ! \ n ";

I z STDIN możemy jedynie wczytywać dane

I Służą do tego operator <...> oraz operator przypisania =

I Fragment STDIN to nazwa uchwytu do pliku, tutaj do wejścia standardowego

I Wywoływanie operatora <...> domyślnie powoduje wczytanie jednego wiersza wraz ze znakiem terminującym

I Funkcja chomp usuwa znaki terminujące

(11)

Wczytywanie pojedynczego wiersza z STDIN

1 p r i n t " P o d a j i m i e : ";

$ n a m e = < STDIN >;

c h o m p $ n a m e ;

5

p r i n t " Witaj , \" $in \ " ! \ n ";

I z STDIN możemy jedynie wczytywać dane

I Służą do tego operator <...> oraz operator przypisania =

I Fragment STDIN to nazwa uchwytu do pliku, tutaj do wejścia standardowego

I Wywoływanie operatora <...> domyślnie powoduje wczytanie jednego wiersza wraz ze znakiem terminującym

I Funkcja chomp usuwa znaki terminujące

(12)

Wczytywanie pojedynczego wiersza z STDIN

1 p r i n t " P o d a j i m i e : ";

$ n a m e = < STDIN >;

c h o m p $ n a m e ;

5

p r i n t " Witaj , \" $in \ " ! \ n ";

I z STDIN możemy jedynie wczytywać dane

I Służą do tego operator <...> oraz operator przypisania =

I Fragment STDIN to nazwa uchwytu do pliku, tutaj do wejścia standardowego

I Wywoływanie operatora <...> domyślnie powoduje wczytanie jednego wiersza wraz ze znakiem terminującym

I Funkcja chomp usuwa znaki terminujące

(13)

Kolejne wczytywanie wszystkich wierszy z STDIN

1 w h i l e(d e f i n e d( $ l i n e = < STDIN >)) { c h o m p $ l i n e ;

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $ l i n e ).

" z n a k o w \ n ";

5 }

I Kolejne wywołania operatora <...> wczytują kolejne wiersze

I Gdy operator dotrze do końca pliku zwraca wartość undef

I Funkcja defined sprawdza, czy dana wartość jest różna od undef – Dlaczego taka postać warunku?

I Zmienna specjalna $. zawiera aktualny numer wiersza

(14)

Kolejne wczytywanie wszystkich wierszy z STDIN

1 w h i l e(d e f i n e d( $ l i n e = < STDIN >)) { c h o m p $ l i n e ;

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $ l i n e ).

" z n a k o w \ n ";

5 }

I Kolejne wywołania operatora <...> wczytują kolejne wiersze

I Gdy operator dotrze do końca pliku zwraca wartość undef

I Funkcja defined sprawdza, czy dana wartość jest różna od undef – Dlaczego taka postać warunku?

I Zmienna specjalna $. zawiera aktualny numer wiersza

(15)

Kolejne wczytywanie wszystkich wierszy z STDIN

1 w h i l e(d e f i n e d( $ l i n e = < STDIN >)) { c h o m p $ l i n e ;

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $ l i n e ).

" z n a k o w \ n ";

5 }

I Kolejne wywołania operatora <...> wczytują kolejne wiersze

I Gdy operator dotrze do końca pliku zwraca wartość undef

I Funkcja defined sprawdza, czy dana wartość jest różna od undef – Dlaczego taka postać warunku?

I Zmienna specjalna $. zawiera aktualny numer wiersza

(16)

Kolejne wczytywanie wszystkich wierszy z STDIN

1 w h i l e(d e f i n e d( $ l i n e = < STDIN >)) { c h o m p $ l i n e ;

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $ l i n e ).

" z n a k o w \ n ";

5 }

I Kolejne wywołania operatora <...> wczytują kolejne wiersze

I Gdy operator dotrze do końca pliku zwraca wartość undef

I Funkcja defined sprawdza, czy dana wartość jest różna od undef – Dlaczego taka postać warunku?

I Zmienna specjalna $. zawiera aktualny numer wiersza

(17)

Kolejne wczytywanie wszystkich wierszy z STDIN

1 w h i l e(d e f i n e d( $ l i n e = < STDIN >)) { c h o m p $ l i n e ;

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $ l i n e ).

" z n a k o w \ n ";

5 }

I Kolejne wywołania operatora <...> wczytują kolejne wiersze

I Gdy operator dotrze do końca pliku zwraca wartość undef

I Funkcja defined sprawdza, czy dana wartość jest różna od undef – Dlaczego taka postać warunku?

I Zmienna specjalna $. zawiera aktualny numer wiersza

(18)

Kolejne wczytywanie wszystkich wierszy z STDIN (krócej)

1 w h i l e( < STDIN >) { c h o m p;

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $_ ).

" z n a k ó w \ n ";

5 }

I Taki zapis jest idiomem Perla równoważny z poprzednim przykładem

I Wewnętrznie te dwa programy niczym się nie różnią

I Brak jawnego zapisu do zmiennej, korzystamy ze zmiennej domyślnej $

I Ze zmienną domyślną spotkamy się jeszcze nieraz

(19)

Kolejne wczytywanie wszystkich wierszy z STDIN (krócej)

1 w h i l e( < STDIN >) { c h o m p;

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $_ ).

" z n a k ó w \ n ";

5 }

I Taki zapis jest idiomem Perla równoważny z poprzednim przykładem

I Wewnętrznie te dwa programy niczym się nie różnią

I Brak jawnego zapisu do zmiennej, korzystamy ze zmiennej domyślnej $

I Ze zmienną domyślną spotkamy się jeszcze nieraz

(20)

Kolejne wczytywanie wszystkich wierszy z STDIN (krócej)

1 w h i l e( < STDIN >) { c h o m p;

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $_ ).

" z n a k ó w \ n ";

5 }

I Taki zapis jest idiomem Perla równoważny z poprzednim przykładem

I Wewnętrznie te dwa programy niczym się nie różnią

I Brak jawnego zapisu do zmiennej, korzystamy ze zmiennej domyślnej $

I Ze zmienną domyślną spotkamy się jeszcze nieraz

(21)

Wczytywanie wszystkich wierszy z STDIN do tablicy

1 c h o m p( @ w i e r s z e = < STDIN >);

f o r e a c h ( @ w i e r s z e ) {

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $_ ).

" z n a k ó w \ n ";

5 }

I Użycie operatora <...> w kontekście listowym spowoduje wczytanie wszystkich wierszy do elementów tablicy

I Funkcja chomp wykonana na tablicy powoduje obcięcie znaków terminujących w każdym elemencie tablicy

I Znowu pojawia się zmienna domyślna $ – iteruje ona po wszystkich elementach tablicy

I Tutaj zmienna $. działa w sposób nieoczekiwany – dlaczego?

(22)

Wczytywanie wszystkich wierszy z STDIN do tablicy

1 c h o m p( @ w i e r s z e = < STDIN >);

f o r e a c h ( @ w i e r s z e ) {

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $_ ).

" z n a k ó w \ n ";

5 }

I Użycie operatora <...> w kontekście listowym spowoduje wczytanie wszystkich wierszy do elementów tablicy

I Funkcja chomp wykonana na tablicy powoduje obcięcie znaków terminujących w każdym elemencie tablicy

I Znowu pojawia się zmienna domyślna $ – iteruje ona po wszystkich elementach tablicy

I Tutaj zmienna $. działa w sposób nieoczekiwany – dlaczego?

(23)

Wczytywanie wszystkich wierszy z STDIN do tablicy

1 c h o m p( @ w i e r s z e = < STDIN >);

f o r e a c h ( @ w i e r s z e ) {

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $_ ).

" z n a k ó w \ n ";

5 }

I Użycie operatora <...> w kontekście listowym spowoduje wczytanie wszystkich wierszy do elementów tablicy

I Funkcja chomp wykonana na tablicy powoduje obcięcie znaków terminujących w każdym elemencie tablicy

I Znowu pojawia się zmienna domyślna $ – iteruje ona po wszystkich elementach tablicy

I Tutaj zmienna $. działa w sposób nieoczekiwany – dlaczego?

(24)

Wczytywanie wszystkich wierszy z STDIN do tablicy

1 c h o m p( @ w i e r s z e = < STDIN >);

f o r e a c h ( @ w i e r s z e ) {

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $_ ).

" z n a k ó w \ n ";

5 }

I Użycie operatora <...> w kontekście listowym spowoduje wczytanie wszystkich wierszy do elementów tablicy

I Funkcja chomp wykonana na tablicy powoduje obcięcie znaków terminujących w każdym elemencie tablicy

I Znowu pojawia się zmienna domyślna $ – iteruje ona po wszystkich elementach tablicy

I Tutaj zmienna $. działa w sposób nieoczekiwany – dlaczego?

(25)

Wczytywanie wszystkich wierszy z STDIN do tablicy

1 c h o m p( @ w i e r s z e = < STDIN >);

f o r e a c h ( @ w i e r s z e ) {

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $_ ).

" z n a k ó w \ n ";

5 }

I Użycie operatora <...> w kontekście listowym spowoduje wczytanie wszystkich wierszy do elementów tablicy

I Funkcja chomp wykonana na tablicy powoduje obcięcie znaków terminujących w każdym elemencie tablicy

I Znowu pojawia się zmienna domyślna $ – iteruje ona po wszystkich elementach tablicy

I Tutaj zmienna $. działa w sposób nieoczekiwany – dlaczego?

(26)

Zapisywanie do STDOUT

1 p r i n t S T D O U T " W y p i s u j e m y d a n e do S T D O U T ";

I Wyjście standardowe jest takie jak jego nazwa wskazuje

I Korzystając z print domyślnie (standardowo!) zapisujemy do wyjścia standardowego STDOUT

I Możemy więc opuścić nazwę uchwytu:

1 p r i n t " W y p i s u j e m y d a n e do S T D O U T ";

(27)

Zapisywanie do STDOUT

1 p r i n t S T D O U T " W y p i s u j e m y d a n e do S T D O U T ";

I Wyjście standardowe jest takie jak jego nazwa wskazuje

I Korzystając z print domyślnie (standardowo!) zapisujemy do wyjścia standardowego STDOUT

I Możemy więc opuścić nazwę uchwytu:

1 p r i n t " W y p i s u j e m y d a n e do S T D O U T ";

(28)

Zapisywanie do STDOUT

1 p r i n t S T D O U T " W y p i s u j e m y d a n e do S T D O U T ";

I Wyjście standardowe jest takie jak jego nazwa wskazuje

I Korzystając z print domyślnie (standardowo!) zapisujemy do wyjścia standardowego STDOUT

I Możemy więc opuścić nazwę uchwytu:

1 p r i n t " W y p i s u j e m y d a n e do S T D O U T ";

(29)

Zapisywanie do STDOUT

1 p r i n t S T D O U T " W y p i s u j e m y d a n e do S T D O U T ";

I Wyjście standardowe jest takie jak jego nazwa wskazuje

I Korzystając z print domyślnie (standardowo!) zapisujemy do wyjścia standardowego STDOUT

I Możemy więc opuścić nazwę uchwytu:

1 p r i n t " W y p i s u j e m y d a n e do S T D O U T ";

(30)

Zapisywanie do STDERR

1 p r i n t S T D E R R " W y p i s u j e m y d a n e do S T D E R R ";

I Gdy zapisujemy dane do STDERR, musimy jawnie podać nazwę uchwytu

(31)

Uchwyty do plików

I Poznaliśmy juz trzy standardowe uchwyty do plików (wirtualnych): STDIN, STDOUT i STDERR

I STDIN to uchwyt otwarty tylko do odczytu

I STDOUT oraz STDERR są otwarte tylko do zapisu

I Możemy tworzyć własne uchwyty do konkretnych plików

I Własne uchwyty obsługujemy tak samo jak uchwyty standardowe

(32)

Uchwyty do plików

I Poznaliśmy juz trzy standardowe uchwyty do plików (wirtualnych): STDIN, STDOUT i STDERR

I STDIN to uchwyt otwarty tylko do odczytu

I STDOUT oraz STDERR są otwarte tylko do zapisu

I Możemy tworzyć własne uchwyty do konkretnych plików

I Własne uchwyty obsługujemy tak samo jak uchwyty standardowe

(33)

Uchwyty do plików

I Poznaliśmy juz trzy standardowe uchwyty do plików (wirtualnych): STDIN, STDOUT i STDERR

I STDIN to uchwyt otwarty tylko do odczytu

I STDOUT oraz STDERR są otwarte tylko do zapisu

I Możemy tworzyć własne uchwyty do konkretnych plików

I Własne uchwyty obsługujemy tak samo jak uchwyty standardowe

(34)

Uchwyty do plików

I Poznaliśmy juz trzy standardowe uchwyty do plików (wirtualnych): STDIN, STDOUT i STDERR

I STDIN to uchwyt otwarty tylko do odczytu

I STDOUT oraz STDERR są otwarte tylko do zapisu

I Możemy tworzyć własne uchwyty do konkretnych plików

I Własne uchwyty obsługujemy tak samo jak uchwyty standardowe

(35)

Uchwyty do plików

I Poznaliśmy juz trzy standardowe uchwyty do plików (wirtualnych): STDIN, STDOUT i STDERR

I STDIN to uchwyt otwarty tylko do odczytu

I STDOUT oraz STDERR są otwarte tylko do zapisu

I Możemy tworzyć własne uchwyty do konkretnych plików

I Własne uchwyty obsługujemy tak samo jak uchwyty standardowe

(36)

Wczytywanie danych z plików

1 o p e n( IN , " < u c h w y t . pl ")

or die " p l i k nie i s t n i e j e ";

w h i l e( < IN >) {

5 c h o m p;

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $_ ).

" z n a k ó w \ n "; }

c l o s e( IN );

I Funkcja open służy do tworzenie własnych uchwytów

I Podajemy dwa argumenty: nazwę uchwytu, sposób korzystania z pliku połączony nazwę pliku

I Sposób korzystania dla pliku tylko do odczytu oznaczamy przez <

(37)

Wczytywanie danych z plików

1 o p e n( IN , " < u c h w y t . pl ")

or die " p l i k nie i s t n i e j e ";

w h i l e( < IN >) {

5 c h o m p;

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $_ ).

" z n a k ó w \ n "; }

c l o s e( IN );

I Funkcja open służy do tworzenie własnych uchwytów

I Podajemy dwa argumenty: nazwę uchwytu, sposób korzystania z pliku połączony nazwę pliku

I Sposób korzystania dla pliku tylko do odczytu oznaczamy przez <

(38)

Wczytywanie danych z plików

1 o p e n( IN , " < u c h w y t . pl ")

or die " p l i k nie i s t n i e j e ";

w h i l e( < IN >) {

5 c h o m p;

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $_ ).

" z n a k ó w \ n "; }

c l o s e( IN );

I Funkcja open służy do tworzenie własnych uchwytów

I Podajemy dwa argumenty: nazwę uchwytu, sposób korzystania z pliku połączony nazwę pliku

I Sposób korzystania dla pliku tylko do odczytu oznaczamy przez <

(39)

Wczytywanie danych z plików

1 o p e n( IN , " < u c h w y t . pl ")

or die " p l i k nie i s t n i e j e ";

w h i l e( < IN >) {

5 c h o m p;

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $_ ).

" z n a k ó w \ n "; }

c l o s e( IN );

I Funkcja open służy do tworzenie własnych uchwytów

I Podajemy dwa argumenty: nazwę uchwytu, sposób korzystania z pliku połączony nazwę pliku

I Sposób korzystania dla pliku tylko do odczytu oznaczamy

(40)

Zapisywanie danych do plików

1 o p e n( IN , " < u c h w y t . pl ")

or die " p l i k nie i s t n i e j e "; o p e n( OUT , " > log . txt ")

or die " Nie m o g l e m z a p i s a c d a n y c h ";

5

w h i l e( < IN >) { c h o m p;

p r i n t OUT " W i e r s z $ .. z a w i e r a ".l e n g t h( $_ ).

" z n a k ó w \ n ";

10 }

c l o s e( IN );

c l o s e( OUT );

I Sposób korzystania z uchwytu oznaczamy przez >

I Jak będzie działał znak > a jak znak >> ?

I Zapis do pliku odbywa się jak poprzednio do STDERR

(41)

Zapisywanie danych do plików

1 o p e n( IN , " < u c h w y t . pl ")

or die " p l i k nie i s t n i e j e "; o p e n( OUT , " > log . txt ")

or die " Nie m o g l e m z a p i s a c d a n y c h ";

5

w h i l e( < IN >) { c h o m p;

p r i n t OUT " W i e r s z $ .. z a w i e r a ".l e n g t h( $_ ).

" z n a k ó w \ n ";

10 }

c l o s e( IN );

c l o s e( OUT );

I Sposób korzystania z uchwytu oznaczamy przez >

I Jak będzie działał znak > a jak znak >> ?

I Zapis do pliku odbywa się jak poprzednio do STDERR

(42)

Zapisywanie danych do plików

1 o p e n( IN , " < u c h w y t . pl ")

or die " p l i k nie i s t n i e j e "; o p e n( OUT , " > log . txt ")

or die " Nie m o g l e m z a p i s a c d a n y c h ";

5

w h i l e( < IN >) { c h o m p;

p r i n t OUT " W i e r s z $ .. z a w i e r a ".l e n g t h( $_ ).

" z n a k ó w \ n ";

10 }

c l o s e( IN );

c l o s e( OUT );

I Sposób korzystania z uchwytu oznaczamy przez >

I Jak będzie działał znak > a jak znak >> ?

I Zapis do pliku odbywa się jak poprzednio do STDERR

(43)

Zapisywanie danych do plików

1 o p e n( IN , " < u c h w y t . pl ")

or die " p l i k nie i s t n i e j e "; o p e n( OUT , " > log . txt ")

or die " Nie m o g l e m z a p i s a c d a n y c h ";

5

w h i l e( < IN >) { c h o m p;

p r i n t OUT " W i e r s z $ .. z a w i e r a ".l e n g t h( $_ ).

" z n a k ó w \ n ";

10 }

c l o s e( IN );

c l o s e( OUT );

I Sposób korzystania z uchwytu oznaczamy przez >

I Jak będzie działał znak > a jak znak >> ?

(44)

Operator diamentowy <>

1 w h i l e( < >) { c h o m p;

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $_ ).

" z n a k ó w \ n ";

5 }

I Operator diamentowy to kolejny idiom perlowy (perlizm)

I 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

I Gdy nie podamy żadnego pliku, wczytuje dane z STDIN

(45)

Operator diamentowy <>

1 w h i l e( < >) { c h o m p;

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $_ ).

" z n a k ó w \ n ";

5 }

I Operator diamentowy to kolejny idiom perlowy (perlizm)

I 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

I Gdy nie podamy żadnego pliku, wczytuje dane z STDIN

(46)

Operator diamentowy <>

1 w h i l e( < >) { c h o m p;

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $_ ).

" z n a k ó w \ n ";

5 }

I Operator diamentowy to kolejny idiom perlowy (perlizm)

I 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

I Gdy nie podamy żadnego pliku, wczytuje dane z STDIN

(47)

Operator diamentowy <>

1 w h i l e( < >) { c h o m p;

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $_ ).

" z n a k ó w \ n ";

5 }

I Operator diamentowy to kolejny idiom perlowy (perlizm)

I 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

I Gdy nie podamy żadnego pliku, wczytuje dane z STDIN

(48)

Tablica specjalna @ARGV

I Wewnętrznie operator diamentowy korzysta ze specjalnej wbudowanej tablicy @ARGV

I Ta tablica zawiera wszystkie argumenty podane w wierszu poleceń za nazwą programu

1 for( $i = 0; $i < @ A R G V ; $i ++) {

p r i n t " E l e m e n t o i n d e k s i e $i to $ A R G V [ $i ]\ n "; }

Możemy wykonać powyższy program np. w taki sposób: perl argv.pl zupa tygrys 45 tango 5.7 -h test

(49)

Tablica specjalna @ARGV

I Wewnętrznie operator diamentowy korzysta ze specjalnej wbudowanej tablicy @ARGV

I Ta tablica zawiera wszystkie argumenty podane w wierszu poleceń za nazwą programu

1 for( $i = 0; $i < @ A R G V ; $i ++) {

p r i n t " E l e m e n t o i n d e k s i e $i to $ A R G V [ $i ]\ n ";

}

Możemy wykonać powyższy program np. w taki sposób: perl argv.pl zupa tygrys 45 tango 5.7 -h test

(50)

Tablica specjalna @ARGV

I Wewnętrznie operator diamentowy korzysta ze specjalnej wbudowanej tablicy @ARGV

I Ta tablica zawiera wszystkie argumenty podane w wierszu poleceń za nazwą programu

1 for( $i = 0; $i < @ A R G V ; $i ++) {

p r i n t " E l e m e n t o i n d e k s i e $i to $ A R G V [ $i ]\ n ";

}

Możemy wykonać powyższy program np. w taki sposób:

perl argv.pl zupa tygrys 45 tango 5.7 -h test

(51)

Specjalny uchwyt plikowy DATA

1 w h i l e( < DATA >) { c h o m p;

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $_ ).

" z n a k ó w \ n ";

5 }

_ _ E N D _ _

T a k i s o b i e t e k s t k t o r y s l u z y

10 j e d y n i e p r z y k l a d e m

I Uchwyt DATA służy tylko do odczytu danych zapisanych po END , kod Perla tutaj nie działa

I Przydatne przy testowaniu programów, nie trzeba tworzyć zewnętrznych plików

(52)

Specjalny uchwyt plikowy DATA

1 w h i l e( < DATA >) { c h o m p;

p r i n t " W i e r s z $ .. z a w i e r a ".l e n g t h( $_ ).

" z n a k ó w \ n ";

5 }

_ _ E N D _ _

T a k i s o b i e t e k s t k t o r y s l u z y

10 j e d y n i e p r z y k l a d e m

I Uchwyt DATA służy tylko do odczytu danych zapisanych po END , kod Perla tutaj nie działa

I Przydatne przy testowaniu programów, nie trzeba tworzyć zewnętrznych plików

(53)

Podsumowanie

Wiemy teraz jak:

I Wczytywać dane z wejścia standardowego (też z klawiatury)

I Wczytywać dane z dowolnego pliku

I Wczytywać dane ze środowiska DATA

I Korzystać ze zmiennej wbudowanej @ARGV

I Zapisywać dane do wyjścia standardowego i wyjścia błędów

I Zapisywać dane do dowolnego pliku

Wniosek: Nasze programy od tej chwili potrafią się komunikować ze światem zewnętrznym

(54)

Podsumowanie

Wiemy teraz jak:

I Wczytywać dane z wejścia standardowego (też z klawiatury)

I Wczytywać dane z dowolnego pliku

I Wczytywać dane ze środowiska DATA

I Korzystać ze zmiennej wbudowanej @ARGV

I Zapisywać dane do wyjścia standardowego i wyjścia błędów

I Zapisywać dane do dowolnego pliku

Wniosek: Nasze programy od tej chwili potrafią się komunikować ze światem zewnętrznym

(55)

Podsumowanie

Wiemy teraz jak:

I Wczytywać dane z wejścia standardowego (też z klawiatury)

I Wczytywać dane z dowolnego pliku

I Wczytywać dane ze środowiska DATA

I Korzystać ze zmiennej wbudowanej @ARGV

I Zapisywać dane do wyjścia standardowego i wyjścia błędów

I Zapisywać dane do dowolnego pliku

Wniosek: Nasze programy od tej chwili potrafią się komunikować ze światem zewnętrznym

(56)

Podsumowanie

Wiemy teraz jak:

I Wczytywać dane z wejścia standardowego (też z klawiatury)

I Wczytywać dane z dowolnego pliku

I Wczytywać dane ze środowiska DATA

I Korzystać ze zmiennej wbudowanej @ARGV

I Zapisywać dane do wyjścia standardowego i wyjścia błędów

I Zapisywać dane do dowolnego pliku

Wniosek: Nasze programy od tej chwili potrafią się komunikować ze światem zewnętrznym

(57)

Podsumowanie

Wiemy teraz jak:

I Wczytywać dane z wejścia standardowego (też z klawiatury)

I Wczytywać dane z dowolnego pliku

I Wczytywać dane ze środowiska DATA

I Korzystać ze zmiennej wbudowanej @ARGV

I Zapisywać dane do wyjścia standardowego i wyjścia błędów

I Zapisywać dane do dowolnego pliku

Wniosek: Nasze programy od tej chwili potrafią się komunikować ze światem zewnętrznym

(58)

Podsumowanie

Wiemy teraz jak:

I Wczytywać dane z wejścia standardowego (też z klawiatury)

I Wczytywać dane z dowolnego pliku

I Wczytywać dane ze środowiska DATA

I Korzystać ze zmiennej wbudowanej @ARGV

I Zapisywać dane do wyjścia standardowego i wyjścia błędów

I Zapisywać dane do dowolnego pliku

Wniosek: Nasze programy od tej chwili potrafią się komunikować ze światem zewnętrznym

(59)

Podsumowanie

Wiemy teraz jak:

I Wczytywać dane z wejścia standardowego (też z klawiatury)

I Wczytywać dane z dowolnego pliku

I Wczytywać dane ze środowiska DATA

I Korzystać ze zmiennej wbudowanej @ARGV

I Zapisywać dane do wyjścia standardowego i wyjścia błędów

I Zapisywać dane do dowolnego pliku

Wniosek: Nasze programy od tej chwili potrafią się komunikować ze światem zewnętrznym

(60)

Podsumowanie

Wiemy teraz jak:

I Wczytywać dane z wejścia standardowego (też z klawiatury)

I Wczytywać dane z dowolnego pliku

I Wczytywać dane ze środowiska DATA

I Korzystać ze zmiennej wbudowanej @ARGV

I Zapisywać dane do wyjścia standardowego i wyjścia błędów

I Zapisywać dane do dowolnego pliku

Wniosek: Nasze programy od tej chwili potrafią się komunikować ze światem zewnętrznym

Cytaty

Powiązane dokumenty

◮ Hasz jest strukturą podobną do tablicy, ale zamiast indeksów liczbowych hasz używa kluczy.?. Co to

Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 18/24.. póki tablica @pokoj zawiera więcej niż

I Parser strumieniowy udostępnia dane zanim sprawdzi poprawność składniową dokumentu. I Wymagania pamięciowe takich parserów są niskie i możemy przetwarzać wielkie dokumenty

I Cała struktura danych jest przechowywana w pamięci, w przypadku dużych dokumentów XML może to stanowić poważny problem.. Struktura danych może zajmować do 30 razy tyle pamięci

I Wszystkie dane wyjściowe konwertujemy po zakończeniu przetwarzania z kodowania wewnętrznego Perla do kodowania

I Tablica składająca się z samych kluczy tego hasza jest tablicą zawierająca tylko niepowtarzające się elementy z @tablica. Marcin Junczys-Dowmunt Narzędzia informatyczne

Najpierw wykonamy nasz program z poziomu wiersza poleceń komendą (o ile znajdujemy się w tym samym katalogu) perl hello.pl. Marcin Junczys-Dowmunt Narzędzia informatyczne

Każde narzędzie informatyczne działające na danych lingwistycznych musi brać pod uwagę następujące aspekty:. ◮ Wielojęzyczność