Plaintext nach Spalten sortieren
Ich weiß mal wieder nicht mehr weiter und bitte um Hilfe
Ich habe mehrere Textdateien ("Plaintext"), in der Zeilenweise Datensätze (z.B. Namen und Personennummern) eingetragen sind. Wie kann ich diese mit Windows-Mitteln (VBS/WSH) schnell sortieren. z.B. sieht eine solche Personenliste wiefolgt aus:
Wie kann man diese Liste (zwischen den einzelnen 'Spalten' ist also immer ein Leerzeichen) so sortieren,
daß die neue Reihenfolge also
wird. Sortieren nach dem letzten Wert.
Eigentlich sehr simpel, aber ich komme nicht darauf. Wahrscheinlich irgendein Array auslesen.
Danke und einen schönen Sonntag
Micha
Ich habe mehrere Textdateien ("Plaintext"), in der Zeilenweise Datensätze (z.B. Namen und Personennummern) eingetragen sind. Wie kann ich diese mit Windows-Mitteln (VBS/WSH) schnell sortieren. z.B. sieht eine solche Personenliste wiefolgt aus:
08312 Karl Heinz Schneider
04661 Rita Lange
00799 Emil Kurz
03122 Hans Georg Drommel
daß die neue Reihenfolge also
... Drommel
... Kurz
... Lange
... Schneider
Eigentlich sehr simpel, aber ich komme nicht darauf. Wahrscheinlich irgendein Array auslesen.
Danke und einen schönen Sonntag
Micha
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 192036
Url: https://administrator.de/forum/plaintext-nach-spalten-sortieren-192036.html
Ausgedruckt am: 06.01.2025 um 23:01 Uhr
15 Kommentare
Neuester Kommentar
Auch dir nen netten gruss
ein haufen zeichen in einer zeile und das letzte soll der sortierer werden
Und das alles in vba...
Da gibts soch was von ratiosoft, nennt sich excel.
Hast du dir mal die muehe gemacht und dir emil und rita anzusehen?
Wenn nein, dann schau mal was die anderen anders macht.
Dir gehts ja um den nachnamen, nicht um den vornamen...
Was ist uebrigens ueberhaupt das ziel der reise?
Gaebe es die zeilen auch mit einem " sonst nicht" verwendeten zeichen als trenner?
(und warum steht da oben 144 aufrufe und nur eine antwort?)
ein haufen zeichen in einer zeile und das letzte soll der sortierer werden
Und das alles in vba...
Da gibts soch was von ratiosoft, nennt sich excel.
Hast du dir mal die muehe gemacht und dir emil und rita anzusehen?
Wenn nein, dann schau mal was die anderen anders macht.
Dir gehts ja um den nachnamen, nicht um den vornamen...
Was ist uebrigens ueberhaupt das ziel der reise?
Gaebe es die zeilen auch mit einem " sonst nicht" verwendeten zeichen als trenner?
(und warum steht da oben 144 aufrufe und nur eine antwort?)
[OT]
Einem Programm ist es Jacke wie Hose, ob das sortiert nach Buxte oder Hude werkelt
Aber wer an einer Exportdatei rumfummelt, um die dann weiterzuverarbeiten, der sollte mal nach ner Jacke schauen, die die Ärmel hinten hat.
Nennt mich "keiner"
"Manche" ahnen besser als ich, wann Hopfen und Malz verloren ist.
[/OT]
Man könnte natürlich mit einem Textprogramm die Leerzeichen durch Semikola ersetzen - aber eigentlich ist es doch egal ob man im Script schreibt " " oder ";"
mir fällt an Emil und Rita nur auf, dass sie nur einen Vornamen haben...
(Wieviele "Felder" haben die dann und wieviel die anderen?)Das Ziel der Reise ist nicht der Weg, sondern eine Weiterverarbeitung der Daten
Einem Programm ist es Jacke wie Hose, ob das sortiert nach Buxte oder Hude werkelt
Aber wer an einer Exportdatei rumfummelt, um die dann weiterzuverarbeiten, der sollte mal nach ner Jacke schauen, die die Ärmel hinten hat.
Warum weiß keiner ..., zwischenzeitlich hat sich die Zahl der Aufrufe sogar mehr als verdoppelt (312).
Nennt mich "keiner"
"Manche" ahnen besser als ich, wann Hopfen und Malz verloren ist.
[/OT]
Hallo Micha (um hier mal eine Begrüßung in den Raum zu werfen!),
wenn du das Sortieren so wie in deinem Fall vor hast,
dann musst du in 5 Schritten vorgehen:
1) Datei einlesen (zeilenweise)und jede Zeile in einzelne Arrays teilen
2) Die einzlenen Arrays tauschen (LBound mit UBound)
3) Mittels Sortierroutine (das kann Quicksort oder Bubblesort etc. sein)
diese Arrays sortieren, wie du es brauchst
4) dann wieder zeilenweise die Arrays zurücktauschen
5) alles in deine neue Datei schreiben.
So, alles was LimboSeil meint ist, warum man die Exportdatei nicht schon so anpassen kann, dass alles entsprechend sortiert ist.
Hast du denn schon Scriptansätze? Wir kauen hier ungern vor. Der erste Schritt muss von dir kommen, dann wird dir auch geholfen, wenn's irgendwo klemmt. Fertige Scripte schreiben nur die wenigsten. Is no fun at all!
Grüsse
Tsuki
wenn du das Sortieren so wie in deinem Fall vor hast,
dann musst du in 5 Schritten vorgehen:
1) Datei einlesen (zeilenweise)und jede Zeile in einzelne Arrays teilen
2) Die einzlenen Arrays tauschen (LBound mit UBound)
3) Mittels Sortierroutine (das kann Quicksort oder Bubblesort etc. sein)
diese Arrays sortieren, wie du es brauchst
4) dann wieder zeilenweise die Arrays zurücktauschen
5) alles in deine neue Datei schreiben.
So, alles was LimboSeil meint ist, warum man die Exportdatei nicht schon so anpassen kann, dass alles entsprechend sortiert ist.
Hast du denn schon Scriptansätze? Wir kauen hier ungern vor. Der erste Schritt muss von dir kommen, dann wird dir auch geholfen, wenn's irgendwo klemmt. Fertige Scripte schreiben nur die wenigsten. Is no fun at all!
Grüsse
Tsuki
@ Tsuki
Wenn Du alles über ein "disconnected recordset" abwickelst (wie neulich zB hier), entfallen Tauschereien und Sortier-Algorithmen - aber ohne eindeutig identifizierbare Felder macht's so oder so keinen Sinn ...
Grüße
bastla
Wenn Du alles über ein "disconnected recordset" abwickelst (wie neulich zB hier), entfallen Tauschereien und Sortier-Algorithmen - aber ohne eindeutig identifizierbare Felder macht's so oder so keinen Sinn ...
Grüße
bastla
@bastla,
Grüsse
Tsuki
aber ohne eindeutig identifizierbare Felder macht's so oder so keinen Sinn
Yepp, das ist das eigentliche Problem auf das LimboSeil schon hingewiesen hat. Sonst ginge nämlich auch ein 2-dimensionales Array nach beliebiger Spalte zu sortierenGrüsse
Tsuki
doitashimashite, Micha
dein Script war doch schon auf dem richtigen Weg. Und hätte man es am Anfang deiner Frage gleich mit hingeschrieben, hätte eventuell LimboSeil die Stelle "hervorgehoben". Na und bastla sowieso!
Die Trim-Funktion am Ende kann natürlich nicht schaden. Das ist auch ok!
Fehlt jetzt nur noch der umweltgrüne Haken ganz oben.
Viele Grüße
Tsuki
dein Script war doch schon auf dem richtigen Weg. Und hätte man es am Anfang deiner Frage gleich mit hingeschrieben, hätte eventuell LimboSeil die Stelle "hervorgehoben". Na und bastla sowieso!
Die Trim-Funktion am Ende kann natürlich nicht schaden. Das ist auch ok!
Fehlt jetzt nur noch der umweltgrüne Haken ganz oben.
Viele Grüße
Tsuki
Fehlt jetzt nur noch ...
... (zumindest für das nächste Mal) eine venünftige Struktur der Daten - Zeichen, die in einem Feld vorkommen können (hier: Leerzeichen) stellen nun mal keine brauchbaren Trennzeichen dar, und die daraus resultierenden "Datensätze" mit unterschiedlicher Feldanzahl lassen sich bestenfalls auf einen Spezialfall wie hier eingeschränkt verarbeiten ...Letzte Anmerkung: Im Zweifelsfall würde ich zumindest noch einer Leerzeile am Ende der Textdatei vorbeugen, indem der Rest nach
strLine = Trim(objFile.ReadLine) ' zeilenweises Einlesen
If strLine <> "" Then
Grüße
bastla
Hallo Gurkenhobel!
Da die "Datensätze" ja sortiert sind, brauchst Du nur jeweils eine Zeile mit der vorhergehenden zu vergleichen - ungetestet etwa so:
Grüße
bastla
Da die "Datensätze" ja sortiert sind, brauchst Du nur jeweils eine Zeile mit der vorhergehenden zu vergleichen - ungetestet etwa so:
Do Until DataList.EOF
Zeile = DataList.Fields.Item("LineText")
If Zeile <> VorigeZeile Then objFile.WriteLine Zeile
'alternativ ohne Berücksichtigung von Groß-/Kleinschreibung:
'If LCase(Zeile) <> LCase(VorigeZeile) Then objFile.WriteLine Zeile
VorigeZeile = Zeile
DataList.MoveNext
Loop
bastla