sugram
Goto Top

Batch ausgabe zeilenweise stat spaltenweise ausgeben

Hallo


Ich versuche nun schon seit einiger Zeit mein "Problem" zu lösen.
Aber ich bekomme es einfach nicht hin.

Situation:
Ich habe mehrere Dateien in denen ich einen bestimmten String suche und ausgeben möchte.
Soweit habe ich das schon gelöst.

String der Datei:
Maschine;  -18;  Connector;   18;  0x00000000000;  -2;  user;  Rechner;  Maschine;  Pins_Connector;  -1;  -1;  -1;  -1;  2183;  568;  \\Server\Share\Share\L306\08506200021611092222222922_161109121129_Maschine_Group,jpg;  Connector_Steckerpins;  ;  ;  ;  ;  6,60796;  -2,26107e-002;  -70,3132;  -4,97814e-003;  2,31522e-002;  -0,055067;  -90,0863;  9,38137e-002;  0,214855;  34;  0;  0;  0;  0;  0;  0,73;   6;  0,140422;   34;  0,16982;   33;  0,214857;   34;  1;  0,11523;  -1,30757e-003;  -0,115223;  0,11523;  0,847;  0;  Row: 1;  0,68237;  3,13065e-002;  3,05851e-002;  ;  ;  ;  ;  ;  ;  
Maschine;  -19;  Connector;   19;  0x00000000000;  -2;  user;  Rechner;  Maschine;  Pins_Connector;  -1;  -1;  -1;  -1;  2311;  568;  \\Server\Share\Share\L306\08506200021611092222222922_161109121129_Maschine_Group,jpg;  Connector_Steckerpins;  ;  ;  ;  ;  6,60796;  -2,26107e-002;  -70,3132;  -4,97814e-003;  2,31522e-002;  -0,055067;  -90,0863;  9,38137e-002;  0,214855;  34;  0;  0;  0;  0;  0;  0,73;   6;  0,140422;   34;  0,16982;   33;  0,214857;   34;  1;  8,97888e-002;  2,22114e-002;  -8,69968e-002;  8,97874e-002;  0,863;  0;  Row: 1;  0,68845;  3,13065e-002;  3,05851e-002;  ;  ;  ;  ;  ;  ;  

Ausgabe meiner Batch
Es sind hier halt 2 Dateien, als Beispiel
18; -1,30757e-003; -0,115223;
18; -1,30757e-003; -0,115223;

Soweit ist auch alles gut.

Allerdings möchte ich, daß die Ausgabe so aussieht:

18; -1,30757e-003; -0,115223;18; -1,30757e-003; -0,115223;

Also alles in einer Zeile.
Aber ich weiß nicht wie ich das realisieren könnte.

Gibt es da irgendeinen Trick?!

Danke schon mal

Content-ID: 320678

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

Ausgedruckt am: 17.11.2024 um 19:11 Uhr

rubberman
Lösung rubberman 11.11.2016 um 17:54:17 Uhr
Goto Top
Hallo sugram.

Ich gehe davon aus, dass du die Ausgabe per ECHO vornimmst (den Code hast du leider nicht gepostet). Das erzeugt immer auch einen Zeilenumbruch. Mit SET /P kannst du das vermeiden.
<nul set /p "=string1"  
<nul set /p "=string2"  
... verkettet beide Strings in einer Zeile. Je nachdem wo der Zeilenumbruch erfolgen soll, gibst du entweder den letzten String wieder per ECHO aus, oder setzt den Zeilenumbruch separat mit einem
echo(

Grüße
rubberman
sugram
sugram 14.11.2016 aktualisiert um 07:22:55 Uhr
Goto Top
Erstmal Danke für den Hinweis.

Werde ich heute dann testen.

Muss dazu erst mal den Code umbauen, da ich aktuell dazu kein Echo verwende.


Der Code von der Batch ist wie folgt:
Ich verwende hierzu die "Unix-Tools" für DOS.
Mir ist bewußt, daß es auch ohne geht, aber mit den Befehlen bin ich halt besser vertraut face-wink
set "RES-Quelle=c:\users\username\desktop\"  
set "Pin=18"   

for /f "tokens=1 delims=" %%a in ('dir /b %RES-Quelle%*.res') do call :ProcessDir %%a  
goto :eof

:ProcessDir 
cat %RES-Quelle%%1 | grep "Connector;   %PIN%;" | gawk "{print $4,$48,$49}  
goto :eof

[Edit]
Oh man face-wink

Also die Einzelne Zeile hab ich nun auch per findstr herausbekommen, fehlt "nur" noch das ich mein gesuchten String herausbekomme.
Es wird face-smile

for /f "tokens=1 delims=" %%i in ('findstr /c:"Connector;   18;" "08506200021611092222222922.txt"') do (echo %%i)  

Hmm, kann mir einer verraten, weswegen das hier nicht geht?
for /f "tokens=49 delims=;" %%i in ('findstr /c:"Connector;   18;" "08506200021611092222222922.txt"') do (echo %%i)  

Seltsamerweise kann ich den tokens bis 31 wunderbar benutzen, ab den Wert 32 bekomme ich nur noch eine leere Ausgabe?!
rubberman
Lösung rubberman 14.11.2016 aktualisiert um 21:29:45 Uhr
Goto Top
Hallo sugram.

Seltsamerweise kann ich den tokens bis 31 wunderbar benutzen, ab den Wert 32 bekomme ich nur noch eine leere Ausgabe?!
Ja, da gibt es ein Limit. Allerdings bin ich noch nie in die Verlegenheit gekommen darüber zu stolpern. Wie auch immer. In dem Fall kannst du den Rest nach dem 30. Token per * als String in einer weiteren Schleife verarbeiten. Also etwa so:
@echo off &setlocal
for /f "tokens=30* delims=;" %%i in (  
  "1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;"  
) do for /f "tokens=19 delims=;" %%k in ("%%j") do (echo %%j&echo %%k)  
pause
Statt der Zahlenkolonne hast du natürlich deinen FINDSTR Aufruf im Code.
%%j lasse ich nur mit ausgeben, damit du siehst wie's funktioniert ...

Grüße
rubberman
sugram
sugram 16.11.2016 um 05:56:38 Uhr
Goto Top
DAS war der Hinweis schlechthin face-smile

Vielen Dank

Hier nun der gesamte String:

@echo off & setlocal 


set "RES-Quelle=c:\users\benutzer\desktop\"  
set "Pin=18"   


for /f "tokens=1 delims=" %%a in ('dir /b %RES-Quelle%*.res') do call :ProcessDir %%a  
goto :eof


:ProcessDir 
for /f "tokens=4 delims=;" %%i in ('findstr /c:"Connector;   18;" "%RES-Quelle%%1"') do (<nul set /p "=%%i; ")  
for /f "tokens=30* delims=;" %%i in ('findstr /c:"Connector;   18;" "%RES-Quelle%%1"') do for /f "tokens=18,19 delims=;" %%k in ("%%j") do (<nul set /p ="%%k ;%%l; ")   
goto :eof

ergibt mir nun als Ausgabe
18; -1,30757e-003 ;  -0,115223; 18; -1,30757e-003 ;  -0,115223;