[eeei.gr Logo]
Επικοινωνία
Ταυτότητα
Μαθήματα Internet | Μαθήματα Προγραμματισμού | Net Business | Τα νέα του Internet | Ο Κόσμος του Αύριο

Η «μαγική» while

Χάρη στην Perl, συχνά με πολύ λίγο κώδικα μπορούμε να επιτύχουμε πάρα πολλά πράγματα. Ας δούμε το ακόλουθο παράδειγμα όπου ψάχνουμε για να βρούμε σε ποια σημεία (γραμμές) ενός αρχείου περιέχεται κάποια ακολουθία χαρακτήρων (η λέξη αποδοτικά):

#!/usr/bin/perl -w

use strict;

open (FILE, 'whatnew.htm') or die "can't open whatnew.htm $!";

Μέχρι τώρα διαχειριστήκαμε μόνο δεδομένα που λαμβάναμε από το πληκτρολόγιο (STDIN, δηλαδή standart input). Πιθανώς όμως να επιθυμούμε τη διαχείριση του περιεχομένου κάποιου αρχείου (στην περίπτωσή μας του αρχείου whatnew.htm). Τότε θα πρέπει να δηλώσουμε στην Perl ότι θέλουμε να ανοίξει κάποιο αρχείο και να της πούμε ποιο αρχείο είναι αυτό.

Με το open (FILE, 'whatnew.htm') επιτυγχάνουμε και τους δύο αυτούς στόχους. Το FILE δηλώνει στην Perl ότι πρέπει να διαχειριστεί ένα αρχείο (γι’ αυτό και στη βιβλιογραφία θα το δείτε να ονομάζεται filehandle), ενώ μέσα στις αποστρόφους υπάρχει το όνομα του αρχείου.

Όπως αναφέραμε και σε άλλο σημείο ο καλός προγραμματιστής πρέπει να προβλέπει όλες τις δυνατές πιθανότητες. Στην προκειμένη περίπτωση λοιπόν δεν αρκεί να δηλώσουμε στην Perl ποιο αρχείο να ανοίξει, αλλά και τι θα κάνει στην περίπτωση που δεν είναι δυνατόν να ανοιχθεί το αρχείο (π.χ. δεν υπάρχει). Γι’ αυτό και προσθέσαμε το

or die "can't open whatnew.htm $!"

Το or είναι ένας λογικός τελεστής (το ή δηλαδή το διαζευκτικό στα Ελληνικά) που δηλώνει στην Perl τι να πράξει αν τα πράγματα δεν πάνε καλά (δηλαδή αν δεν ανοίξει το αρχείο). Και αυτό που της λέμε είναι να διακόψει το πρόγραμμα (die), τυπώνοντας στην οθόνη τη φράση can't open whatnew.htm ακολουθούμενη από την τιμή της παραμέτρου $!

Η $! είναι μια ειδική παράμετρος η οποία περιέχει πάντοτε το τρέχον μήνυμα λάθους του συστήματος. Όταν λοιπόν προσπαθήσουμε να τρέξουμε το πρόγραμμα και αποτύχουμε το σύστημα θα δημιουργήσει ένα μήνυμα λάθους (π.χ. δεν έχετε δικαιώματα να τρέξετε το αρχείο, το αρχείο δεν υπάρχει κ.λπ.) το οποίο θα αποθηκευτεί στην $!. Προσθέτοντας λοιπόν την $! σε όσα μας δηλώνει η die, θα μπορέσουμε να δούμε αμέσως για ποιο λόγο τερμάτισε πρόωρα το πρόγραμμά μας και θα διορθώσουμε το πρόβλημα που έχει δημιουργηθεί με πολύ μεγαλύτερη ευκολία.

while (<FILE>) {

Όσο είναι ανοιχτό το αρχείο (ή όπως θα δούμε αλλού τα αρχεία) και το επεξεργαζόμαστε

if (m/αποδοτικά/) {

όπου βρεις τη λέξη αποδοτικά

print "$_";

Τύπωσε την $_. Η $_ είναι μια πολύτιμη «μαγική» παράμετρος η οποία αναφέρεται σε μια γραμμή κειμένου και περιέχει διαδοχικά όλες γραμμές του αρχείου μας (δηλαδή εδώ του whatnew.htm). Αντί λοιπόν να γράψουμε ειδικό κώδικα ο οποίος να λέει στην Perl «πέρασε μια μια όλες τις γραμμές του αρχείου και όπου βρεις τη λέξη αποδοτικά τύπωσέ μου όλη τη γραμμή», της λέμε «αν βρεις το αποδοτικά τύπωσε την τρέχουσα γραμμή» (δηλαδή την $_). Η Perl είναι αρκετά έξυπνη για να καταλάβει ότι αφού «εδώ» βρήκε τη λέξη αποδοτικά, άρα αυτή είναι η τρέχουσα γραμμή και έτσι την τυπώνει, συνεχίζοντας αμέσως μετά το ψάξιμο για την επόμενη εμφάνιση της λέξης αποδοτικά.

}

Κλείνει το άγκιστρο του block print "$_";

}

Κλείνει το άγκιστρο του block που ορίζει η While

close FILE;

Αφού τελείωσε η εργασία (η while έφθασε στο τέλος του αρχείου και τερμάτισε) κλείνουμε το αρχείο.

Ο πλήρης κώδικας που περιγράφηκε παραπάνω είναι ο:

#!/usr/bin/perl -w

use strict;

open (FILE, 'whatnew.htm') or die "can't open whatnew.htm $!";

while (<FILE>) {

if (m/αποδοτικά/) {

print "$_";

}

}

close FILE;


Τρέχουσα Ενότητα: Perl


 

Φιλικά - συνεργαζόμενα sites: Left Handed Products


© Eeei.gr 2009