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

Mit Batch Zeichen an einer bestimmten Stelle in txt Datei ersetzen

Frage Entwicklung Batch & Shell

Mitglied: BalloS

BalloS (Level 1) - Jetzt verbinden

20.06.2012 um 11:58 Uhr, 4549 Aufrufe, 7 Kommentare

Hallo,

ich hab mal wieder ein kleines Batch Problem, wo ich irgendwie nicht einmal ein Anfang finde.

Ich erhalte immer mal wieder Txtdateien mit jeder Menge Zeilen Inhalt. Die Zeilen haben alle eine festgelegte Länge.

Nun möchte ich immer an bestimmten Stellen in jeder Zeile ein Zeichen durch ein anderes ersetzen.

Und zwar stehen immer an folgenden Stellen ein Komma:

150
167
183
199
215

Dieses Komma soll nun durch ein Punkt ersetzt werden. Wichtig ist dabei, dass Kommas an anderen Stellen davon nicht betroffen sind. Es dürfen auf keinen Fall alle Kommas durch Punkte ersetzt werden, sondern nur die an den bestimmten Stellen.


Ist dies überhaupt durch eine Batchdatei möglich ?
Da dies später in einen automatischen Ablauf integriert werden soll, fällt die Möglichkeit von einem externen Programm leider weg.

Bin für jede Hilfe und Ansatz dankbar, der mich irgendwie weiterbringt.



gruss
BalloS
Mitglied: Skyemugen
20.06.2012, aktualisiert um 14:04 Uhr
Aloha,

prinzipiell machbar - theoretisch.

Praktisch dürfte es sinnvollerweise auf .VBS hinauslaufen, sollte dich das nicht stören (nein, ich selbst kann die Lösung nicht produzieren, bin immer froh, wenn ich gegebene VBS-Schnipsel verstehe und editieren kann, hehe).

Nur Geduld dafür haben wir unsere Spezialisten.

Mit batch, naja ob man es mögen will, eventuell so:

01.
@echo off & setlocal enabledelayedexpansion 
02.
for /f "usebackq delims=" %%s in ("E:\Skripte\REUSER.txt") do ( 
03.
	set "zeile=%%s" 
04.
	>>datei_neu.txt echo !zeile:~0,149!.!zeile:~150,16!.!zeile:~167,15!.!zeile:~183,15!.!zeile:~199,15!.!zeile:~215! 
05.
06.
pause 
07.
goto :eof
greetz André
Bitte warten ..
Mitglied: BalloS
20.06.2012 um 14:26 Uhr
Hi.

Danke. Aber leider funktioniert es nicht.

Er erstellt mir zwar eine neue Datei, aber diese ist leider leer.


Wenn ich das auch richtig interpretiere nimmt er nun nur die angegebenen Zeilen. Vielleicht habe ich es etwas unklar geschrieben :D

Also er soll jede Zeile der Datei nehmen. Es können unterschiedlich viele Zeilen sein. Und die Nummern sind die Stellen, wo das Komma ist.

Also in
Zeile 1 an Stelle 150,167,183,199 und 215
Zeile 2 an Stelle 150,167,183,199 und 215
Zeile 3 an Stelle 150,167,183,199 und 215

usw. Die Anzahl der Zeilen ansich ist unbekannt, da diese variiert.

Wenn sich das nur über VBA lösen lässt, nehme ich den Code dafür auch gerne (hab da nicht viel Ahnung) und müsste dann aber wissen, wie ich das aus einer Batchdatei heraus starten kann.

gruss
Ballos
Bitte warten ..
Mitglied: Skyemugen
20.06.2012, aktualisiert um 15:40 Uhr
Aloha,

ja, der code nimmt JEDE Zeile, und gibt nur die Zeile bis zum angegebenen Zeichen an, dann wird manuell ein Punkt ausgegeben und wieder ein Stück der Zeile etc.

bei mir funktioniert das halb-getestet problemlos, allerdings habe ich mir nicht die Mühe gemacht, hundertezeichenlange Zeilen zu kreiren und ich weiß auch nicht wie groß deine Datei gesamt ist.

Eventuell mal Zeile eins ändern echo on statt off und schauen, ob sich überhaupt etwas tut.

Sonst warten wir eben doch auf bastla, TsukiSan, Friemler und wie sie alle heißen, um VBS (nicht VBA) zu brützeln, die Dinger lassen sich, wenn man unbedingt muss, auch per batch starten.

greetz André
edit: mein Beispiel sah so aus:
Testdatei:
1h2b,fi5jgmsl4,skdm,2hf8s,xke,dkbl 
1h2bgf,5jgmül4,skdm,2hf,snxke,dkbl 
1h2bgfi5,gm|l4,skdm,2hf8,nxke,dkbl 
1h2,gfi5jgm&l4,skdm,2hf8sn,ke,dkbl
Skript:
01.
@echo off & setlocal enabledelayedexpansion 
02.
for /f "usebackq delims=" %%s in ("E:\Skripte\REUSER.txt") do ( 
03.
	set "zeile=%%s" 
04.
	>>datei_neu.txt echo !zeile:~0,14!.!zeile:~15,4!.!zeile:~20,9!.!zeile:~30! 
05.
06.
pause
Enddatei:
1h2b,fi5jgmsl4.skdm.2hf8s,xke.dkbl 
1h2bgf,5jgmül4.skdm.2hf,snxke.dkbl 
1h2bgfi5,gm|l4.skdm.2hf8,nxke.dkbl 
1h2,gfi5jgm&l4.skdm.2hf8sn,ke.dkbl
Bitte warten ..
Mitglied: TsukiSan
20.06.2012, aktualisiert um 16:19 Uhr
@Andre,

das schreit nach einem bastla

Mir ist auf die schnelle nur soetwas eingefallen in VBS
01.
Dim Pfad, MeineDaten 
02.
Dim FSO 
03.
Dim KOMMA, PUNKT 
04.
 
05.
Stelle = Array(150, 167, 183, 199, 215) 
06.
KOMMA = "," 
07.
PUNKT = "." 
08.
Pfad = "C:\REUSER.txt" 
09.
 
10.
Set FSO = CreateObject("Scripting.FileSystemObject") 
11.
MeineDaten = Split(FSO.OpenTextFile(Pfad, 1).ReadAll, vbCrLf) 
12.
 
13.
For h = 0 To (UBound(MeineDaten) - 1) 
14.
temp = MeineDaten(h) 
15.
MsgBox temp 'vorher 
16.
For i = 0 To Stelle(UBound(Stelle)) 
17.
    Select Case i 
18.
    Case Stelle(0) 
19.
        temp = Left(temp, Stelle(0)) & PUNKT & Mid(temp, Stelle(0) + 2, Len(temp)) 
20.
        i = Stelle(1) - 1 
21.
    Case Stelle(1) 
22.
        temp = Left(temp, Stelle(1)) & PUNKT & Mid(temp, Stelle(1) + 2, Len(temp)) 
23.
        i = Stelle(2) - 1 
24.
    Case Stelle(2) 
25.
        temp = Left(temp, Stelle(2)) & PUNKT & Mid(temp, Stelle(2) + 2, Len(temp)) 
26.
        i = Stelle(3) - 1 
27.
    Case Stelle(3) 
28.
        temp = Left(temp, Stelle(3)) & PUNKT & Mid(temp, Stelle(3) + 2, Len(temp)) 
29.
        i = Stelle(4) - 1 
30.
    Case Stelle(4) 
31.
        temp = Left(temp, Stelle(4)) & PUNKT & Mid(temp, Stelle(4) + 2, Len(temp)) 
32.
        i = Stelle(UBound(Stelle)) 
33.
    End Select 
34.
Next 
35.
MsgBox temp 'nachher 
36.
Next
Aber es wird noch nicht eine neue Datei angelegt. Bitte erst einmal testen durch einfügen entsprechender msgboxen.

Gruss
Tsuki
Bitte warten ..
Mitglied: bastla
20.06.2012, aktualisiert 21.06.2012
Hallo Tsuki!

Hätte ich fast genauso gemacht - nur vielleicht etwas kompakter formuliert:
01.
Stellen = Array(150, 167, 183, 199, 215) 
02.
KOMMA = "," 
03.
PUNKT = "." 
04.
Pfad = "D:\REUSER.txt" 
05.
 
06.
Set FSO = CreateObject("Scripting.FileSystemObject") 
07.
MeineDaten = Split(FSO.OpenTextFile(Pfad, 1).ReadAll, vbCrLf) 
08.
 
09.
For h = 0 To UBound(MeineDaten) 
10.
    temp = MeineDaten(h) 
11.
    WScript.Echo temp 'vorher 
12.
    For Each Stelle in Stellen 
13.
        If Mid(temp, Stelle, 1) = KOMMA Then temp = Left(temp, Stelle - 1) & PUNKT & Mid(temp, Stelle + 1) 
14.
    Next 
15.
    WScript.Echo temp 'nachher 
16.
    WScript.Echo 
17.
    MeineDaten(h) = temp 'Änderung zwischenspeichern 
18.
Next 
19.
 
20.
'fso.CreateTextFile(Pfad).Write Join(MeineDaten, vbCrLf) 'Datei durch geänderte Version ersetzen
@BalloS
Für die Testphase ist das Überschreiben der Originaldatei mit der geänderten Version durch das Auskommentieren der letzten Zeile noch deaktiviert - um das Script "scharf" zu schalten, einfach den Apostroph am Beginn der letzten Zeile entfernen ...

... ach ja: Wenn Du nicht ganz besonders gerne oft auf "Ok" klicken magst, solltest Du das Testen in die CDM-Shell verlegen und das Script so starten:
cscript //nologo "D:\Das Script.vbs"
- es werden dann die Vorher-Nachher-Vergleiche in der Shell angezeigt ...

Grüße
bastla
Bitte warten ..
Mitglied: TsukiSan
21.06.2012 um 00:12 Uhr
@bastla

na, da dachte ich gestern wohl in die gleiche Richtung
Deins ist wie immer schön kompakt und übersichtlich.
Danke für den Tipp!

Viele Grüße

Tsuki
Bitte warten ..
Mitglied: BalloS
21.06.2012 um 08:48 Uhr
Das Script funktioniert :D

Vielen Dank

Das vereinfacht mir hier eine ganze Menge.
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Batch & Shell
Per Batch ab einer bestimmten Stelle in einer .txt auslesen (1)

Frage von PeterPann zum Thema Batch & Shell ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Batch & Shell
Ungewöhnliche Txt.Datei-Abfrage mit Batch (3)

Frage von DaTobsn zum Thema Batch & Shell ...

Webentwicklung
gelöst HTML Output in eine txt Datei mit VisualBasicScript (2)

Frage von coca22COCA zum Thema Webentwicklung ...

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
Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (22)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

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 ...