Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Textdatei, bestimmte Stellen in einer Zeile entfernen

Frage Entwicklung Batch & Shell

Mitglied: user90

user90 (Level 1) - Jetzt verbinden

03.02.2010, aktualisiert 10:00 Uhr, 5758 Aufrufe, 10 Kommentare

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.

http://www.administrator.de/index.php?content=132280

Weiß jemand wie man das mit Bat oder VBS macht?
danke
Mitglied: DrAlcome
03.02.2010 um 09:52 Uhr
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
Bitte warten ..
Mitglied: bastla
03.02.2010 um 10:04 Uhr
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 ...

Grüße
bastla
Bitte warten ..
Mitglied: user90
03.02.2010 um 10:05 Uhr
Nein, mit Excel geht es leider nicht, da alle Spalten in einer Zelle gezeigt werden.
Bitte warten ..
Mitglied: user90
03.02.2010 um 10:08 Uhr
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.
Bitte warten ..
Mitglied: bastla
03.02.2010 um 10:11 Uhr
Hallo user90!

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

... bzw folgenden Batch verwenden:
01.
@echo off & setlocal 
02.
set "Ein=D:\Import.txt" 
03.
set "Aus=D:\Spalte1.txt" 
04.
 
05.
del "%Aus%" 2>nul 
06.
for /f "usebackq delims=" %%i in ("%Ein%") do set "Zeile=%%i" & call :ProcessLine 
07.
goto :eof 
08.
 
09.
:ProcessLine 
10.
>>"%Aus%" echo %Zeile:~,33% 
11.
goto :eof
Probleme könnte es mit dem Batch geben, wenn in der ersten Spalte bestimmte Sonderzeichen (<|>&) enthalten sind.

Grüße
bastla
Bitte warten ..
Mitglied: user90
03.02.2010 um 10:30 Uhr
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
Bitte warten ..
Mitglied: DrAlcome
03.02.2010 um 10:35 Uhr
Sehr fein das es geklappt hat!
Batch ist zwar cooler, aber für ne einmalige Aktion passt Excel da gut!
Bitte warten ..
Mitglied: bastla
03.02.2010 um 11:43 Uhr
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 Code-Formatierung wäre Dir die unterschiedliche Zeichenanzahl auch aufgefallen ...
Bitte warten ..
Mitglied: user90
03.02.2010 um 19:05 Uhr
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 brauchen

Edit://

Zitat von bastla:
Hallo user90!
> vllt. werd ich es noch öfters brauchen
Na, dann lege ich noch die VBS-Variante drauf :
<code>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
Bitte warten ..
Mitglied: bastla
03.02.2010 um 19:19 Uhr
Hallo user90!
vllt. werd ich es noch öfters brauchen
Na, dann lege ich noch die VBS-Variante drauf :
01.
EinDatei = "D:\Import.txt" 
02.
AusDatei = "D:\Spalte1.txt" 
03.
Spaltenbreite = 32 
04.
 
05.
Set fso = CreateObject("Scripting.FileSystemObject") 
06.
Set Aus = fso.CreateTextFile(AusDatei) 
07.
 
08.
For Each Zeile In Split(fso.OpenTextFile(EinDatei).ReadAll, vbCrLf) 
09.
    Aus.WriteLine RTrim(Left(Zeile, Spaltenbreite)) 
10.
Next 
11.
Aus.Close
Diese Version hat sogar einen kleinen Zusatznutzen: Die Leerzeichen am Ende der einzelnen Felder werden entfernt ...

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
VB for Applications
gelöst Vbscript bestimmte Zeile ungeachtet der Nummerierung löschen (4)

Frage von aletri zum Thema VB for Applications ...

Batch & Shell
gelöst Mittels Batch jede Zeile einer Textdatei prüfen (4)

Frage von Peter32 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...