Schrift
[thread]6726[/thread]

Perl - Textverarbeitung

Leser: 1


<< |< 1 2 >| >> 12 Einträge, 2 Seiten
Gast Gast
 2005-02-22 16:10
#51927 #51927
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
renee
 2005-02-22 16:33
#51928 #51928
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Was meinst Du mit "markieren"??
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
renee
 2005-02-22 16:37
#51929 #51929
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
mit html-Tags markieren:
Code: (dl )
1
2
3
4
5
my @liste = qw(heute morgen);
my $text = 'heute war ein toller morgen. morgen wird es noch besser';
my $regex = join "|",@liste;
$text =~ s!($regex)!<font color="red">$1</font>!g;
print $text;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Crian
 2005-02-22 17:09
#51930 #51930
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
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
renee
 2005-02-22 17:12
#51931 #51931
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
War ja nur ein Vorschlag!
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
fatalis
 2005-02-22 18:15
#51932 #51932
User since
2005-02-22
2 Artikel
BenutzerIn
[default_avatar]
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
Gast Gast
 2005-02-22 20:51
#51933 #51933
Ungetestet:
Code: (dl )
push @felder, $1 if /^([a-z]+),/i;

oder
Code: (dl )
1
2
3
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-->
Dubu
 2005-02-22 23:19
#51934 #51934
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=phaylon,22.02.2005, 19:51]Ungetestet:
Code: (dl )
push @felder, $1 if /^([a-z]+),/i;

oder
Code: (dl )
1
2
3
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:
Code: (dl )
s~($days)~<mark>$1</mark>~g;


Also im Zusammenhang:
Code: (dl )
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)
Gast Gast
 2005-02-22 23:56
#51935 #51935
Ah, jetzt weiss ich auch, worum's geht. thx. :D
fatalis
 2005-02-23 01:28
#51936 #51936
User since
2005-02-22
2 Artikel
BenutzerIn
[default_avatar]
hallo,

vielen Dank, an allen für die Hilfe.

hier der Code:
Code: (dl )
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-->
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2005-02-22 16:10.