Δημοσιεύτηκε: 24 Φεβ 2013, 23:33
simosx έγραψε:SAMSONIC έγραψε:
Πως γίνεται να βρούμε μια λέξη μέσα σε ένα αρχείο κειμένου και αφού βρεθεί αυτή η λέξη να τυπωθεί στην οθόνη μια άλλη λέξη που θα βρίσκεται στην ίδια γραμμή ή σε κάποια επόμενη?
π.χ. το κείμενο είναι:
μπλα μπλα μπλα λέξη μπλα μπλα μπλα μπλα μπλα 24/02/2013 μπλα μπλα μπλα
και να τυπώνεται η ημερομηνία.
Με Perl
- Μορφοποιημένος Κώδικας: Επιλογή όλων
if ( m/λέξη/ )
{
if ( m/(\d+)\/(\d+)\/(\d+)/ )
{
print "Βρέθηκε ημερομηνία: $1-$2-$3\n";
}
}
Το αποπάνω έχει το πρόβλημα ότι μπορεί άλλη ημερομηνία να βρίσκεται πριν από τη λέξη. Θεωρώντας ότι το κείμενο περιέχεται στη μεταβλητή $line, καλύτερο είναι το εξής:
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
if (
$line =~ /$word # lexi
.*? # otidipote allo anamesa (non-greedy)
(\d{2}\/\d{2}\/\d{4}) # imerominia ws dd/mm / yyyy
/ xs
)
{
print $1 . "\n";
}
Αυτό θα δώσει το πρώτο hit μόνο. Αν θέλεις πολλαπλά hits, τότε ο κώδικας γίνεται:
- Μορφοποιημένος Κώδικας: Επιλογή όλων
-
while ( $line =~ /$word/ )
{
if (
$line =~ /$word # lexi
.*? # otidipote allo anamesa (non-greedy)
(\d{2}\/\d{2}\/\d{4}) # imerominia ws dd/mm/yyyy
/xs
)
{
print $1 . "\n";
$line = $';
}
}
Το αποπάνω θεωρεί ότι όντως ακολουθεί ημερομηνία μετά τη λέξη, αλλιώς θα πέσει σε endless loop. Αν και υπάρχει τρόπος να προβλεφθεί και αυτό...