ollimuc
Goto Top

Verzwicktes Löschen eines Zeichens...

Hallo zusammen, ich durchforste nun seit 3 Tagen Euer Archiv - habe auch einige Anregungen gelesen allerding stecke ich jetzt fest. Vermutlich ist mein Problem recht simpel...

Ich bekomme aus einer ZFA-Software eine Datei mit einer variierenden Anzahle von Gerätenummern, jeden in einer eigenen Zeile. Die Nummern beginnen mit Hochkomma und enden mit Hochkomma und einem Komma. Hier ein kleines Beispiel:

'1041070089529691',
'15131863',
'13703509',
'1126110052504629',

Ich muss diesen Datensatz so bearbeiten, dass in der ersten Zeile "where nr in (" steht und in der letzten Zeile ";)". Das habe ich soweit alles. Was mir ums Verrecken nicht gelingt ist das Löschen des Kommas nach der letzten Gerätenummer. Im Prinzip soll das letzte Zeichen der letzten Spalte gelöscht werden (das abschließende ";)" füge ich erste später ein).

Könnt ihr mir hier weiterhelfen?

Bis jetzt habe ich es so:

@echo off
set name="ISU-VR-nicht-gefunden-Bezug.txt"
set ziel="ISU-VR-nicht-gefunden-Bezug-Datensatz-fuer-ZFA.txt"
set "var="
FOR /F "delims=" %%A in ('type %name%') do if not defined var set var=%%A
echo %var:~0,-1%>%ziel%
more +1 %name%>>%ziel%


Aber so wird ja nimmer nur das letzte Zeichen der 1. Zeile gelöscht.

Vorab schon einmal vielen Dank!

Content-ID: 189222

Url: https://administrator.de/contentid/189222

Ausgedruckt am: 22.11.2024 um 10:11 Uhr

Darkprodukt
Darkprodukt 07.08.2012 aktualisiert um 16:27:56 Uhr
Goto Top
Hallo OlliMuc und willkommen im Forum. und bitte schreibe doch nicht als Titel "Batch Problem

Die Fungtionierende Version:
@echo off & setlocal
set name="ISU-VR-nicht-gefunden-Bezug.txt"  
set ziel="ISU-VR-nicht-gefunden-Bezug-Datensatz-fuer-ZFA.txt"  
set "Bak=bak"  
set "Ret=%temp%\ret"  
set Anzahl=0
set "var="  

FOR /F "delims=" %%A in ('type %name%') do if not defined var set var=%%A  
set "var=%var:,=%"  
echo %var%>%ziel%
more +1 %name%>>%ziel%

FOR /F "delims=" %%A in ('type %name%') do set LZeile=%%A  
set "LZeile=%LZeile:,=%"  

for /f "delims=:" %%i in ('findstr /n "^" "%ziel%"') do set Anzahl=%%i  
set /a MitCR=%Anzahl%-2
set /a OhneCR=%Anzahl%-1

if %MitCR% leq 0 (
    echo Die Datei "%Datei%" enthaelt zu wenig Zeilen!  
    goto :eof
)

move "%ziel%" "%ziel%.%Bak%"  
echo\>%Ret%
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%ziel%.%Bak%"') do (  
    if %%i leq %MitCR% (>>"%ziel%" echo\%%j)  
    if %%i equ %OhneCR% (
        if defined LZeile (
            set /p=%LZeile%<%Ret%>>"%ziel%"  
        ) else (
            set /p=%%j<%Ret%>>"%ziel%"  
        )
    )
)

Das meiste kommt übrigens von hier:
Über Batch letzte Zeile in TXT ersetzen bzw löschen

Grüße
Darkprodukt
Karo
Karo 07.08.2012 um 15:19:18 Uhr
Goto Top
Hoi,

@echo off
Setlocal EnableDelayedExpansion
set name="ISU-VR-nicht-gefunden-Bezug.txt"  
set ziel="ISU-VR-nicht-gefunden-Bezug-Datensatz-fuer-ZFA.txt"  
set var
set /A COUNT=0
set /A COUNT2=0
FOR /F "delims=" %%i in ('type %name%') do (  
  set /A COUNT=!COUNT! + 1
)
FOR /F "delims=" %%A in ('type %name%') do (  
 SET VAR=%%A
 SET /A COUNT2=!COUNT2! + 1
REM  ECHO !COUNT2! von !COUNT!
 IF !COUNT2! NEQ %COUNT% (
    IF !COUNT2! EQU 1 set var=where nr in ^(!var!>%ziel%
    echo !var!>>%ziel%
 ) ELSE (
    echo !var:~0,-1!;^)>>%ziel%
 )
)

bye
Karo
Karo
Karo 07.08.2012 um 15:19:59 Uhr
Goto Top
oh, ich sollte mal F5 drücken ... face-wink
OlliMuc
OlliMuc 07.08.2012 um 15:33:13 Uhr
Goto Top
Titel ist geändert - sorry. face-wink

Teste gerade mal deine Variante...
OlliMuc
OlliMuc 07.08.2012 um 15:39:25 Uhr
Goto Top
Die Variante von darkprodukt läuft - super face-smile

Bei Karo wird das letzt Komma leider nicht gelöscht.

Ich danke Euch beiden für Eure Mühe! face-smile

Man lernt nie aus ... vlt schaff ich nun das nächste Problem selbst :D
Karo
Karo 07.08.2012 um 15:41:11 Uhr
Goto Top
doch wird es.....
schau mal genau hin, da steht ein ';'

Karo
OlliMuc
OlliMuc 07.08.2012 um 15:51:50 Uhr
Goto Top
Ausgangsdatei:
'1041070089529691',
'15131863',
'13703509',
'1126110052504629',

Ergebnis:
where nr in ('1041070089529691',
'15131863',
'13703509',
'1126110052504629',;)

... hab nix manipuliert, wirklich face-wink
Karo
Karo 07.08.2012 um 15:56:55 Uhr
Goto Top
...Du vielleicht nicht, aber wahrscheinlich ist in der letzten Zeile der Nummerndatei ein LEERZEICHEN nach dem Komma.
Denn wenn !var:~0,-1! das letzte Zeichen killt, kann es garnichts anderes sein.

Karo
Darkprodukt
Darkprodukt 07.08.2012 um 16:00:08 Uhr
Goto Top
Kurzer Tipp:

Lösche das komma doch so:
set "var=!var:,=!  
echo %var%

Grüße
Darkprodukt
OlliMuc
OlliMuc 07.08.2012 um 16:00:25 Uhr
Goto Top
Komisch -- hab jetzt einen Testlauf unter "normalen" Bedingungen durchgeführt und plötzlich schaut die letzte Zeile so aus:

'1020090002213069' Settings\Temp\f\ret

Woran liegt das? Ich bin leider nicht so wirklich sicher in Batch...
Darkprodukt
Darkprodukt 07.08.2012 aktualisiert um 16:28:33 Uhr
Goto Top
Hm...

Was ist den anders am durchlauf unter "normalen" Bedingungen?

Grüße
Darkprodukt
OlliMuc
OlliMuc 07.08.2012 um 16:19:18 Uhr
Goto Top
Am Durchlauf ist anders, dass vorher "where nr in )" eingefügt und danach ";)" eingefügt wird - aus einer anderen Software heraus.

Hab den Fehler - jemand hatte die Verzeichnise geändert, jetzt stimmt es wieder face-smile

Danke.
OlliMuc
OlliMuc 07.08.2012 aktualisiert um 16:25:22 Uhr
Goto Top
Das Ergebnis nach deiner angepassten "Karo-Variante" schaut so aus (wobei ich hinter set var noch ein "=" gesetzt habe - also set var=:

where nr in ('1041070089529691',
'15131863',
'13703509',
'1126110052504629' ;)


Das liegt nun an den Leerzeichen hinter den Kommas?
Darkprodukt
Darkprodukt 07.08.2012 um 16:24:50 Uhr
Goto Top
Ok dann ist die Frage ja gelöst...

Grüße
Darkprodukt
Darkprodukt
Darkprodukt 07.08.2012 aktualisiert um 16:43:16 Uhr
Goto Top
Ich habe die angepasste Karo-Variante wieder gelöscht,
da du ja sagtest das "where nr in (...;) etc." von einem anderen Programm gemacht werden und
das daher unnötig ist. Oder ist das eine andere Batch die nur dazu dient?

Und das "=" ist nicht nötig.

Wennschon so:
set "var=!var:,=!"  

Auserdem reicht es schon, wenn du Zeile 19 durch
echo !var:,=!;^)>>%ziel% 
ersetzt.

Grüße
Darkprodukt
OlliMuc
OlliMuc 07.08.2012 um 16:46:33 Uhr
Goto Top
Die Ergänzungen werden in der Tat von einem anderen Programm eingetragen, nicht mittels Batch. - OK, daher ist das "=" überflüssig, gut.

Nochmal Danke.
Darkprodukt
Darkprodukt 08.08.2012 um 00:27:57 Uhr
Goto Top
Ok,

wenn das Thema damit gelöst ist.

Markiere doch die Frage bitte als gelöst, Danke.

Grüße
Darkprodukt