Hilfe - Programm das Wörter ordnet!

Hallo liebe Leute,
ich habe ein Problem und da ich selbst nicht in der Lage bin solch ein benöti

gtes Programm zu entwickeln, möchte ich hier um Hilfe fragen;

Ich suche ein Programm, wleches Wörter in einer Liste nach den Vokalen ordnet.

Beispiel: Folgende Wörter sind in Listenform in einer textdatei abgespeichert:

Pferde
Apfel
Landshut
Anzug
Mandel
Herzen

Nun sollen diese Wörter so geordnet werden:

Apfel
Mandel
Landshut
Anzug
Pferde
Herzen

Gibt es vielleicht den einen oder anderen freiwilligen Programmierer, der in der Lage ist, so etwas zu scripten? Wäre demjenigen sehr verbunden.

MfG

Hi Malie,

Beispiel: Folgende Wörter sind in Listenform in einer
textdatei abgespeichert:

Pferde
Apfel
Landshut
Anzug
Mandel
Herzen

Nun sollen diese Wörter so geordnet werden:

Ich nehme an, du meinst das so:

A pf e l
M a nd e l
L a ndsh u t
A nz u g
Pf e rd e
H e rz e n

Gibt es vielleicht den einen oder anderen freiwilligen
Programmierer, der in der Lage ist, so etwas zu scripten? Wäre
demjenigen sehr verbunden.

Möglich, was könntest du denn mit einem VB, VBS, Vba Script anfangen?

Gruß
Reinhard

Hallo Reinhard,
ich denke schon, dass ich in der Lage bin mit VBScripts umzugehen (sprich Ausführen), aber selbst schreiben kann ich leider nicht (sofern ich deine Frage richtig verstanden habe). Es ist im Grunde völlig egal, in welcher Sprache das Programm geschrieben wurde, hauptsache es funktioniert.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hallo

wie gross ist die datei? im kilobytebereich oder megabyte-bereich?

grundsätzlich klingt das mal nach einem perl-skript. sofern die datei nicht allzu gross wird, sollte es auch recht leicht werden. ist die installation von perl ein problem?

lg erwin

Hallo Erwin, tut mir leid das ich dein Posting übersehen habe.

Die Datei ist im Kilobytebereich. Ich habe Perl bereits installiert (da ich auch schon mit anderen Perlscripts zu tun hatte, von daher stellt das kein Problem für mich dar).

Würde mich sehr freuen, wenn du ein Perl Script parat hättest :smile:

MfG

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hallo

also, eine lösung habe ich jetzt, nur traue ich mich fast nicht, die hier zu posten, weil vermutlich alle *wirklichen* perl-programmierer einen lachanfall bekommen…

mein ansatz: aus deinen worten alle mitlaute rauslöschen, die überbleibsel sortieren, dann wieder mit den echten worten verbinden. fertig.

problem: „hamster“ und „walter“ haben die selben selbstlaute. im ersten moment wollte ich eine hashmap mit den reinen selbstlauten als key und den normalen wörtern als value, nur das kann natürlich nicht funktionieren.

habe daher die ober-primitiv-varinate gewählt, die zugegebenermassen stark verbesserungswürdig ist.

du brauchst zwei kleine perl-skripte:

  1. skript: strip.pl

    while () {
    $wort = lc($_);
    chomp($wort);
    $wort =~ tr/aeiouäöübcdfgjklmnpqrstvwxyzß/aeioubpv/d;
    print „$wort\t$_“;
    }

  2. skript: cut.pl

    while () {
    $_ =~ /.*\t(.*)/;
    print „$1\n“;
    }

von der kommandozeile aus rufst du das ganze so auf, wobei ich annehmen, dass deine wörter in der datei „wortliste.txt“ stehen:

perl strip.pl wortliste.txt | sort | perl cut.pl

gilt für alle windows-benutzer. unter linux geht es einfacher, weil man sich das zweite perl-skript sparen kann (geht mit dem cut-befehl oder mit awk).

und ja, natürlich kann man die skripte noch massiv verkürzen und mit dem „-n“ bzw. „-p“ parameter arbeiten. dann kann man das skript unter hochkomma als parameter mitgeben und braucht keine eigenen dateien. finde ich aber immer recht mühsam, so zu programmieren weil schlechter lesbar.

lg
erwin

Möglich, was könntest du denn mit einem VB, VBS, Vba Script
anfangen?

ich denke schon, dass ich in der Lage bin mit VBScripts
umzugehen (sprich Ausführen), aber selbst schreiben kann ich
leider nicht (sofern ich deine Frage richtig verstanden habe).
Es ist im Grunde völlig egal, in welcher Sprache das Programm
geschrieben wurde, hauptsache es funktioniert.

Hallo Malie,

ich weiß jetzt nicht, nimmst du jetzt da die perl-Lösung von Erwin?

Falls noch wichtig, meine Nachfrage war so gemeint, wenn ich dir eine VB-Exe bastle besteht immer ein kleines Sicherheitsproblem, denn du weißt ja nicht was ich da reingepackt habe *fiesgrins*

Also ist der bessere Weg, auch in Hinsicht auf spätere Änderungen, man bastelt dir nur den lesbaren Quellcode, den du ggfs. im VB-Brett vorzeigen kannst um zu prüfen ob er koscher ist, bzw. wie man den anpassen könnte wenn du Änderungen machen willst.
Aber, um ihn dann auch benutzen zu können, brauchst du die VB-Entwicklungsumgebung, also das programm VB.

Insofern war meine Nachfrage so gemeint, ob du das Programm hast.

Bei Vba ist es so, du möchtest da eine Textdatei einlesen, sortieren, dann wieder sortiert abspeichern, das kleines „normalse“ Vba, das müßten m.E. alle Programme können die Vba können, Excel, Outlook, Word, Corel Draw usw.

Auch da meinte meine Nachfrage ob du eines dieser Programme hast.

Und Vbs, das müßte jedes Windows können *nicht genau weiß*, aber aus Sicherheitsgründen, der „I-love-you-Schädling“ kam via vbs in die Rechner, haben einige auf ihrem Rechner WSH deaktiviert, d.h. Vbs läuft nicht mehr.

Da war meine nachfrage so gemeint, laufen bei dir denn vbs -Codes, kannste leicht testen, mit einem Texteditor schreib dir eine Test.vbs mit dem Inhalt:

MsgBox „Huhu“

und klick sie doppelt im Explorer…

Sorry wenn ich mich unklare ausdrücke.

So, jetzt zum Thema Sortierung der Textdatei, perl kann ich nicht, kann also nur erahnen was da der Code von Erwin so alles treibt.
Wenn das die Lösung für dich ist, so ist doch alles in Butter.
Wenn nicht, so gib halt detaillierte Rückmeldung was genau da in perl nicht klappt wie gedacht.

Wenn es dann wider erwarten in perl keine Lösung gibt, so stelle deine Anfrage im VB-Brett neu, aber unbedingt mit dem Link-Hinweis auf hier und der Bitte nur hier zu antworten.

Gruß
Reinhard

Hallo

ich habe ein Problem und da ich selbst nicht in der Lage bin
solch ein benötigtes Programm zu entwickeln, möchte ich hier
um Hilfe fragen;
Ich suche ein Programm, wleches Wörter in einer Liste nach den
Vokalen ordnet.

Beispiel: Folgende Wörter sind in Listenform in einer
textdatei abgespeichert:

Pferde
Apfel
Landshut
Anzug
Mandel
Herzen

Nun sollen diese Wörter so geordnet werden:

A pf e l
M a nd e l
L a ndsh u t
A nz u g
Pf e rd e
H e rz e n

Ich verstehe die Sortierordnung nicht. Wieso
kommt Landshut vor Anzug? Ich würde es anders
rum sortieren.

Erwin hat ja schon eine schöne Perl-Lösung
gebaut - und dazu aufgerufen diese Weiterzuent-
wickeln :wink:

Ich würde hier systematisch vorgehen. Aus Deiner
Sorterreihenfolge habe ich 4-5 Regeln abgeleitet
An Beispielen:
Sortiere Aa vor Ae
Sortiere aa vor Ae
Sortiere ae vor Au
Sortiere nach Mitlauten zwischen z.B.: a und e

In Perl könnte man das systematisch als
Sequenz von Sortierbedingungen formulieren,
nachdem man eine sog. „Schwartzsche Transformation“
eingeleitet hat: http://en.wikipedia.org/wiki/Schwartzian_transform

...

my @wortliste = qw'
 Pferde
 Apfel
 Landshut
 Anzug
 Mandel
 Herzen
 ';


my @sortiert =
 map { $\_-\>[0] }
 sort {
 $a-\>[1] cmp $b-\>[1] # 1. Bedingung - vergleich
 or $a-\>[2] cmp $b-\>[2] # usw.
 or $a-\>[3] cmp $b-\>[3]
 or $a-\>[4] cmp $b-\>[4]
 or $a-\>[5] cmp $b-\>[5]
 }
 map {
 my ($i,$j,$k) = /([AEIOU]+) ([^AEIOU]+) ([AEIOU]+)/ix;
 [ 
 $\_, # Apfel -\>[0]
 uc $i, # A -\>[1]
 uc $k, # E -\>[2]
 $i, # A -\>[3] 
 $k, # e -\>[4]
 $j # pf -\>[5]
 ]
 }
 @wortliste;


 print join "\n", @sortiert;

 ...

Im unteren „map“ erzeugt man für jedes Wort ein
Feld […] mit den Vergleichskriterien wie dahinter
im Kommentar angegeben. Im darüberliegenden „sort“
vergleicht man nun hintereinander die Bedingungen,
die man so vorbereitet hat. Im obersten (kurzen)
„map“ holt man aus den sortierten Feldelementen
den darin enthaltenen Namen (Element ->[0]) wieder
raus.

Auf diese Weise kann man viele verschiedene
Gleichheitsbedingungen anfügen. Die Sequenz von
„or“ im „sort“ bedeutet, wenn der erste Vergleich
($a und $b sind beliebige Feldelemente der Liste)
„gleich“ ergibt, wird die nächste „or“-Bedingung
versucht - bis ein Unterschied auftritt.

Grüße

CMБ