Perl/Ćwiczenie 3 odpowiedzi
< Perl
A. Czytanie i zapisywanie do plików
edytujopen(FILE, "plik.txt") || die("error reading file!!!\n"); @text=<FILE>; close FILE; open(PLIK1, '>', 'plik2.txt') || die("error writing file!!!\n"); print PLIK1 "@text"; close PLIK1;
B. Wyrażenia regularne
edytujIle wierszy ma każdy rozdział
edytujuse strict; open(P1,'<','ksiazka.txt') or die ("brak pliku ksiazka"); open(P2,'>','plik.txt') or die ('brak plku plik.txt'); my $r = 1; # numer rozdziału my $nl = 0; # liczba wierszy w rozdziale foreach (<P1>){ if ($_ =~ /^CHAPTER\s[IVX]+/){ # w rozdziałach są rzymskie cyfry if ($r != 1) { # najpierw wyświetlamy numer rozdziału, potem ilość wierszy print P2 "wierszy: $nl\n"; } print P2 "$_"; $r++; $nl = 0; # nowy rozdział, zerujemy liczbę wierszy } $nl++; # foreach wyciąga z uchwytu linię po linii. My tylko zliczamy } print P2 "wierszy: $nl\n"; # dla ostatniego rozdziału close(P1); close(P2);
Powtarzające się słowa
edytujWyjaśnić jak to działa. Skrypt znaleziony na angielskim blogu
#!/usr/bin/perl -n00 # dupwords.pl - find duplicate words in the input stream print "$ARGV: para $.: ($1)\n" while /(\b(\w+)\b\s+\b\2\b)/sg;
Wykrzyknienia i pytania
edytujJeśli w jednej linii są dwa pytajniki lub wykrzykniki, zliczam go jako jeden. Przerobić to!
open(P1,'<','ksiazka.txt') or die ("brak pliku ksiazka"); my $w = 0; my $p = 0; foreach (<P1>){ if ($_ =~ /\?{1}/){ $p++; } if ($_ =~ /!/){ $w++; } } print "W tekscie jest $w wykrzyknień.\n"; print "W tekscie jest $p pytań.\n"; close(P1);