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

Εύρεση και διαχείριση αρχείων

Στο παράδειγμα αναζήτησης σε πολλαπλά αρχεία υποχρεωθήκαμε να δηλώσουμε στην Perl τα ονόματα των αρχείων στα οποία επιθυμούσαμε να γίνει η αναζήτηση. Τι συμβαίνει όμως αν δεν γνωρίζαμε τα ονόματά τους (ή αν αλλάζουν συχνά και δεν θέλουμε να μπαίνουμε στον κώδικα και να πληκτρολογούμε τα ονόματα από την αρχή); Σε αυτή την περίπτωση χρειαζόμαστε μια διαδικασία για να βρίσκουμε αυτά τα ονόματα.

Η απλούστερη περίπτωση θα ήταν να θέλουμε η Perl να εκτελέσει αναζητήσεις σε όλα τα αρχεία. Θέλουμε λοιπόν να μάθουμε ποια είναι τα ονόματα των αρχείων που περιέχονται σε directory (φάκελο) Χ. Στο UNIX αυτό γίνεται με την εντολή ls και για να πούμε στην Perl να κάνει το ίδιο πρέπει να τοποθετήσουμε την ls μέσα στα λεγόμενα backtics (``). Έτσι ο κώδικάς μας από

my @list_of_files = ('whatnew.htm', 'whatnew2.htm');

γίνεται

my @list_of_files = `ls /home/gepiti/temp`;

ή αν θέλουμε να χρησιμοποιήσουμε μια μεταβλητή αντί για το όνομα του directory

my @list_of_files = `ls /$file_directory`;

(Υπενθυμίζεται ότι έχουμε ήδη ορίσει πως my $file_directory = '/home/gepiti/temp')

Τώρα τα ονόματα των αρχείων μπαίνουν αυτόματα στο array και το μόνο που πρέπει να φροντίζουμε είναι τα αρχεία μας (όσα κι αν είναι) να βρίσκονται στο σωστό directory.

Στην περίπτωση όμως που δεν θέλουμε να διαχειριστούμε όλα τα αρχεία ενός directory, αλλά μόνο ορισμένα από αυτά τα πράγματα γίνονται πιο περίπλοκα. Στο παραπάνω παράδειγμα μας ενδιαφέρουν μόνο τα αρχεία htm και για να το πετύχουμε αυτό θα χρησιμοποιήσουμε τις opendir, readdir grep closedir. Σε μια τέτοια περίπτωση ο κώδικάς μας γίνεται:

opendir (DIR, "$file_directory") || die "can't : $!";

my @list_of_files = grep /\.htm$/, readdir DIR;

closedir DIR;

Η opendir λειτουργεί όπως και η open με τη διαφορά ότι αντί για αρχείο (FILE) εδώ ανοίγουμε directory(DIR). Προσέξτε ότι στην πρόβλεψή μας για debugging (το die "can't : $!) δεν χρησιμοποιήσαμε τον τελεστή or αλλά το ισοδύναμό του ||. Αυτό έγινε για λόγους παρουσίασης του || και μόνο. Με το or θα λειτουργούσε το ίδιο καλά. (Τα and, or, not μπορούν να αντικατασταθούν από τα &&, || και ! αντίστοιχα.)

Στη δεύτερη γραμμή δηλώνουμε στην Perl ότι επιθυμούμε να κάνουμε match (να ταιριάξουμε) μόνο όσα αρχεία τελειώνουν σε .htm. Η grep () είναι μια συνάρτηση που μας επιτρέπει να φιλτράρουμε δεδομένα. Η σύνταξη που χρησιμοποιούμε εδώ είναι grep EXPR, LIST δηλαδή grep έκφραση (EXPR), περιοχή δεδομένων (LIST).

Όπως αναφέραμε αλλού η σύνταξη για ταίριασμα στοιχείων είναι /pattern/ δηλαδή /ό,τι_θέλουμε_να_ταιριάξει/ (το m από το m// που αναφέραμε σε άλλο σημείο εννοείται και μπορεί να απαλειφθεί) και το $ στο τέλος σημαίνει ότι θέλουμε να ταιριάξει το τέλος κάθε ακολουθίας χαρακτήρων (string). Η τελεία όμως είναι ειδικός χαρακτήρας στις εργασίες ταιριάσματος (matching) γι’ αυτό και για να μην μπερδεύεται το πρόγραμμα όταν θέλουμε να του δηλώσουμε ότι αυτή η . πρέπει να την διαχειριστεί ως τελεία και όχι κάτι άλλο βάζουμε μπροστά της την backslash. Έτσι, αντί να γράψουμε /.htm/ όπως θα ήταν και το φυσιολογικό γράφουμε /\.htm$/.

Για να γίνει καλύτερα κατανοητό αυτό ας φανταστούμε ότι θέλουμε να βρούμε σε κάποιο κείμενο την ακολουθία home/gepiti. Αυτό θα γραφτεί /home\/gepiti/ διαφορετικά η Perl θα νομίσει ότι ψάχνουμε για το /home/ και θα μας βγάλει μήνυμα λάθους γιατί δεν καταλαβαίνει τι θέλουμε να της πούμε με το gepiti.

Τέλος με την τρίτη γραμμή κλείνουμε το directory.


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


 

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


© Eeei.gr 2009