Wie Zeichenketten automatisiert aus einer Textdatei auslesen und formatiert in einer neuen Datei abspeichern?

... komplette Frage anzeigen

3 Antworten

Öffne am besten die Datei mit Excel. Es öffnet sich der gleiche Dialog wie bei Daten → Text in Spalten.

Wähle dann "Feste Breite" und splitte deine Daten damit auf. 

Anschließend kannst du die Datei wieder unter anderem Namen speichern.


Zur Automatisierung würde ich mir ein VBScript schreiben.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Suboptimierer
14.12.2015, 10:02
Option Explicit

Call Main()

Sub Main()
Dim oFileRead
Dim oFileWrite
Dim sZeile
Dim sDatum
Set oFileRead = CreateObject("Scripting.FileSystemObject").OpenTextFile("./a.txt", 1)
Set oFileWrite = CreateObject("Scripting.FileSystemObject").CreateTextFile("./x.txt")

while not oFileRead.AtEndOfStream
 sZeile = oFileRead.ReadLine()
 sDatum = Mid(sZeile, 1, 8)
 oFileWrite.WriteLine sDatum
wend

oFileRead.Close()
oFileWrite.Close()
Set oFileRead = Nothing
Set oFileWrite = Nothing
MsgBox "Fertig!"

End Sub
2
Kommentar von minaba88
14.12.2015, 13:11

Vielen Dank für das Script! Mit der festen Spaltenbreite geht das leider nicht, da ich in jeder Zeile eventuell eine andere Spaltenbreite benötige. Ich bräuchte für diese Lösung dann erstmal ein Script, dass alle Zeilen mit gleichem Aufbauschema selektiert un in eigene Dateien abspeichert. Und dann könnte ich die so in Excel verarbeiten mit dem VBScript. Oder?

Ich weiß nicht, ob das verständlich ist, wie die Datei aufgebaut ist, deshalb nochmal ein Beispiel:

2015121420151211AB130008ANDERE(NULL)(NULL)ZEICHEN1234

2015121420151211AB130003AN(NULL)(NULL)DEREZEICHEN

2015121420151211AB130008ANDERE(NULL)(NULL)ZEICHEN5678

2015121420151211AB130002(NULL)(NULL)45654(NULL)(NULL)

Nur an dem Fett markierten "Code" kann ich entschlüsseln, welche Daten an welcher Position stehen und wie lang diese Zeichen sein können. Ich bräuchte also dann noch eine Funktion, wo ich diese Codes einbeziehen kann, um die Kriterien für die Aufspaltung mitzuteilen. Insgesamt gibt es ca. 25 unterschiedliche Codes und Formatierungen.


0

Wenn ich deine Beispielzeile in der Datei "data.txt" speichere, und folgenden (etwas längeren) Einzeiler auf der Kommandozeile ausführe:

awk 'BEGIN{OFS=" ";FIELDWIDTHS="4 2 2 4 2 2 2 22 3 3 3 1000";} /^[^#;].+$/ {$1=$1;print $0;}' data.txt > formatted.txt

... dann erhalte ich danach eine Datei "formatted.txt", in der sich dieser Inhalt findet:

2015 12 14 2015 08 01 LM 1300000000000100154321 NUL NUL NUL ANDEREZEICHEN

Da ich das genaue Format nicht kenne, habe ich die Feldbreiten einfach geschätzt. (Vor allem den langen Block, bestehend aus 22 Zeichen)

Das kleine Einzeilen-Skript überspringt sogar Leerzeilen, und Kommentarzeilen, die mit einem '#' oder ';' beginnen.

Im Großen und ganzen kann man das natürlich mit jeder beliebigen Programmiersprache erledigen, aber ich denke, kaum eine ist so prädestiniert dafür, wie AWK. :)

Das Problem wird nur sein, dass man unter Windows erst mal AWK installieren muss, und dass der Terminal-Emulator grottenschlecht ist. Auf nahezu jedem Unix (Mac OS X, Linux, BSD, etc.) wird standardmäßig ein guter Terminalemulator und natürlich auch awk standardmäßig zu finden sein.

Allerdings, ehe du anfängst etwas mit C# & Co zu programmieren, ist eine Installation von AWK allemal einfacher und schneller ... auch wenn es sich dabei nicht direkt um Windows-spezifische Tools handelt. :)

Naja, viel Erfolg! :)

PS: Wie bereits erwähnt, geht das natürlich auch problemlos mit Excel, oder jedem anderen Tabellenkalkulationsprogramm (OpenOffice, LibreOffice, Gnumeric, etc.)

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von minaba88
14.12.2015, 12:51

Vielen Dank so sollte ungefähr das Ergebnis aussehen. Leider darf ich auf dem Firmenrechner keine eigenen Programme installieren, deshalb bräuchte ich eine Lösung, die ich mit den Standard - WWindows / Office Konzepte gestalten kann. Könnte man dein Codebeispiel auch z.B. in VBScript umsetzen?

0

Es geht wohl mit jeder Programmiersprache. Die Frage ist eher mit welchen Sprachen kennst Du dich am besten aus. Wenn Du noch gar nicht weisst welche Sprache die beste ist, würde ich C# empfehlen, da es sehr viel Beispielcode im Netz gibt.
PS. Du hast Deine Frage nicht zuende gestellt, ich rate mal es sollte heissen, die Datei ist sehr gross.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von minaba88
14.12.2015, 12:54

Ich kenne mich mit Java aus. C# könnte ich mich auch noch so einigermaßen zurechtfinden. Ich such dann mal nach Codebeispielen.

Es kommt auch mal vor, dass die datei 10000 Zeilen groß ist.

1

Was möchtest Du wissen?