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-Key: 243279

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

Printed on: April 20, 2024 at 03:04 o'clock

Member: rubberman
rubberman Jul 10, 2014, updated at Jul 11, 2014 at 09:52:42 (UTC)
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
Member: sugram
sugram Jul 11, 2014 at 12:11:20 (UTC)
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
Member: rubberman
Solution rubberman Jul 11, 2014 updated at 16:25:09 (UTC)
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
Member: sugram
sugram Jul 11, 2014 at 15:25:00 (UTC)
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!!