Textdatei oder Textfeld ordnen/sortieren....

K-DOG

Mitglied
wie kann ich eine textdatei oder ein textfeld nach dem ersten buchstaben in der zeile in alphabetischer reihenfolge ordnen?
das einleses usw brauch ich nich.
hoffentlich kann mir jemand helfen
mfg
 

Daniel Toplak

Erfahrenes Mitglied
Versuch es doch einfach mit einem Listenfeld anstatt einem Textfeld da kannst du dann die Eigenschaft "Sorted" auf true setzten. (habs selbst noch nicht versucht).

Die andere Möglichkeit ist, du sortierst die Daten beim Auslesen aus der Datei und schreibst die Daten sortiert in ein Array.

Mehr kann ich dir noch nicht helfen, da ich nicht weiss wie deine Textdatei aufgebaut ist, wie du die Daten ausliest und wie die die Daten speicherst.
 

K-DOG

Mitglied
also einlesen tue ich so :

Open test.txt For Input As #1
dat.Text = ""
Do
Line Input #1, zeile
dat.Text = dat.Text & zeile & Chr(13) & Chr(10)
Loop Until EOF(1)
Close #1

das textfile is so aufgebaut :
winkel sind gut
brust will ich haben
click machen

naja einfach für einen satz eine zeile.
der text spielt ja keine rolle.
jetzt wollte ich immer den ersten buchstaben einlesen.
also praktisch nach erstem buchstaben in der zeile sortieren.
mfg
 

Daniel Toplak

Erfahrenes Mitglied
Also wie gesagt ich würde zunechst mal den Inhalt der Datei in Arrays schreiben:



dim zeile as string (denk ich mal ;) )
dim satz() as string
dim zähler as integer
Open test.txt For Input As #1
dat.Text = ""
zähler = 1
Do
redim satz(zähler) ' brauchst du um die Variable nochmal zu
' Dimensionieren, da du ja nicht weisst wieviele
' Sätze deine Datei hat
Line Input #1, zeile
satz (zähler) = zeile
zähler = zähler + 1
Loop Until EOF(1)
Close #1

So nun steht der komplette Inhalt deiner Datei in der Variablen satz()

d.h. in deinem beispiel:

satz(1) = winkel sind gut
satz(2) = brust will ich haben
satz(3) = click machen
.
.
.
satz(n) = bla bla bla

So und jetzt kannst du alles mögliche mit deinen Daten anfangen, denn du hast sie ja in der Variablen satz(n) gespeichert.

Ein Sortieralgorithmus geht z.B. so: (ist etwas kompliziert, musst halt bisschen rumprobieren)

Du brauchst dazu eine temporäre Variable z.B tmp_satz
Du vergleichst ob satz(1) größer als satz(2) ist.
1.)Wenn ja
dann schreibst du denn inhalt von satz(1) in tmp_satz und sagst, das
satz(1)=satz(2) sein soll. D.h. du schiebst den kleineren Inhalt von 2 auf die Position von 1. Dann belegst du den Inhalt von satz(2) mit dem Inhalt deiner tmp_satz Variablen. Danach machst du weiter und vergleichst satz(2) ob es grösser als satz(3) ist usw...

2.)Wenn nein
dann vergleichst du weiter ob satz(2) größer als satz(3) usw...

Diesen Algorithmus packst du in die innere von 2 Schleifen:

dim zähler1 as integer
dim getauscht as boolean

Do
getauscht = false
Do
'hier kommt deine Prüfung rein

Loop while zähler1 = zähler 'in der Variablen zähler steht die
'Anzahl der Sätze (s. o.)
Loop while getauscht = true

puh, geschafft, so oder so ähnlich geht das mit der Sortierung ich hoffe ich habe es eingigermassen verständlich beschrieben. Ich selbst habe das mal so gemacht und es hat funktioniert, aber leider ist das bei mir in der Schule auf dem Rechner sonst hätte ich dir ein Code-Beispiel geschickt. Viel Spaß beim rumprobieren.

Gruss homer
 

Thomas Kuse

Erfahrenes Mitglied
also ein listenfeld kann automatisch sortieren auch nach buchstaben!

du musst dann halt jede zeile extra mit listenfeld.addstring oder ähnliches einfügen, die sortiert er dann automatisch!

da musst du dir aber im klaren sein, dass 10 vor 2 kommt und so weiter!
 

K-DOG

Mitglied
naja okay. ich habe es jetzt besser hibekommen :) ich bedanke mich trotzdem recht herrzlich.
danke nochmal
mfg
 

Daniel Toplak

Erfahrenes Mitglied
Kein Problem, wäre aber ganz net, wenn du uns bischen erklären würdest, wie du das jetzt gelöst hast. Rein interessehalber.

Man lernt ja nie aus :)
 

K-DOG

Mitglied
bisher hab ich erstmal nur eine datei in ne listbox eingelesen und die dann über sorted sortiert.
an einer anderen sortier methode werde ich mich morgen okay heute ;) mal versuchen.
ich hoffe mal das es fukntionieren wird.
mfg