Perl/Ćwiczenie 3 odpowiedzi
Wygląd
< Perl
A. Czytanie i zapisywanie do plików
[edytuj] open(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
[edytuj]Ile wierszy ma każdy rozdział
[edytuj] use 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
[edytuj]Wyjaś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
[edytuj]Jeś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);