Hallo,
wollte in Perl etwas ahnliches machen. Ich habe eine Liste von Wörtern mit Komma getrennt. (Bsp: heute, morgen, usw, ...)
Ich will diese liste auf einem Text laufen lassen. Wenn in diesem Text Wörter vokommen die in Meine Liste sind dann will ich diese Wörtern markieren.
Ist das möglich mit Perl und wie könnte es ausschauen,
vielen Dank im vorraus,
gruss, andy
User since
2003-08-04
14371
Artikel
ModeratorIn
Was meinst Du mit "markieren"??
User since
2003-08-04
5870
Artikel
ModeratorIn
Oder vielleicht in einem Text-Widget (Perl/Tk)? Da könnte man Tags einbringen und die Darstellung entsprechend ändern, so dass die Textstellen markiert sind?
Offtopic: Igitt, ein font-tag *schauder* ...\n\n
<!--EDIT|Crian|1109085011-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite
User since
2003-08-04
14371
Artikel
ModeratorIn
War ja nur ein Vorschlag!
User since
2005-02-22
2
Artikel
BenutzerIn
hallo rene,
danke für die Hilfe. Mein problem ist folgendes.
Ich habe die Datei einträge.txt. Sie beinhaltet folgendes:
Montag, 11.10.2005
Dienstag, 12.10.2005
Mittwoch, 13.10.2005
usw.
Aus dieser Datei will ich nur den Ersten Eintrag, dass mit komma getrennt ist raus holen. hier würde so eine Liste sein :
Montag
Dienstag
Mittwoch
...
Ich habe auch folgendes Text:
Am Montag gehen wir ins Kino. Es gibt ein schönes fussballspiel am Mittwoch.... usw.
Aus dieser text will ich die nur die Wörter markieren die ich in meine Liste hab. hier wäre Montag, Mittwoch.
Mit markieren meine ich so, Am <mark>Montag</mark> gehen wir ins kino. Es gibt ein schönes fussballspiel am <mark>Mittwoch</mark>
ich habe so angefangen:
open(FILE1, $ARGV[0])|| die "could not open file";
while(<FILE1>){
chomp;
@Felder=split(/,/,$_);
}
wie soll ich dass was ich in der Liste hab mit dem was aus dem Text steht vergleichen???
Bitte um hilfe.
vielen Dank,
gruss, fatalis
Ungetestet:
push @felder, $1 if /^([a-z]+),/i;
oder
my $days = join '|', qw( Montag Dienstag ); #fortsetzen
# und im while:
push @felder, $1 if /^($days),/i;
Wie gesagt, spontan und ungetestet. Was du mit der zweiten Datei genau vorhast, weiss ich nicht, daher spare ich mir vorerst Code dazu.\n\n
<!--EDIT|phaylon|1109098385-->
User since
2003-08-04
2145
Artikel
ModeratorIn + EditorIn
[quote=phaylon,22.02.2005, 19:51]Ungetestet:
push @felder, $1 if /^([a-z]+),/i;
oder
my $days = join '|', qw( Montag Dienstag ); #fortsetzen
# und im while:
push @felder, $1 if /^($days),/i;
[/quote]
Die letzte Zeile sollte wohl eher so aehnlich lauten:
s~($days)~<mark>$1</mark>~g;
Also im Zusammenhang:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use strict;
use warnings;
my @stichworte;
open (EINTRAEGE, "eintraege.txt") or die $!;
while (<EINTRAEGE>) {
push @stichworte, $1 if /^(\w+),/;
}
close EINTRAEGE;
# Regex zusammenbasteln
my $verodert = join '|', @stichworte;
while (<>) { # lies von STDIN oder aus Dateien aus @ARGV
s~($verodert)~<mark>$1</mark>~gi;
print;
}
(ungetestet)
Ah, jetzt weiss ich auch, worum's geht. thx. :D
User since
2005-02-22
2
Artikel
BenutzerIn
hallo,
vielen Dank, an allen für die Hilfe.
hier der Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use strict;
use warnings;
my @file;
my @stichworte;
open(FILE1, $ARGV[0])|| die "could not open file";
while (<FILE1>) {
push @stichworte, $1 if /^(\w+),/;
}
close FILE1;
# Regex zusammenbasteln
my $verodert = join '|', @stichworte;
open(FILE2, $ARGV[1])|| die "could not open file";
while (<FILE2>) { # aus Dateien aus @ARGV
s~($verodert)~<mark>$1</mark>~gi;
push @file, $_;
print @file;
}
close FILE2;
der Script funktioniert aber es werden auch solche wörter markiert die ich nicht markieren will. Bsp im Satz:
Montagabend gehe ich.. wird markiert: <mark>Montag</mark>abend gehe ich..
Also ich will nicht dass Montagabend markiert wird, aber Montag schon. Wie kann mann des Umgehen?
edit renee: ne Runde [code]-Tags spendiert\n\n
<!--EDIT|renee|1109115898-->