# Variablen alphabetisch sortieren



## eierfeile (27. November 2003)

Servus zusammen,
habe ne Menge an Variablen (Dateinamen usw) und würde die gerne alphabetisch sortieren. Damit die Ausgabe danach in Word nach was aussieht. Wie mache ich das? Brauch ich dazu ein "Array"?

Dank + Gruß,
eierfeie


----------



## Zorck (28. November 2003)

Jo - ich würde die Variablen alle in ein Array hauen und dann halt mit einem entsprechenen Sortieralgo (BubbleSort,QickSort...) sortieren.

Falls es Probleme gibt, solltest du deine Frage nochmal konkretisieren.

MfG

ZorcK


----------



## eierfeile (28. November 2003)

ok, , das hab ich mir schon fast gedacht. Mit den Begriffen qicksort oder bubblesort kann ich bzw. die VBA-Hilfe nichts anfangen und irgendwas "externes" kann ich hier leider nicht nehmen. 
Gut, da will ich das Ganze mal konkretisieren:
Ich habe mittels Application.FileSearch einige Dateien gefunden. Die muß ich jetzt einem Array übergeben und die einzelnen Werte sollen dann sortiert werden. Wie mache ich das? 
Der Code sieht soweit wie folgt aus:

Dim Eingabepfad As Variant
Dim datei As String

Eingabepfad = InputBox("Bitte geben Sie hier Ihr Root-Verzeichnis an:", "Root-Verzeichnis")

With Application.FileSearch
    .FileName = "*.htm*"
    .LookIn = Eingabepfad
    .SearchSubFolders = True
    .Execute
    For I = 1 To .FoundFiles.Count
        datei = .FoundFiles(I)
    Next I
End With

Dank+gruß,
eierfeile


----------



## Zorck (28. November 2003)

Wenn ich jetzt nichts falsch verstanden habe (an deinem Code), müsstest du aus der Datei ein Array machen.

```
Dim Datei() as String
...
...
Redim Preserve Datei(1 to .FoundFiles.Count) as String
for i = 1 To .FoundFiles.Count
   Datei(i) = .FoundFiles(i)
Next i
```

Ich gehe jetzt davon aus, dass dein Code so funktioniert (habe nichts getestet).
Zum Thema sortieren hättest du einfach mal die SuchFunktion nutzen können.

Hier nur ein Beispiel (sogar mit meiner Beteiligung   ).

Dein Problem jetzt behoben?


----------



## eierfeile (28. November 2003)

Ja cool. Danke, das passt soweit! Nur mit der Sortierung hab ich da jetzt noch probs.  net so ganz. Kann das sein, daß das nur eine rein nummerische Sortierung ist. Brauch nämlich eine alphabetische. 

Gruß,
eierfeile


----------



## tuxracer (28. November 2003)

Wieso compliziert wenns auch einfach geht 
Copy  Paste ins Excel und da sortieren


----------



## Zorck (28. November 2003)

@eierfeile: 
Nö - ist nicht rein numerisch. Ich weiß aber nicht wie er mit ganzen Strings umgeht (noch nie gemacht). Eigentlich müsste er von links an die Anfangsbuchstaben vergleichen. Wenn er das nicht machen sollte (irgendwie die Stringlänge mit reinbringt) dann erzwing das doch einfach indem du den die einzelnen Buchstaben ausliest. (Dürfte aber nicht der Fall sein)

@tuxracer:
Na toll - Copy&Paste. Super!
Vielleicht ist es im Einzelfall einfacher. Du weißt doch aber gar nicht, wozu er das braucht. Er wird schon seine Gründe haben. Dazu schreibt man doch Programme. Dass bestimmte Vorgänge automatisiert werden. Was machst du wenn er mehr Dateien hat, als in eine ExcelTabelle passen? Oder das Programm das den ganzen lieben langen Tag machen soll? Viel Spaß bei Copy & Paste! ;-)


----------



## tuxracer (28. November 2003)

Ok vielen Dank, kann ja mal passieren, aber so wie es sich für mich dargestellt hat wollte er nur jeweil die Variablen seiner Progis alphabetisch sortieren, und bis Du soviele Variablen hast , dass sie nicht mehr in die Zeilen von Excel passe, hast du ein Monsterprogramm mit mehr als 65000 Variablen

Menschen sind intelligent
Ausnahmen haben die Regel


----------



## Zorck (28. November 2003)

Ach man - immer diese Grundsatzdiskussionen!
Was soll denn das jetzt? Er fragt was - ich geb ihm ne Antwort.

Er wollte das programmiertechnisch umsetzen, nicht mit Excel.
Und dass man ne Exceltabelle nicht so schnell voll kriegt weiß ich auch - es war ja auch nur ein *Beispiel*.

Schau doch mal an, was er mit seinem Code macht. Er liest Dateien aus und will diese sortiert ausgeben. Vielleicht wird das eine Art WindowsExplorer/NortenCommander etc.

Aber das ist ja nun auch egal. Ich hoffe eierfeile (_komischer Name_  ) hat eine Antwort auf seine Frage gefunden - und darum gings doch.


----------



## eierfeile (28. November 2003)

@tuxracer: lass mal stecken. und werfe lieber nicht mit Begriffen wie "Intelligenz und ihre Ausnahmen" um dich.  zorck hat schon recht.  Über leg doch mal. Soll ich etwa aus word meine variablen nach excel expotieren bzw. importieren.  (Der anwender wundert sich ja überhaupt nicht wenn er ein brief in word schreibt und plötzlich geht excel auf, irgendwas flackert über den bildschrim und geht wieder zu ;-) ) Da ist doch allein der programieraufwand schon größer diese interaktion umzusetzen anstatt sie einfach mit einer VBA-Funktion im Hintergrund zu sortieren. Nix für ungut, aber ich glaub du bist im Office-Forum besser aufgehoben.
@ zorck ja werde das am montag mal testen und meld mich dann. auf jedem fall erst vielen dank für den kompetenten support!

Gruß,
eierfeile


----------



## tuxracer (28. November 2003)

@eierfeile

Ich glaub nicht das ich das Officeforum noch nötig hab, weil da steh ich schon längstens drüber.

Ich hab nur Deinen Verwendungszweck nicht so ganz kapiert, weil wenn ab und an mal ne Menge an Variablen sortiert werden soll, dann ist wohl die Copy Paste Methode das einfachste, und falls Du nich willst, das das Ergebnis Excel ist, dann machste halt nach dem sortieren wieder Copy Paste, und nimmst das wieder ins Word.


Dass das ganze für andauernde immer neue Grossmengen an Variablen nicht unbedingt das gelbe vom Ei ist verstehe ich sehr wohl, aber trotzdem bleib ich dabei.

Die Lösung ist doch ganz einfach.


Es ist viel einfacher, das ganze mit ner fertigen Sortierroutine zu erledigen(Excel), als selbst nen sorter zu schreiben.

Also was machst Du, Du verwendest die VBA internen Funktionen für öffnen und schliessen eines Dokumentes, Du nimmst die fertige Möglichkeit von Excel Datenbestände zu sortieren, und kombinierst das ganze so, dass am Schluss das Ergebnis wieder im Word steht.

und glaub mir, es ist einfacher als sich Gedanken zu machen wie die ganzen Sortieralgorythmen wie Bubblesort usw... funktionieren, und das Rad neu zu erfinden.


----------



## Zorck (28. November 2003)

@tuxracer:
Hast du schon mal daran gedacht, dass er erheblich länger dauert Excel zu öffnen, einzufügen, zu sortieren, zu kopieren, Excel zu schließen und in Word wieder einzufügen.

Und was ist daran so schlimm sich mal Gedanken über Sortieralgorithmen zu machen. Irgendwann kommt das doch auf einen zu.

Und wieso das Rad nicht neu erfinden? Du baust doch auch kein altes Kutschenrad an einen Porsche  (um das mal ganz krass auszudrücken).


----------



## tuxracer (28. November 2003)

@Zorck

Ok ich lass das Argument mehr oder minder gelten.

wenn das Progi darauf ausgelegt sein soll, möglichst riesige Datenmengen, zu sortieren, und auszugeben, aber dann stellt sich mir die Frage wieso nicht gleich ne richtige Datenbank wo alles was mit sortieren und ausgeben zu tun hat viel schneller und optimierter geht.


----------



## Zorck (28. November 2003)

Warum er keine Datenbank nimmt?

Also entweder ich hab was falsch verstanden oder du bist auf dem Holzweg.

Er liest htm/html Dateien aus und will die sortiert in einer Worddatei ausgeben (soweit ich das mitbekommen habe). Weiß ich zu welchen genauen Zweck er das braucht. Eine Datenbank ist doch mehr oder minder was statisches.

Sein Programm kann er dann auf einen beliebigen Rechner tun und die dortigen htm/html Dateien auslesen und ausgeben.

Sollte er da eine Datenbanl anlegen, die Dateien dort eingeben um dann die Dateien zu sortieren um sie dann zu exportieren. 

Wenn du das dann wieder mit dem Rad erklären willst, wäre es so als würdest du die Karosserie deines Porsches auf ein paar Baumstämmen rollen.  

Oder versteh ich dich jetzt so falsch


----------



## tuxracer (28. November 2003)

@Zorck

was dynamischeres wie ne Datenbank gibts wohl gar nicht.

Grosse Datenbaken, werden laufend mit neuen Daten gefüttert, und alte fliegen zum Teil wieder raus.

Bei ner richtig grossen Datenbank sind einige Tipsen damit beschäftigt andauernd die Daten zu aktualisieren.

Aber auch bei ner kleineren Datenbak ist normalerweise ein dauernder Wandel,was ja dynamisch ist.

Beispiel wenn Du im Internet Online was bestellst, dann ist das in den meisten Fällen eine DB welche nix anderes tut als

Dich mit deinen bestellten artikeln dem Materialrichtenden ne Nachricht zukammen zu lassen
In der DB den Artikel abzubuchen, als bestellt5 und nicht mehr vorhanden, und zu vergleichen mit dem in der DB erfassten mindestsollwert des Lagerbestandes.

das könnte zum teil natürlich noch um einiges verfeinert werden, aber so vom Prinzip ist das wohl genug ums zu verstehen, wozu ne DB gut sein kann.


----------



## eierfeile (28. November 2003)

Also um diese Frage hier mal aufzulösen. Ziel des Code ist es eine komplette Homepage schnell und einfach in eine Printversion zu überführen. Ich weiß, da gibts kleine Progis, die sind aber Kagge. Weil die gehen nicht selbstständig durch die ganze Ordnerstruktur. Und das wäre für mich eine erhebliche Arbeitsersparnis, da meine Site ca. 350 Seiten hat. 350 mal copy/paste ist mir einfach zu blöd. Auch wenn andere scheinbar drauf stehen  (konnt ich mir jetzt nicht verkneifen) 

Gruß,
eierfeile


----------



## tuxracer (28. November 2003)

@eierfeile

also da ich anfangs nicht genau wusste was Deine Vorgaben sind, hab ich mal das so gesagt, aber das mit dem Copy Paste würde immer noch funzen, aber halt in kombination in das Macro eingebaut, damit schlussendlich alles automatisiert ist.

Copy Paste muss ja nicht von Hand ausgeführt werden.

Aber machs nicht wie die Amerikaner.

Die grösste und teuerste Raketenkatastrophe der Amis war ein Copy Paste Fehler.
Die habe das Programm von der Vorgängerrackete genommen, und in die Steuerung der neuen kopiert.
Dummerweise haben die nicht bedacht, dass die Ventile und Steuerelemente allesamt andere Parameter verwendeten.

Oops


----------



## danielm (28. November 2003)

kannst ja auch die ascii-werte von den variablen nehmen und danach sortieren... oda net?


----------



## eierfeile (1. Dezember 2003)

ok, habs probiert, aber es  leider nicht. Habs jetzt in ner abgespeckten Version.  aber genau so wenig:

Dim test(1 To 3) As String

test(1) = "armleuchter"
test(2) = "aalkopf"
test(3) = "bumsbirne"


For i = 1 To 3
     For j = 3 To (i + 1) Step -1

        If test(i) > test(j) Then
           Hilf = test(i)
           test(i) = Array(j)
           test(j) = Hilf
        End If
    Next j
Next i
End Sub

...habs auch mit asc("...") probiert. Aber da wird leider immer nur das erste zeichen konvertiert. ...kann doch nicht so schwer sein, oder?


----------



## eierfeile (1. Dezember 2003)

ok. jetzt läufts habs hinbekommen. danke für die hilfe!

Gruß,
eierfeile


----------

