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

Suchen und ersetzten mit Bedingung

Frage Entwicklung Batch & Shell

Mitglied: zeed78

zeed78 (Level 1) - Jetzt verbinden

24.02.2012, aktualisiert 13:35 Uhr, 2108 Aufrufe, 20 Kommentare

Hallo,

ich muss in einer Datei Zeile für Zeile überprüfen. Ich muss das 2. und 3. "-" durch " " ersetzten, wenn die Zeile mit einem 1. " -" beginnt.

So sieht meine Datei aus (Die Leerzeichen werden leider nicht angezeigt).

56651 xxxxx 11712 09.01.12 265,85 316,36
-56651 xxxxx 11712 09.01.12 -265,85 -316,36
56653 xxxxx 13500 10.01.12 -45,00 -53,55

Also nochmals:

Ich muss die Minusse vor den Beträgen durch ein Leerzeichen ersetzten, wenn die Zeile mit einem Minus beginnt (Vor dem Minus sind 2 Leerzeichen).

In dem Beispiel müssten jetzt die Minusse vor den Zahlen in Zeile 2 durch ein Leerzeichen ersetzt werden. In Zeile 3 müssen die Minusse bleiben.

So sollte es aussehen:

56651 xxxxx 11712 09.01.12 265,85 316,36
-56651 xxxxx 11712 09.01.12 265,85 316,36
56653 xxxxx 13500 10.01.12 -45,00 -53,55


Hab Ihr eine Idee?
Mitglied: Pjordorf
24.02.2012 um 13:50 Uhr
Hallo,

Zitat von zeed78:
(Die Leerzeichen werden leider nicht angezeigt).
Dann setze diese doch in code tags mit type=plain. Hier nachzulesen http://www.administrator.de/index.php?faq=20#toc31.
   56651 xxxxx             11712 09.01.12          265,85          316,36  
  -56651 xxxxx             11712 09.01.12         -265,85         -316,36  
   56653 xxxxx             13500 10.01.12          -45,00          -53,55
Gruß,
Peter
Bitte warten ..
Mitglied: bastla
24.02.2012 um 13:51 Uhr
Hallo zeed78 und willkommen im Forum!

Etwa so:
01.
@echo off & setlocal 
02.
set "Ein=D:\Datei1.txt" 
03.
set "Aus=D:\Datei2.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.
if "%Zeile:~,1%" neq "-" (>>"%Aus%" echo %Zeile% & goto :eof) 
11.
set "Zeile=%Zeile:-= %" 
12.
>>"%Aus%" echo -%Zeile:~1% 
13.
goto :eof
Ich habe mal vorausgesetzt, dass es in der Datei keine erhaltenswerten Leerzeilen gibt [Edit] und dass die nicht angezeigten Leerzeichen nicht am Anfang der Zeile stehen [/Edit]...

Grüße
bastla
Bitte warten ..
Mitglied: zeed78
24.02.2012 um 15:05 Uhr
Leider sind die Leerzeichen wichtig.


@echo off & setlocal 
set "Ein=fibujour" 
set "Aus=datei2.txt" 
 
del "%Aus%" 2>nul 
for /f "usebackq delims=" %%i in ("%Ein%") do set "Zeile=%%i" & call :ProcessLine 
goto :eof 
 
:ProcessLine 
if "%Zeile:~,1%" neq "-" (>>"%Aus%" echo %Zeile% & goto :eof) 
set "Zeile=%Zeile:-= %" 
>>"%Aus%" echo -%Zeile:~1% 
goto :eof
Habe ich versucht. Klappt nicht.
Ich würde auch gerne die datei fibujour einfach überschreiben, und keine neu anlegen.
Dazu kommt noch eines, was ich ausgeixt habe sind eigentlich Kurznamen. Diese können auch Sonderzeichen wie "&" oder "," enthalten.
Was mir einen haufen Fehler ausspuckt und die Daten zerhäckselt.
Bitte warten ..
Mitglied: bastla
24.02.2012 um 16:01 Uhr
Hallo zzed78!
Leider sind die Leerzeichen wichtig.
Dann poste doch bitte (damit sich genau feststellen lässt, wo denn nun welche sind), wie schon von Pjordorf vorgeschlagen, die Beispieldatei in der gleichen Formatierung wie den Batch gerade eben ...
Ich würde auch gerne die datei fibujour einfach überschreiben, und keine neu anlegen.
Dazu braucht es ja nur die eine zusätzliche Zeile
move "%Aus%" "%Ein%"
Dazu kommt noch eines, was ich ausgeixt habe sind eigentlich Kurznamen. Diese können auch Sonderzeichen wie "&" oder "," enthalten.
Sollten wir sonst noch etwas wissen?

[Edit] Unter der Annahme, dass das dritte Zeichen (deswegen "2" in der Zeile 11) vom Beginn der Zeile an zu prüfen ist, sähe das dann so aus:
01.
@echo off & setlocal 
02.
set "Ein=fibujour" 
03.
set "Aus=%temp%\fibujour" 
04.
 
05.
del "%Aus%" 2>nul 
06.
for /f "usebackq delims=" %%i in ("%Ein%") do set "Zeile=%%i" & call :ProcessLine 
07.
move "%Aus%" "%Ein%" 
08.
goto :eof 
09.
 
10.
:ProcessLine 
11.
if "%Zeile:~2,1%" neq "-" goto :Ausgabe 
12.
set "Zeile=%Zeile:-= %" 
13.
set "Zeile=  -%Zeile:~3%" 
14.
 
15.
:Ausgabe 
16.
setlocal enabledelayedexpansion 
17.
>>"%Aus%" echo %Zeile% & goto :eof 
18.
endlocal 
19.
goto :eof
Leerzeilen werden so weiterhin nicht "mitgenommen" ...
[/Edit]

Grüße
bastla
Bitte warten ..
Mitglied: zeed78
24.02.2012 um 17:47 Uhr
Erstmal danke. (Das hatte ich vorher ganz vergessen.

1. Die Formatierung ist wie die in Pjordorfs Post. (hast du aber schon gemerkt ->3.Zeichen)
2. nochmals danke
3. ich glaube nein ;)
4. Ich werde es nach meinem Skiausflug nochmals testen.

Ich melde mich dann mit dem Ergebnis.

Schönes Wochenende euch allen.


P.S.: Wenn ich erst nach dem Namenskürzel die "-" ersetzten will, dann muss ich doch Zeile 13 abändern

z.B.: 13. set "Zeile= -%Zeile:~30%"
Bitte warten ..
Mitglied: bastla
24.02.2012 um 18:04 Uhr
Hallo zeed78!
Wenn ich erst nach dem Namenskürzel die "-" ersetzten will ...
... ist das genau das, was der Batch schon macht - es wird ja in Zeile 13 die Zeile neu zusammengebaut nach dem Schema 2 Leerzeichen + "-" + Rest der Zeile (es wurden vorweg schon alle "-" in Leerzeichen umgewandelt, daher die 3 Leerzeichen am Anfang überspringen) ab Position 4 ...

Grüße
bastla
Bitte warten ..
Mitglied: zeed78
05.03.2012 um 15:20 Uhr
Hallo,

das funktioniert soweit gut.
Es gibt nur noch ein Problem:

Wenn in einer Zeile z.B. "Vogel&Schworm" steht, dann spuckt er aus: "der Befehl Schworm konnte nicht gefunden werden".

Und das Schlimmste ist, er löscht die ganze Zeile.
Bitte warten ..
Mitglied: bastla
05.03.2012 um 16:14 Uhr
Hallo zeed78!
Es gibt nur noch ein Problem:
... das sich vermutlich nur wird lösen lassen, wenn Du Deinen aktuellen Batch postest ...

Grüße
bastla
Bitte warten ..
Mitglied: zeed78
06.03.2012 um 10:28 Uhr
Ich hatte einfach deinen Batch übernommen:
01.
@echo off & setlocal 
02.
 set "Ein=fibujour" 
03.
 set "Aus=%temp%\fibujour" 
04.
  
05.
 del "%Aus%" 2>nul 
06.
 for /f "usebackq delims=" %%i in ("%Ein%") do set "Zeile=%%i" & call :ProcessLine 
07.
 move "%Aus%" "%Ein%" 
08.
 goto :eof 
09.
  
10.
 :ProcessLine 
11.
 if "%Zeile:~2,1%" neq "-" goto :Ausgabe 
12.
 set "Zeile=%Zeile:-= %" 
13.
 set "Zeile=  -%Zeile:~3%" 
14.
  
15.
 :Ausgabe 
16.
 setlocal enabledelayedexpansion 
17.
 >>"%Aus%" echo %Zeile% & goto :eof 
18.
 endlocal 
19.
 goto :eof 
cU all
zeed78
Bitte warten ..
Mitglied: bastla
06.03.2012 um 10:39 Uhr
Hallo zeed78!
Ich hatte einfach deinen Batch übernommen:
Schwerer Fehler ...

Ändere die Zeile 17 auf
>>"%Aus%" echo !Zeile!
(was ich ursprünglich schon hätte tun sollen) ...

Grüße
bastla
Bitte warten ..
Mitglied: zeed78
06.03.2012 um 11:09 Uhr
Prima,

vielen Dank. So sieht es klasse aus.
Bitte warten ..
Mitglied: zeed78
19.03.2012 um 10:00 Uhr
So jetzt habe ich noch ein Problem:

Die gleiche Datei:

   56651 xxxxx             11712 09.01.12          265,85          316,36   
  -56651 xxxxx             11712 09.01.12         -265,85         -316,36   
   56653 xxxxx             13500 10.01.12          -45,00          -53,55
Allerdings muss ich jetzt immer, wenn vor den Beträgen ein Minus steht, auch noch vor die erste Zahl ein Minus setzten.
Kann ich den oberen Programmteil nehmen, und das Leerzeichen durch ein Minus ersetzten?

Das ist der erste Programmteil:

01.
nul 
02.
for /f "usebackq delims=" %%i in ("%Ein%") do set "Zeile=%%i" & call :ProcessLine 
03.
move "%Aus%" "%Ein%" 
04.
goto :eof 
05.
 
06.
:ProcessLine 
07.
if "%Zeile:~2,1%" neq "-" goto :Ausgabe 
08.
set "Zeile=%Zeile:-= %" 
09.
set "Zeile=  -%Zeile:~3%" 
10.
 
11.
:Ausgabe 
12.
setlocal enabledelayedexpansion 
13.
>>"%Aus%" echo !Zeile! & goto :eof 
14.
endlocal 
15.
goto :eof
cU all

zeed78
Bitte warten ..
Mitglied: bastla
19.03.2012 um 10:47 Uhr
Hallo zeed78!
immer, wenn vor den Beträgen ein Minus steht, auch noch vor die erste Zahl ein Minus setzten.
heißt, dass Deine 3. Zeile nachher so
 -56653 xxxxx             13500 10.01.12          -45,00          -53,55
aussehen soll (oder soll dann nur vor der ersten Zahl das Minus stehen)?

Grüße
bastla
Bitte warten ..
Mitglied: zeed78
19.03.2012 um 12:46 Uhr
Hallo bastla,

genau so soll es aussehen.
Bitte warten ..
Mitglied: bastla
19.03.2012 um 13:01 Uhr
Hallo zeed78!

Dann versuch es mit folgendem Verarbeitungsteil:
01.
:ProcessLine 
02.
if "%Zeile:~2,1%" neq "-" ( 
03.
    echo "%Zeile%"|findstr "-">nul && set "Zeile=  -%Zeile:~3%" 
04.
    goto :Ausgabe 
05.
06.
set "Zeile=%Zeile:-= %" 
07.
set "Zeile=  -%Zeile:~3%" 
08.
 
09.
:Ausgabe 
10.
setlocal enabledelayedexpansion 
11.
>>"%Aus%" echo !Zeile! & goto :eof 
12.
endlocal 
13.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: zeed78
19.03.2012 um 14:13 Uhr
Hallo nochmal,

in jeder Zeile die er bearbeitet Syntaxfehler.
Bitte warten ..
Mitglied: bastla
19.03.2012 um 16:26 Uhr
Hallo zeed78!

Inzwischen hatte ich etwas Zeit zum Testen:
01.
:ProcessLine 
02.
if "%Zeile:~2,1%" neq "-" ( 
03.
    echo "%Zeile%"|findstr "\-" >nul && set "Zeile=  -%Zeile:~3%" 
04.
    goto :Ausgabe 
05.
06.
set "Zeile=%Zeile:-= %" 
07.
set "Zeile=  -%Zeile:~3%" 
08.
 
09.
:Ausgabe 
10.
setlocal enabledelayedexpansion 
11.
>>"%Aus%" echo !Zeile! 
12.
endlocal 
13.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: zeed78
20.03.2012 um 14:57 Uhr
Cool, es klappt,

aber der erste Programmteile sollte eigentlich wegfallen.
also

  -56651 xxxxx             11712 09.01.12         -265,85         -316,36  
soll so bleiben.
Bitte warten ..
Mitglied: bastla
20.03.2012 um 15:03 Uhr
Hallo zeed78!

Dann lass doch einfach die Zeilen 6 und 7 weg ...

... bzw reduziere das Ganze auf:
01.
:ProcessLine 
02.
if "%Zeile:~2,1%" neq "-" echo "%Zeile%"|findstr "\-" >nul && set "Zeile=  -%Zeile:~3%" 
03.
setlocal enabledelayedexpansion 
04.
>>"%Aus%" echo !Zeile! 
05.
endlocal 
06.
goto :eof
Grüße
bastla
Bitte warten ..
Mitglied: zeed78
20.03.2012 um 16:19 Uhr
Haha,

cool. Eine Procesline und fertig.

Einen recht schönen Dank Bastla.
Es tut.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Suche ersetzten Inhalt Datei aus gesamten Verzeichnis
Frage von thomas1972Batch & Shell3 Kommentare

Guten Abend, Ich habe folgendes Problem. In einem Verzeichnis liegen x Textdateien, nun möchte ich in den Dateien gewisse ...

Batch & Shell
Wert in Datei Suchen und if else Bedingung
Frage von trallerBatch & Shell4 Kommentare

Hallo, ich möchte ein kleines Bash-Script erstellen, welches prüft, ob ein bestimmter Text, welcher die Variable $suchtext ist, in ...

Server-Hardware
Ich suche ein Programm das unsere Server Excel Liste zum Patchen ersetzt
Frage von Perzi78Server-Hardware9 Kommentare

Hallo, wie im Titel oben beschrieben suche ich ein Programm, mit dem ich meine Server verwalten kann. Momentan haben ...

Batch & Shell
IPTABLES Regeln ersetzten
gelöst Frage von SpeakerSTBatch & Shell4 Kommentare

Hallo, ich hoffe mir kann hier jemand helfen. Ich habe ein Script das alle 5 min Prozesse abfragt. Wenn ...

Neue Wissensbeiträge
Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 1 TagApple

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 1 TagWindows 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 1 TagWebbrowser

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

Hardware
Kein Bild mit nur einer bestimmten Grafikkarten - Mainboard Konfiguration
gelöst Frage von bestelittHardware18 Kommentare

Hallo zusammen, ich hatte schon einmal eine ähnliche Frage gestellt. Damals hatte ich genau das gleiche Problem. Allerdings lies ...

Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement16 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...