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

Mitglied: BalloS

BalloS (Level 1) - Jetzt verbinden

20.06.2012 um 11:58 Uhr, 5228 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
Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 13 StundenHumor (lol)3 Kommentare

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 1 TagGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Sicherheit

Intel gibt neue Spectre V2-Microcode-Updates frei (20.02.2018)

Information von kgborn vor 1 TagSicherheit

Intel hat zum 20. Februar 2018 weitere Microcode-Updates für OEMs freigegeben, um Systeme mit neueren Prozessoren gegen die Spectre ...

Microsoft
ARD-Doku - Das Microsoft Dilemma
Tipp von Knorkator vor 1 TagMicrosoft3 Kommentare

Hallo zusammen, vor einigen Tagen lief in der ARD u.a. Reportage. Das Youtube Video dazu dürfte länger verfügbar sein. ...

Heiß diskutierte Inhalte
Server-Hardware
Welche Rolle spielt Design bei Enterprise IT Hardware?
Frage von ApolloXServer-Hardware16 Kommentare

Ich arbeite für einen internationalen Elektronikhersteller in der Forschung und meine Aufgabe ist es, Feedback von Nutzern in Hinsicht ...

Windows Netzwerk
WSUS4 und Windows 10 Updates automatisch installieren
Frage von sammy65Windows Netzwerk15 Kommentare

Hallo miteinander, ich habe mit einen neuen WSUS Server aufgesetzt Server 2016 darauf einen aktuellen WSUS. Grund, wir stellen ...

Switche und Hubs
Cisco SG350X-48 AdminIP in anderes VLAN
Frage von lcer00Switche und Hubs14 Kommentare

Hallo zusammen, ich habe ein Problem mir einem Cisco SG350X-48 bei der Erstinstallation wurde eine IP 192.168.0.254 (Default VLAN ...

Windows Netzwerk
Backup über WAN
Frage von petereWindows Netzwerk11 Kommentare

Hallo, ich muss aus einem entfernten WAN (synchrone 1Gbit) Daten sichern. Dabei handelt es sich sowohl um wenige große ...