user90
Goto Top

Textdatei, bestimmte Stellen in einer Zeile entfernen

Hallo,

ich hab auf dem Rechner eine Textdatei, dessen Inhalt so ähnlich aussieht:

Spalte1:                       Spalte2:                            Spalte3:

blabla                           374                                    563
blabla                           639                                    456
blablub                         345                                    dfga

Ich will die Spalte2 und Spalte3 und alles was darunter steht entfernen, nur per Hand würde es
sehr lange dauern, da die Datei ziemlich groß ist.

Hier im Forum fand ich dann jemand, der so ein ähnliches Problem hatte, nur der wollte Spalte1 und
alles was darunter liegt entfernen.

Wie bestimmte Stellen in Zeilen aus .txt entfernen

Weiß jemand wie man das mit Bat oder VBS macht?
danke

Content-Key: 135032

Url: https://administrator.de/contentid/135032

Printed on: April 19, 2024 at 13:04 o'clock

Member: DrAlcome
DrAlcome Feb 03, 2010 at 08:52:36 (UTC)
Goto Top
Geht bestimmt per Batch-Datei, aber ich würde es einfach in Excel importieren und die entsprechenden Spalten raus hauen. Dann wieder als TXT exportieren.
Ohne Batch-Vorkenntnisse geht die Excel-Variante schneller face-wink
Member: bastla
bastla Feb 03, 2010 at 09:04:18 (UTC)
Goto Top
Hallo user90!

Gibt es ein Trennzeichen zwischen den Spalten oder eine feste Spaltenbreite?

@DrAlcome
Soferne es sich um eine einmalige Aktion handelt und daher Automatisierung kein Thema ist, hast Du völlig Recht ... face-smile

Grüße
bastla
Member: user90
user90 Feb 03, 2010 at 09:05:16 (UTC)
Goto Top
Nein, mit Excel geht es leider nicht, da alle Spalten in einer Zelle gezeigt werden.
Member: user90
user90 Feb 03, 2010 at 09:08:14 (UTC)
Goto Top
hi bastla,

die Txt-Datei sieht wie oben aus, in jeder Zeile ist eine feste Spaltenbreite

Edit:// ich hab die ganze Zeit die TXT-Datei per Drag&Drop in Excel rüber kopiert, hat nicht geklappt.
hab dann über Datei Öffnen - Feste Breite ausprobiert, jetzt geht es, danke euch beiden.

Mich interessiert´s dennoch, wie es mit Bat oder VBS geht.
Member: bastla
bastla Feb 03, 2010 at 09:11:58 (UTC)
Goto Top
Hallo user90!

Dann kannst Du die Datei in Excel öffnen und "Feste Breite" wählen ...

... bzw folgenden Batch verwenden:
@echo off & setlocal
set "Ein=D:\Import.txt"  
set "Aus=D:\Spalte1.txt"  

del "%Aus%" 2>nul  
for /f "usebackq delims=" %%i in ("%Ein%") do set "Zeile=%%i" & call :ProcessLine  
goto :eof

:ProcessLine
>>"%Aus%" echo %Zeile:~,33%  
goto :eof
Probleme könnte es mit dem Batch geben, wenn in der ersten Spalte bestimmte Sonderzeichen (<|>&) enthalten sind.

Grüße
bastla
Member: user90
user90 Feb 03, 2010 at 09:30:20 (UTC)
Goto Top
Ich hab soeben den BatchScript ausgeführt.
Folgendes steht dann in Spalte1.txt:

Spalte1:                         S
blabla                             3
blabla                             6
blablub                           3

hat leider nicht geklappt, aber ich geb mich mit der Excel-Variante zufrieden.
thx
Member: DrAlcome
DrAlcome Feb 03, 2010 at 09:35:38 (UTC)
Goto Top
Sehr fein das es geklappt hat! face-smile
Batch ist zwar cooler, aber für ne einmalige Aktion passt Excel da gut! face-smile
Member: bastla
bastla Feb 03, 2010 at 10:43:18 (UTC)
Goto Top
Hallo user90!

Scheitert aber eigentlich nur daran, dass ein Zeichen zuviel verwendet wird (ich hatte mich an Deinem Beispiel oben orientiert - wobei in den ersten beiden Zeilen 33 und in der dritten Zeile nur 32 Zeichen für die Spalte1 aufscheinen - und zur Sicherheit den größeren Wert genommen) - lässt sich aber leicht durch Änmderung des Wertes in der Zeile 10 anpassen.

Aber, wie gesagt, wenn Du das ohnehin nicht öfters brauchst ...

Grüße
bastla

P.S.: Bei Verwendung von -Formatierung wäre Dir die unterschiedliche Zeichenanzahl auch aufgefallen ...
Member: user90
user90 Feb 03, 2010 at 18:05:59 (UTC)
Goto Top
Ich hab soeben noch mal mit der Wert in der 10. Zeile rumgespielt, und es geschafft, dass
nur die Spalte1 und alles was darunter steht in Spalte1.txt gespeichert wird.
danke, vllt. werd ich es noch öfters brauchenface-smile

Edit://

Zitat von @bastla:
Hallo user90!
> vllt. werd ich es noch öfters brauchenface-smile
Na, dann lege ich noch die VBS-Variante drauf face-wink:
EinDatei = "D:\Import.txt"
AusDatei = "D:\Spalte1.txt"
Spaltenbreite = 32

Set fso = CreateObject("Scripting.FileSystemObject")
Set Aus = fso.CreateTextFile(AusDatei)

For Each Zeile In Split(fso.OpenTextFile(EinDatei).ReadAll, vbCrLf)
Aus.WriteLine RTrim(Left(Zeile, Spaltenbreite))
Next
Aus.Close

Wow, das klappt auch noch, man muss nur mit dem Wert der Spaltenbreite "experimentieren".
Hab jetzt dank euch beiden drei Varianten. Respect all batch/vbsprofis
Member: bastla
bastla Feb 03, 2010 at 18:19:58 (UTC)
Goto Top
Hallo user90!
vllt. werd ich es noch öfters brauchenface-smile
Na, dann lege ich noch die VBS-Variante drauf face-wink:
EinDatei = "D:\Import.txt"  
AusDatei = "D:\Spalte1.txt"  
Spaltenbreite = 32

Set fso = CreateObject("Scripting.FileSystemObject")  
Set Aus = fso.CreateTextFile(AusDatei)

For Each Zeile In Split(fso.OpenTextFile(EinDatei).ReadAll, vbCrLf)
    Aus.WriteLine RTrim(Left(Zeile, Spaltenbreite))
Next
Aus.Close
Diese Version hat sogar einen kleinen Zusatznutzen: Die Leerzeichen am Ende der einzelnen Felder werden entfernt ...

Grüße
bastla