Top-Themen

Aktuelle Themen (A bis Z)

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, 5099 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 ..
Ähnliche Inhalte
Batch & Shell
In txt file an bestimmter Position zeichen ersetzen, Ideen ?
gelöst Frage von buliwyfBatch & Shell7 Kommentare

EIn freundl. Hallo all ;-) mein Anliegen was mich jetzt 2 Tage beschaeftigt ist : wie kann ich in ...

Batch & Shell
Per Batch ab einer bestimmten Stelle in einer .txt auslesen
Frage von PeterPannBatch & Shell1 Kommentar

Hallo! Folgendes Problem: Ich habe ein anmelde und abmelde Skript die wie folgt aussehen: die logdatei die daraus resultiert ...

Batch & Shell
Tilde Zeichen per Batch ersetzen
gelöst Frage von Blackhawk386Batch & Shell6 Kommentare

Hi! Ich habe eine Datei in Textform, in der Umlaute per Batch umgewandelt werden müssen. Dazu habe ich hier ...

Batch & Shell
PS: Suchen und ersetzen in Dateien mit Sonderzeichen und bis zu einem bestimmten Zeichen + Wert um 1 erhöhen
Frage von Jenny82Batch & Shell2 Kommentare

Hallo zusammen, folgenden Powershell-Code habe ich bereits und funktioniert so ansich auch: nun zu meinen Problemen bzw. Herausforderungen: Suche1 ...

Neue Wissensbeiträge
Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 14 StundenApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 19 StundenWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 20 StundenWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 1 TagInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Heiß diskutierte Inhalte
Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server18 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Windows XP
Windows XP Aktivieren geht nicht
Frage von tetikmiroWindows XP13 Kommentare

Hallo Ich habe einen Windows XP mit einen vCenter Converter umgezogen auf eine ESXI. Soweit funktioniert dies auch ohne ...

Blogs
Immer wiederkehrende PHP Fehlermeldung bei Wordpress UTF-8 - ASCII
gelöst Frage von vcdweltBlogs11 Kommentare

Hi, seit einiger Zeit wird mein error_log meines Wordpress Blogs mit immer der gleichen Fehlermeldung überschwemmt. 14-Dec-2017 08:18:05 UTC ...

Switche und Hubs
Redundante L2 LWL Leitung über 2 Standorte - Spanning Tree - HP Equipment
gelöst Frage von ResolvSwitche und Hubs10 Kommentare

Hallo, ich stehe vor der Herausforderung eine Redundante L2 LWL Leitung über 2 Standorte herzustellen. Grundsätzliches Switching Know How ...