Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]8904[/thread]

Eingabe über <STDIN>: Probleme mit langer Eingabe

Leser: 2


<< >> 3 Einträge, 1 Seite
sKy
 2007-04-04 17:25
#75681 #75681
User since
2006-12-05
10 Artikel
BenutzerIn
[default_avatar]
Ich habe ein Skript geschrieben mit dem man Worte /Sätze/Teilsätze
aus einem Array aus Textdatein herausfinden kann.

Sprich, gibt einen Satz oder ein Wort ein und es wird angezeigt ob es in einem
der Textdateien vorkommt. (Wird später weiterverarbeitet)

Es klappt auch ziemlich gut.
Wenn ich aber nach Sätzen suchen will die auf der Konsole abgebrochen werden findet er sie nicht (obwohl ich weiß dass diese von mir gewählten Beispielsätze vorkommen.)

Beispiel:
Ein derartiger Frieden w"are nach seinen Worten instabil.

wird gefunden ("a bedeutet hier ä)

Das vor zwei Jahren ge"anderte Asylrecht steht seit heute auf dem Pr"ufstand des Bundesverfassungsgerichts in Karlsruhe.

wird nicht gefunden obwohl es so drinsteht.

Gechompt habe ich auch hier mein Codeausschnitt:

Variablen sind definiert am Anfang
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
@textkorpora=glob('dlf*.txt');
$anzahl=scalar(@textkorpora);

$suchstring=<STDIN>;
chomp($suchstring);

open(DATEI,'>',"satz_suche.txt");
close(DATEI);

open(FILE,'>',"satz_suche_ergebnis.txt");
print FILE "-------------------------------------\n";
print FILE "[Suchanfrage]\n";
print FILE "$suchstring\n";
print FILE "-------------------------------------\n\n";
print FILE "[Lokalisiert in den Dateien]\n\n";
close(FILE);

while ($textpos <= $anzahl)
{

open(TEXTDAT,'<',@textkorpora[$textpos]);
while(<TEXTDAT>)
{
chomp($_);

$korpustext=$korpustext.$_;

}
close(TEXTDAT);



if($korpustext =~ /$suchstring/g)
{
open(DATEI,'>>',"satz_suche.txt");
print DATEI "@textkorpora[$textpos]\n";
close(DATEI);

open(FILE,'>>',"satz_suche_ergebnis.txt");
print FILE "@textkorpora[$textpos]\n";
$textpos++;
$gefunden++;
$korpustext="";
close(FILE);
}
else
{
$textpos++;
$korpustext="";
}
}

if ($gefunden==0)

{
open(FILE,'>>',"satz_suche_ergebnis.txt");
print FILE "Fehler: ~Benutzereingabe wurde nicht gefunden.~\n";
close(FILE);
print "Ausdruck/".$suchstring. "/\nwurde nicht gefunden.\n";
}
else
{
open(FILE,'<',"satz_suche.txt");
while(<FILE>)
{
chomp($_);
s/txt/tones/g;
push(@tonesarray,$_);
s/tones/syllables/g;
push(@silbenarray,$_);
}
close(FILE);


Findet ihr einen Fehler?

Gruß
Timo
PerlProfi
 2007-04-04 17:38
#75682 #75682
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Versuch mal /\Q$suchstring\E/ als regulären Ausdruck.
Aber ich hab mir das jetzt nicht alles angesehen, weil es irgendwie verwirrend ist.

Hast du eventuell eine Menge einfach weggelassen, in deinem post?

MfG\n\n

<!--EDIT|PerlProfi|1175694005-->
renee
 2007-04-04 18:00
#75683 #75683
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ein paar allgemeine Anmerkungen:

*) Du solltest Wiki:[tt]use strict[/tt] verwenden.
*) Statt der der while-Scheife (while( $textkorp <= $anzahl )) wäre eine for-Schleife eleganter (und übersichtlicher).
*) Du kannst die Dateien in die Du schreibst auch vor der Schleife öffnen
*) Du solltest Fehler abfangen, vor allem beim Schreiben der Dateien.
*) ein einzelnes Element eines Arrays spricht man so an: $array[$index], also ein $ statt dem @
*) Aus
Code: (dl )
1
2
3
4
5
6
7
8
9
open(TEXTDAT,'<',@textkorpora[$textpos]);
while(<TEXTDAT>)
{
chomp($_);

$korpustext=$korpustext.$_;

}
close(TEXTDAT);
machst Du besser:
Code: (dl )
1
2
3
4
5
6
{
local $/;
open(TEXTDAT,'<',$textkorpora[$textpos]);
my $korpustext = <TEXTDAT>;
close(TEXTDAT);
}
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/
<< >> 3 Einträge, 1 Seite



View all threads created 2007-04-04 17:25.