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 Zeilenumbruch bei Sonderzeichen, danach Sonderzeichen löschen und bestimmte Zeilen löschen die mit einem Wert beginnen

Frage Entwicklung Batch & Shell

Mitglied: tekken

tekken (Level 1) - Jetzt verbinden

15.12.2011, aktualisiert 18.10.2012, 3528 Aufrufe, 11 Kommentare

Hallo zusammen,

habe mal wieder ein kleines Problem und hoffe auf eure Hilfe:

Ich habe eine Textdatei, die wie folgt ausschaut (Beispiel):

123, 456789,01/02/03;25,1,27
123, 4512313789,01/02/03;25,1,27
123, 456124,01/02/03;25,1,27
123, 45645489,01/02/03;25,1,27
123, 456454589,01/02/03;25,1,27
131;231145;01/11/166;96,00;1;198@21;23076;0111/611;12,0;72
933, 34241 123132 ,13213131
933, 34241 123132 ,13213131
933, 34241 123132 ,13213131

Das @ Zeichen wurde eingefügt, um zu erkennen, wo ein Zeilenumbruch eingefügt werden soll.
Außerdem sollen die Zeilen, welche mit 933 beginnen vollständig gelöscht werden.

Der Text soll dann am Ende so aussehen:

123, 456789,01/02/03;25,1,27
123, 4512313789,01/02/03;25,1,27
123, 456124,01/02/03;25,1,27
123, 45645489,01/02/03;25,1,27
123, 456454589,01/02/03;25,1,27
131;231145;01/11/166;96,00;1;198
21;23076;0111/611;12,0;72


Also folgende 3 Punkte:

1. Nach einem @ soll ein Zeilenumbruch eingefügt werden
2. Das @ soll gelöscht werden
3. Alle Zeilen mit dem Inhalt beginnend 933 sollen gelöscht werden.

Ich hoffe ihr könnt mir helfen.

LG tekken
Mitglied: TsukiSan
15.12.2011, aktualisiert 18.10.2012
Hallo tekken,

hast du denn keine Anfangsideen?
Hier könntest du bastlas Ansatz nehmen, um die Zeilen zu löschen (bzw. nicht mitzuschreiben) die mit was-auch-immer anfangen.
Und zu deinem 1ten und auch 2ten Punkt kannst du das mal etwas durchackern von bastla.

Wenn dann noch Fragen sind, hilft der Weihnachtsmann

Gruss
Tsuki
Bitte warten ..
Mitglied: tekken
15.12.2011 um 13:41 Uhr
Hi Tsuku,

doch ich habe ein paar Ideen und Vorschläge getestet:

@ECHO off
SETLOCAL enabledelayedexpansion

SET "datei="
SET "ausgabe="
SET "suchzeichen=@"
SET "ersetzungszeichen="

REM Loeschen der Ausgabedatei, falls sie (noch) existiert
IF EXIST %ausgabe% (DEL /f %ausgabe% 1>NUL 2>NUL)

REM Datei zeilenweise auslesen
REM und in Variable "zeile" schreiben
FOR /f "delims=" %%i IN ('FINDSTR . "%datei%"') DO (
SET zeile=%%i& CALL :ersetzen !zeile!
)
GOTO :eof

:ersetzen
REM Das Suchzeichen mit dem Ersetzungszeichen tauschen
SET zeile=!zeile:%suchzeichen%=%ersetzungszeichen%!

REM Ergebnis in die Ausgabedatei schreiben
ECHO !zeile!>>%ausgabe%
GOTO :eof

:eof

Das funktioniert auch recht gut, nur kann ich nur ein Leerzeichen einfügen.
Vllt kann mir noch jemand helfen, gerne auch der Weihnachtsmann.

Gruß tekken
Bitte warten ..
Mitglied: Skyemugen
15.12.2011 um 13:49 Uhr
Aloha,

versuche es doch einmal hiermit:

01.
@echo off & setlocal 
02.
(for /f "tokens=1,* delims=@" %%s in ('findstr /v /B "933," "E:\Skripte\test.txt"') do ( 
03.
	echo %%s 
04.
	set "end=%%t" 
05.
	if defined end echo %%t 
06.
))>%temp%\neu.txt 
07.
pause 
08.
goto :eof
greetz André

P.S.: unsere schöne Codeformatierung ist hier zu finden
edit:
Zitat von TsukiSan:
[Edit]
Skye ist ja auch schon zur Hilfe herbeigeeilt
[/Edit]

Ich fühle mich ohne e immer so leicht wie eine Feder an den einen Asterix-Film denken muss
Bitte warten ..
Mitglied: TsukiSan
15.12.2011 um 13:54 Uhr
Nun gut, du hast dich für Batch entschieden. Das geht auf jeden Fall auch!
Ich allerdings würde es in VBS machen (ist Geschmackssache!)
Um mal mit bastlas Beispiel anzufangen und zu es zurecht zuschneidern:
Zum Zeilen weglöschen kannst du das hier nehmen und auch gleich noch ersetzen (replacen):
01.
Set fso = CreateObject("Scripting.FileSystemObject") 
02.
DateiEin = "D:\Datei.txt" 
03.
DateiAus = "D:\Datei_neu.txt" 
04.
T = Split(fso.OpenTextFile(DateiEin).ReadAll, vbCrLF) 
05.
Set Ausgabe = fso.CreateTextFile(DateiAus, True) 
06.
For Each Z In T 
07.
   Z = replace(Z, "@",  vbcrlf) 
08.
   If Left(Z, 3) <> "933" Then Ausgabe.WriteLine Z 
09.
Next 
10.
Ausgabe.Close
Du musst noch den Pfad und Dateinamen anpassen und das ganze mal Testen (habe ich jetzt nicht gemacht).
Im Prinzip is das die Skizze in VBS

Gruss vom Weihnachtsmann

[Edit]
Skye ist ja auch schon zur Hilfe herbeigeeilt
[/Edit]
Bitte warten ..
Mitglied: tekken
15.12.2011 um 13:57 Uhr
Habs mit [Code][/CODE] probiert hat natürlich nicht geklappt :P Danke für deine Hilfe, funktioniert perfekt.
Wünsche allen Helfern frohe Weihnachten =)

Gruß tekken
Bitte warten ..
Mitglied: TsukiSan
15.12.2011 um 13:59 Uhr
Das böse böse e
Das hat mir diese Woche an anderer Stelle schon mal einen Streich gespielt

hab's geändert!

Gruss
Tsuki
Bitte warten ..
Mitglied: tekken
15.12.2011 um 14:07 Uhr
Hi ihr beiden,

geht doch noch nicht ganz^^
Habe das Problem, dass mehrere @ in einer Zeile vorhanden sind und er jeweils nur 1 Umbruch macht.
Müsste mann dann nochmal ne Schleife machen?

Gruß tekken
Bitte warten ..
Mitglied: Skyemugen
15.12.2011 um 14:14 Uhr
Aloha,

ganz ehrlich: man könnte jetzt nach einem unserer Tutorials mit einer variablen Anzahl an Laufvariablen/Tokens arbeiten und die Schleife weiterstricken ... oder Unterschleifen/-programme entwerfen ...

oder du nimmst TsukiSans VBScript, das auch für deinen erweiterten Fall seine Arbeit ordnungsgemäß verrichtet

greetz André

P.S.: ... kommt davon, wenn man nicht den vollen Umfang in den EP packt ^__^
Bitte warten ..
Mitglied: tekken
15.12.2011 um 14:27 Uhr
Danke für die Antwort.

Habs mal mit TsukiSans VBScript probiert und klappt fast alles hervorragend. Nur das Löschen der Zeilen mit 933 beginnend funktioniert nicht.

Die Zeile schaut bei mir so aus: If Left(Z, 3) <> "21;9" Then Ausgabe.WriteLine Z

Musste die Variable anpassen.

Ja da war ich wohl selber schuld =)

Wär toll wenn ihr mir da noch nen Tipp geben könntet.

Aufjedenfall schonmal vielen Dank.
Bitte warten ..
Mitglied: Skyemugen
15.12.2011 um 14:33 Uhr
Aloha,

hm? Tut mir leid, kann ich nicht nachvollziehen, das VBS tut genau seinen Dienst

If Left(Z, 3) <> "933" Then Ausgabe.WriteLine Z muss schon so bleiben, schließlich werden dort die ersten drei Zeichen einer Zeile von links nur zum Ausgeben deklariert, wenn diese UNGLEICH 933 sind.

greetz André
Bitte warten ..
Mitglied: tekken
15.12.2011 um 14:36 Uhr
Ah ok dann hab ichs verstanden.

Hab es so angepasst und funktioniert:

If Left(Z, 4) <> "933" Then Ausgabe.WriteLine Z

DANKE DANKE DANKE
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
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 ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...