Schrift
[thread]8319[/thread]

string durchsuchen



<< |< 1 2 >| >> 12 Einträge, 2 Seiten
Gast Gast
 2006-09-12 10:48
#69733 #69733
hallo,
hab ein problem, hab eine textdatei die wie wörterbuch aufgebaut ist(deutsch - englisch mit - getrennt) und will entweder nur ein deutsches wort suchen(mit regulären ausdrücken) oder nur ein englisches....nun ist es so das ich "^"am anfang der suche verwenden könnt aber es sein kann das im wörterbuch im deutschen auch z.b. "Abstand; Entfernung" stehen kann dann wird nr abstand gefunden. wie kann ich bis zu dem "-" suchen also ihn als trennzeichen zw. de und eng verwenden?!
bitte schnelle antwort!
danke schon im vorraus
fraggs
 2006-09-12 10:54
#69734 #69734
User since
2006-09-11
179 Artikel
BenutzerIn
[Homepage] [default_avatar]
hast du schon irgendwelchen code ?

also nochmal du wirst ein woerterbuch haben das so aufgebaut ist:
deutsch;english
deutsch;english
deutsch;english

stimmts ? jetzt verstehe ich nicht denn in deinem "woerterbuch" ist kein '-' und oder kein '^' wo soll den das genau hin

edit: hier ist schonmal der anfang ich bin noch am denken wie man denn so was als liste einlesen kann ...

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
#!perl
#-fraggs-

use strict;
use warnings;

my $book = 'x:\\locationofbook';
my @liste = "";

print "Wort eingabe: \n";
my $wort = <STDIN>;

open( FILE, "<", $book )  or die $!;

#code to search for the $wort goes here
my $search = $wort
if ($book =~ m/$search/) {
   print " $search "; #nicht sicher ob das klappt
} else {
   print 'nicht gefunden';
}

close(FILE);
\n\n

<!--EDIT|fraggs|1158047963-->
mmm twix
kale_1990
 2006-09-12 11:17
#69735 #69735
User since
2006-09-12
104 Artikel
BenutzerIn
[default_avatar]
wörterbuch ist so aufgebaut:

deutsch - englsich
oder auch
deutsch; deutsch - englisch

mein regulärer ausdruck zum suchen sieht momentan so aus :
$begriff = m/^$suchbegriff/i;
das "^" bewirkt das nur am anfang des strings gesucht wird...wenn allerdings 2 deutsche begriffe für einen englisch da sind also:
duetsch; deutsch - englisch
wird der zweite deutsche begriff nicht durchsucht und deshalb nicht gefunden. ich will aber wenn ich nach einem deutschen wort such alles bis zum trennzeichen zw. de und eng "-" durchsuchen
hoff du hast es verstanden...
THERE'S MORE THAN ONE WAY TO DO IT - TMTOWTDI

EASY THINGS SHOULD BE EASY - HARD THINGS SHOULD BE POSSIBLE
renee
 2006-09-12 11:21
#69736 #69736
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich kann mich zwar nicht mit dem Problem beschäftigen, weil ich weg muss, aber @fraggs: Dein open example ist unnötig. Du öffnest zweimal die Datei zum lesen...
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/
fraggs
 2006-09-12 11:23
#69737 #69737
User since
2006-09-11
179 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=renee,12.Sep..2006, 09:21]Ich kann mich zwar nicht mit dem Problem beschäftigen, weil ich weg muss, aber @fraggs: Dein open example ist unnötig. Du öffnest zweimal die Datei zum lesen...[/quote]
k werde fixen danke hab spass

@kale warum searchst du nicht einfacherheitshalber die ganze liste ? die chance das es das selbe wort in englisch to wie in deutsch gibt ist minimal.

theoretisch koennte man das so machen das der search den string bis zum ; geht ... wenn ein ';' da ist schaut er weiter bis zum - unde wenn nicht dann halt eben nicht.

am besten waere es wenn man vorher schon sagt was fuer ein wort man sucht zb. englisch oder deutsch. dann koennte der an jenachdem welcher seite des - suchen

(alles nur theorien;) )\n\n

<!--EDIT|fraggs|1158046089-->
mmm twix
kale_1990
 2006-09-12 11:30
#69738 #69738
User since
2006-09-12
104 Artikel
BenutzerIn
[default_avatar]
es wird auch vorher schon gesagt auf welcher seite gesucht wird....ich weis nur nicht wie ich es in einem regulären ausdruck vormulieren muss das er nur auf der einen oda anderen seite des "-" sucht!
THERE'S MORE THAN ONE WAY TO DO IT - TMTOWTDI

EASY THINGS SHOULD BE EASY - HARD THINGS SHOULD BE POSSIBLE
fraggs
 2006-09-12 12:02
#69739 #69739
User since
2006-09-11
179 Artikel
BenutzerIn
[Homepage] [default_avatar]
ich tueftel ma weiter mal sehen\n\n

<!--EDIT|fraggs|1158048546-->
mmm twix
kale_1990
 2006-09-12 12:20
#69740 #69740
User since
2006-09-12
104 Artikel
BenutzerIn
[default_avatar]
danke
THERE'S MORE THAN ONE WAY TO DO IT - TMTOWTDI

EASY THINGS SHOULD BE EASY - HARD THINGS SHOULD BE POSSIBLE
sid burn
 2006-09-12 12:29
#69741 #69741
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Kannst du den Garantieren das die Wörter mit einem "-" getrennt werden, und dieser Bindestrich auch nicht in einem der Wörter vorkommt?

Ansonsten öffnest du einfach die Datei, und liest sie Zeilenweise ein, dann kannst du die Zeilen einfach durch ein Split trennen.

Code (perl): (dl )
my ($german, $english) = split '-', $line;


Danach steht in $german der erste Teil, und in $english der Zweite Teil. Wenn dort nun wieder die Wörter durch ein Semikolion getrennt werden, kannst du wieder ein split machen.

Code (perl): (dl )
my @words = split ';', $german



Anstatt einen String kannst du bei "split" aber auch eine Regex angeben. Wenn du Leerzeichen vor oder nach dem Wort Löschen möchtest dann solltest du das tun. Du solltest aber in der Regex runde Klammern vermeiden, da sie eine spezielle Bedeutung bekommen. Wenn du etwas gruppieren möchtest, dann musst du die nicht speichernden Klammern benutzen.
Code: (dl )
(?: ... )


Code: (dl )
1
2
3
4
my $string = 'frei; kostenlos - free';
my ($german, $english) = split /\s*-\s*/, $string;

print "$_\n" for split /\s*;\s*/, $german;

Ausgabe:
Code: (dl )
1
2
frei
kostenlos
\n\n

<!--EDIT|sid burn|1158071078-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
fraggs
 2006-09-12 12:32
#69742 #69742
User since
2006-09-11
179 Artikel
BenutzerIn
[Homepage] [default_avatar]
da ist ja einer der pros !\n\n

<!--EDIT|fraggs|1158050464-->
mmm twix
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2006-09-12 10:48.