Schrift
[thread]8108[/thread]

Mit Perl Sätze zählen (Seite 2)



<< |< 1 2 >| >> 18 Einträge, 2 Seiten
Mary
 2006-07-07 15:46
#67591 #67591
User since
2006-06-25
17 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
#! /usr/bin/perl
# zaehl.pl
# Aufruf: perl zaehl.pl datei.txt
while(<>) {
   $num += (s/#//g);
}
print $num, "\n";


Das Programm läuft einen Text durch, in dem bestimmte Wörter bzw. Ausdrücke mit ## rechts und links gekennzeichnet sind. Sie müssen gezählt werden. Der Text ist übrigens in der russischen Sprache, darum kann ich hier kein Beispiel einfügen, aber auf Deutsch wäre es in etwa so:

Der Linguist ##Larry Wall## entwarf sie 1987 als Synthese aus C, den ##UNIX-Befehlen## und anderen Einflüssen. Ursprünglich als Werkzeug zur System- und Netzwerkadministration vorgesehen, hat Perl auch bei der Entwicklung von Webanwendungen und in der Bioinformatik weite Verbreitung gefunden. Hauptziele sind eine schnelle Problemlösung und größtmögliche Freiheit für ##Programmierer##. Der Umgang mit Texten und viele frei verfügbare Module sind Stärken der Sprache.

Der nächste Schritt wäre, alle gefundene Ausdrücke in eine Liste zu speichern...
pq
 2006-07-07 15:55
#67592 #67592
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
bist du sicher, dass nicht noch sonderzeichen zwischen den # stehen?
bei mir läuft das skript einwandfrei mit s/##//g
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Crian
 2006-07-07 17:10
#67593 #67593
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Wieso hat Mary "0" Beiträge, ich sehe da oben schon mindestens zwei.
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
 2006-07-07 17:15
#67594 #67594
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Wir haben dieses Problem schon mehrfach gehabt. Es scheint dabei aber keine Gesetzmäßigkeit feststellbar zu sein...
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/
Mary
 2006-07-07 17:22
#67595 #67595
User since
2006-06-25
17 Artikel
BenutzerIn
[default_avatar]
[quote=pq,07.07.2006, 13:55]bist du sicher, dass nicht noch sonderzeichen zwischen den # stehen?
bei mir läuft das skript einwandfrei mit s/##//g[/quote]
...hab die Kodierung von Unicode auf UTF8 umgestellt und jetzt läuft es bei mir auch...
Mary
 2006-08-15 15:27
#67596 #67596
User since
2006-06-25
17 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich habe das oben besprochene Problem so gelöst:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
my $datei2 = $ARGV[1];

open (OUT, ">$datei2");

while(<>) {

if (/(##)([KYRILLIISCHE ZEICHENa-zA-Z0-9"-]+(\s+[KYRILLISCHE ZEICHENa-zA-Z0-9"-]+)*)(##)/) {
print OUT "$2\n";
}
}

close OUT;


Es funktioniert, aber das Programm findet nicht alle Vorkommen von den Mustern, sondern jeweils das erste in der Zeile.

Hab es dann so ausprobiert:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
open (OUT, ">$datei2");

while(<>) {

s/##([KYRILLISCHE ZEICHENa-zA-Z0-9"-]+(\s+

[KYRILLISCHE ZEICHENa-zA-Z0-9"-]+)*)##//g;

print OUT "$1\n";
}

close OUT;


Auf diese Weise läuft das Programm in einer endlosen Schleife und die Ausgabe ist nicht lesbar, denn die Kodierung wird geändert.

Hat jemand eine Idee, wie das richtig funktionieren könnte?

Gruß
Mary
Crian
 2006-08-15 16:24
#67597 #67597
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Probier mal

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
my @fragen;

open (OUT, ">$datei2") or die $!;
while (<>) {
push @fragen, /##([KYRILLISCHE ZEICHENa-zA-Z0-9"-]+(?:\s+[KYRILLISCHE ZEICHENa-zA-Z0-9"-]+)*)##/g;
}
close OUT or warn $!;

for my $q (@fragen) {
print "Gefunden: [$q]\n";
}


(ungetestet)

Ist sichergestellt, dass das öffnende ## und das schließende ## immer in der gleichen Zeile vorkommen? Sonst funtioniert obiges nicht. Dann müsste man vielleicht den Zeilentrenner auf '##' setzen und so an die Fragen kommen.\n\n

<!--EDIT|Crian|1155644739-->
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
Mary
 2006-08-15 17:52
#67598 #67598
User since
2006-06-25
17 Artikel
BenutzerIn
[default_avatar]
Es funkeioniert! Vielen Dank!

Liebe Grüße

Mary
<< |< 1 2 >| >> 18 Einträge, 2 Seiten



View all threads created 2006-06-24 16:32.