sugram
Goto Top

Mehrere Werte aus FOR Schleife in eine Variable

Hallo


Also ich komm einfach nicht weiter.
Folgendes Problem.

Meine aktueller String lautet so:

 
for /f "Tokens=1-15" %%a in ('"type 1.svg | findstr rotate(0.0)"') do (echo %%h %%i")  


Das Funktioniert auch.
Nur ist es eben möglich das in der Datei es mehrere Einträge mit dem rotate geben kann. Das ist leider immer unterschiedlich.
Ist es da irgendwie möglich alle gefundenen Werte in eine Variable zu schreiben?


Vielen Dank

Content-ID: 243279

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

Ausgedruckt am: 17.11.2024 um 19:11 Uhr

rubberman
rubberman 10.07.2014, aktualisiert am 11.07.2014 um 11:52:42 Uhr
Goto Top
Hallo sugram.

Also so etwas wie ein Array wird in Batch nicht unterstützt.
- du kannst die gefundenen Werte in eine temporäre Datei schreiben, aus der du sie bei Bedarf wieder ausliest
- du kannst ein "assoziatives Array" erstellen, das aus mehreren Einzelvariablen besteht (zB: %var_0%, %var_1% etc.)
- du kannst weitere Werte an einen Variablenwert anhängen, getrennt durch ein definiertes Zeichen (zB: Wert1;Wert2;Wert3 ...)
- du kannst gleich mit den FOR Variablen %%h und %%i im Klammerausdruck nach dem DO arbeiten
- du kannst für jeden gefundenen Wert eine Subroutine aufrufen, in der du diesen verarbeitest

Die beiden Letzteren solltest du bevorzugen. Aber ohne Kenntnis deines Vorhabens oder deines Codes kann ich dir nicht zu irgend etwas raten.

Grüße
rubberman

EDIT: ersten und letzten Punkt hinzugefügt
sugram
sugram 11.07.2014 um 14:11:20 Uhr
Goto Top
Aber ohne Kenntnis deines Vorhabens oder deines Codes kann ich dir nicht zu irgend
etwas raten.



Hallo

Vielen Dank erstmal.

Ziel des ganzen ist es aus einer Datei Werte zu holen, die Koordinaten enthalten. Die Strings in der Datei selbst sehen so aus:
"<polyline points="5,0 -1,-3 0,0 -1,3" fill="#FF0000" stroke="#FF0000" transform="translate(1271.0 993.0) rotate(0.0)"/>"   
"<polyline points="5,0 -1,-3 0,0 -1,3" fill="#FF0000" stroke="#FF0000" transform="translate(942.9 876.6) rotate(0.0)"/>"  

Ich benötige dann die Werte 1271.0 als X und 993.0 als Y. Die ich dann weiterverarbeiten möchte.

Gruß
sugram
rubberman
Lösung rubberman 11.07.2014 aktualisiert um 18:25:09 Uhr
Goto Top
Hallo sugram.

Ich benötige dann die Werte 1271.0 als X und 993.0 als Y. Die ich dann weiterverarbeiten möchte.
Soweit war mir das ziemlich klar. Die Frage war wie verarbeitest du die Werte weiter.

Beispiel:
@echo off &setlocal
for /f "tokens=2 delims=()" %%i in ('type "1.svg" ^| findstr /c:"rotate(0.0)"') do (  
  for /f "tokens=1,2" %%j in ("%%i") do (  
    set "X=%%j"  
    set "Y=%%k"  
    call :procCoordinates
  )
)
pause
goto :eof

:procCoordinates
echo Arbeite hier mit %X% und %Y% ...
goto :eof
Grüße
rubberman
sugram
sugram 11.07.2014 um 17:25:00 Uhr
Goto Top
Hallo rubberman

Vielen Dank für deine Antwort.
Dann habe ich dich etwas falsch verstanden face-smile

Die Werte sollen dann hier:
<circle  cx="508.1" cy="783.6" r="41.7" stroke-width="7" stroke="#FF0000" fill="none"/>  

Als x & y Werte eingetragen werden.

Dein Beispiel funktioniert einwandfrei, vielen Dank!!