130834
Goto Top

Grosses Variablen Problem ( Batch)

Hey Leute.

Ich bin auf ein doofes problem gestossen als ich durch variablen loopen wollte, da ich mir die 20x schreibweise des gleichen codes und nicht variabel nicht antun wollte.
ich kann keine Wörter welche in einer Variable gespeichert sind als Variable benutzen, d.h. keine Variable zusammenstellen und diese Zusammenstellung als variable benutzen.

Beispiel code
set VariableX1=bla
set VariableX3=blub
set VariableX3=ble

set /a max=3
set /a "count=1"  

:subloop

set line=variableX%count%

set worker=%%line%%

:: error ^

if "%worker%"=="line" ( echo hat nicht funktioniniert )  

echo %worker%

set /a "count=%count+1"  
if %count% EQU %max% goto :EOF

goto subloop

Danke im vorraus,

- clragon

Content-Key: 319157

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

Printed on: June 23, 2024 at 08:06 o'clock

Mitglied: 131301
131301 Oct 26, 2016 updated at 11:13:01 (UTC)
Goto Top
DelayedExpansion oder call set sind deine Freunde face-wink

setlocal ENABLEDELAYEDEXPANSION
set line=variableX%count%
echo !line!
Gruß
Mitglied: 130834
130834 Oct 26, 2016 updated at 11:09:39 (UTC)
Goto Top
Danke, bringt mir aber nichts. Dies würde zwar VariableX1 ausgeben aber nicht ihren Inhalt.

Das echo der !worker! variable ist dann einfach "VariableX1"

Ich möchte aber den Inhalt der VariableX1 benutzen also müsste das Echo "bla" ausgeben
Mitglied: 131301
Solution 131301 Oct 26, 2016 updated at 11:12:22 (UTC)
Goto Top
Nein, das löst sehr wohl zum Inhalt auf! Deswegen heißt es ja delayed expansion (verzögerte erweiterung!)

Siehst du hier

Beispiel:
@echo off & setlocal ENABLEDELAYEDEXPANSION
set var1=BlaBlaBla
set count=1
echo !var%count%!
Member: rubberman
Solution rubberman Oct 26, 2016 at 11:10:49 (UTC)
Goto Top
Hallo clragon.

call echo %%VariableX%count%%%
oder
setlocal EnableDelayedExpansion
echo !VariableX%count%!
endlocal
Den ganzen anderen Hilfsvariablenkram brauchst du nicht.

Grüße
rubberman
Mitglied: 130834
130834 Oct 26, 2016 at 11:20:44 (UTC)
Goto Top
oh, okey. Tut mir leid mein Fehler, Ich habe zuvor im Mainscript wohl etwas geändert und die variablen nicht angepasst, funktioniert Wunderbar!
Danke.
Mitglied: 130834
130834 Oct 26, 2016 at 11:23:02 (UTC)
Goto Top
Aus Irgendeinem Grund hat bei mir nur die 2te Lösung funktioniert, aber das ist egal, das script ist grösser und hat enabledelayedexpansions immer standardmässig drin.
Danke auch dir für die Antwort
Member: rubberman
rubberman Oct 26, 2016 at 11:49:43 (UTC)
Goto Top
enabledelayedexpansions immer standardmässig drin
Wundere dich nicht über Clashes bei Stringliteralen mit Ausrufezeichen. Faustregel: Zuweisung einer Variablen mit ausgeschalteter verzögerter Erweiterung, Verarbeitung der Variablen mit eingeschalteter verzögerter Erweiterung. Nur bei Variablen mit numerischem Inhalt spielt das keine Rolle ...

Batch ist krank face-wink Versuch's mit einer anderen Sprache.

Grüße
rubberman
Member: Endoro
Endoro Oct 26, 2016 at 11:53:18 (UTC)
Goto Top
Hey,
Beispiel:
@echo off & setlocal
set "line=variableX1%"  
for /f "tokens=1*delims==" %%a in ('set "%line%"') do set /a %%~b=2  
echo %variableX1%

Gruß, Endoro
Mitglied: 130834
130834 Oct 26, 2016 updated at 12:01:51 (UTC)
Goto Top
Batch ist krank Versuch's mit einer anderen Sprache.

Ich merks, leider. Edit: Egal! CHALLANGE!!11!!!111!!1

In was programmierst du denn so? hab ein bisschen C# schon angelernt, müsste nur endlich das Buch fertig lesen und dann könnte ich damit vieleicht auch mal beginnen.
Member: rubberman
rubberman Oct 26, 2016 at 12:02:15 (UTC)
Goto Top
Hallo Endoro,

ich weiß ja schon wo die Reise hingeht (Dave's colorPrint).
@echo off
mode con cols=90 lines=40
setlocal DisableDelayedExpansion EnableExtensions
title Color Map Engine Test 0.1

:: ±±±±±±±±±±±±±±ÛÛÛÛÛÛÛÛÛÛÛ

:: set mapline=mapline

set mapline1=ggggggggggggggggggggggbbbbbbbbbbbbbbbgggggggggggggggggggggggggggggggggggggggggggg
set mapline2=gggggggggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbgggggggggggggggggggggggggggggggggggg
set mapline3=gggggggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbgggggggggggggggggggggggggggggggggg
set mapline4=gggggggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbgggggggggggggggggggggggggggggggggg
set mapline5=ggggggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbgggggggggggggggggggggggggggggggggg
set mapline6=gggggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbggggggggggggggggggggggggggggggggg
set mapline7=gggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbgggggggggggggggggggggggggggggg

call :initColorPrint


setlocal EnableDelayedExpansion
for /l %%i in (1 1 7) do (
  set "line=!mapline%%i!"  
  set "n=0"  
  call :loop
  echo(
)

call :cleanupColorPrint
pause
exit /b


:loop 
if "!line:~%n%,1!"=="" (exit /b) else (  
  if "!line:~%n%,1!"=="g" (  
    call :c 0a ±
  ) else if "!line:~%n%,1!"=="b" (  
    call :c 1a Û
  )
  set /a "n+=1"  
  goto loop
)

%= color engine =%

:: use with: call :c 0a "Text here" /n 
:: /n does a new line in the text

:c
:colorPrint  Color  Str  [/n]
if not defined DEL call :initColorPrint
setlocal disableDelayedExpansion
set "s=%~2"  
call :colorPrintVar %1 s %3
exit /b


:colorPrintVar  Color  StrVar  [/n]
if not defined DEL call :initColorPrint
setlocal enableDelayedExpansion
pushd .
':  
cd \
set "s=!%~2!"  
:: The single blank line within the following IN() clause is critical - DO NOT REMOVE
for %%n in (^"^  

^") do (  
  set "s=!s:\=%%~n\%%~n!"  
  set "s=!s:/=%%~n/%%~n!"  
  set "s=!s::=%%~n:%%~n!"  
)
set "s=!s:"=\"!"  
for /f delims^=^ eol^= %%s in ("!s!") do (  
  if "!" equ "" setlocal disableDelayedExpansion  
  if %%s==\ (
    findstr /a:%~1 "." "\'" nul  
    <nul set /p "=%DEL%%DEL%%DEL%"  
  ) else if %%s==/ (
    findstr /a:%~1 "." "/.\'" nul  
    <nul set /p "=%DEL%%DEL%%DEL%%DEL%%DEL%"  
  ) else (
    findstr /a:%~1 "." "%%s\..\'" nul  
    <nul set /p "=%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%"  
  )
)
if /i "%~3"=="/n" echo(  
popd
exit /b


:initColorPrint
for /f %%A in ('"prompt $H&for %%B in (1) do rem"') do set "DEL=%%A %%A"  
<nul >"%temp%\'" set /p "=."  
subst ': "%temp%" >nul  
exit /b


:cleanupColorPrint
2>nul del "%temp%\'"  
>nul subst ': /d  
exit /b
Die Zeichen werden allerdings falsch dargestellt. Hab noch nicht ergründet warum ...

Grüße
rubberman (aka aGerman)
Member: rubberman
rubberman Oct 26, 2016 at 12:06:08 (UTC)
Goto Top
Da mir Spiele, bunt und Grafik völlig egal sind (ich brauch nur die Funktionalität mit vernünftigem Zugriff auf die WinAPI und gute Performance), ist es C und ein bisschen C++.

Grüße
rubberman
Member: Endoro
Endoro Oct 26, 2016 updated at 12:16:19 (UTC)
Goto Top
Hallo @rubberman,
kann ich grad nicht testen auf dem iPhone. Batch ist natürlich nicht krank, sondern eine der letzten Herausforderungen in unserer langweiligen Zeit, in der Programmiersprachen (fast) immer das tun, was man erwartet face-smile

Gruß, Endoro
Mitglied: 130834
130834 Oct 26, 2016 updated at 12:20:13 (UTC)
Goto Top
Nicht schlecht. Ehrlich. nur leider ist es immer noch zu langsam, um damit eine wirkliche Map darzustellen, da diese sich im bereich von etwa ~1 oder weniger neu schrieben müsste um ein gescheites movement darzustellen, um noch genauer zu sein, mit der aktuellen engine, im bereich von 56 code loops mit etwa 6 zeilen unkompliziertem file überprüfungs- code. Jedoch schon ein guter Ansatz, auch wenn die Zeichen weshalb auch immer, abgemurkts sind, mann Könnte dann noch einfach die max lines variable einbauen, und verschiedene Maps aus TXT's auslesen. Allerdings könnte es auch sein das man mit Graphics.exe den "Spieler" auf der X/Y achse bewegen kann und das Zeichen mittendrin überschreiben kann ohne alles neuzuschreiben, also ohne die Map neu zeichnen zu müssen, ich habs mir noch nicht angeschaut. Meine idee den code noch mehr zu optimieren wäre ein counter welche die g und b's stack, so das gleich ein ganzer stapel auf einmal geschrieben werden kann, was dann halt bei komplexeren map-teilen länger dauern würde aber einfachere Teile sehr viel einfacher und schneller darstellen könnte.
Mein aktueller Code: http://pastebin.com/jn0dJ9Nk
Member: rubberman
rubberman Oct 26, 2016 at 12:32:18 (UTC)
Goto Top
@Endoro
eine der letzten Herausforderungen
Joa, unter Missbrauch von Commands für Dinge für die sie nie gedacht waren und Ausnutzung jedwedem undefinierten Verhaltens. So lange das nur Spielerei ist, ist es OK ...

@130834
nur leider ist es immer noch zu langsam
Wird auch nicht schneller.
Funktionsweise kurz erklärt:
@echo off &setlocal

::: 1 Grundprinzip :::

:: Datei "x" anlegen, mit einer einzigen Zeile (y in diesem Fall), 
:: aber ohne abschließenden Zeilenumbruch, damit ein Backspacing möglich ist.
<nul >"x" set /p "=y"  

:: FINDSTR sucht nach y in Datei "x" und dem virtuellen Gerät NUL. 
:: Da y nur in "x" gefunden werden kann, wird diese Datei in der mit Option /a 
:: angegebenen Farbe markiert. Außerdem wird der gefundene String aus der Datei ausgegeben.
findstr /a:0c "y" "x" nul  

:: Da kein Zeilenumbruch geschrieben wurde, wird er per ECHO erzeugt.
echo(


::: 2 Subfolder Parsing :::

:: Der gesamte Pfad wird angezeigt, incl. dem nicht existierenden Unterverzeichnis "text". 
:: Das Konstrukt funktioniert, da der Parser erkennt, dass durch .. wieder in das ursprüngliche
:: Verzeichnis zurück gewechselt wird und ignoriert das Subfolder im Pfad. Letzteres sorgt auch
:: dafür, dass die meisten im Dateisystem "verbotenen" Zeichen verwendet werden können. 
findstr /a:0c "y" "text mit <>|:*?\..\x" nul  

echo(


::: 3 Backspacing im Dateiinhalt :::

:: Diese Schleife extrahiert die Zeichenkombination Backspace-Space-Backspace aus dem eingestellten
:: Kommandozeilenprompt und weist sie der Variablen DEL zu.
for /f "delims=#" %%a in ('"prompt #$H# &for %%b in (1) do rem"') do set "DEL=%%a"  

:: Datei "x" wird überschrieben. Diesmal neben dem y, auch mit dem nötigen Backspacing als Inhalt. 
<nul >"x" set /p "=%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%y%DEL%"  

:: FINDSTR arbeitet genau wie vorher, nur dass die Ausgabe des Dateiinhaltes nun dafür sorgt,
:: dass alle ungewollten Zeichen von rechts nach links mit Leerzeichen überschrieben werden.
findstr /a:0c "y" "text mit <>|:*?\..\x" nul  

:: Da kein Zeilenumbruch erfolgt, kann in derselben Zeile weiter geschrieben werden.
findstr /a:09 "y" " mehr text\..\x" nul  
echo(


::: 4 Zeichen \ und /  :::

:: Beide Zeichen werden als Trennzeichen im Pfad behandelt und müssen auch so verwendet werden.
:: Mit entsprechendem Backspacing ist es möglich, dass jeweils nur der Backslash oder Slash
:: in der Ausgabe stehen bleiben.
findstr /a:0c "y" "a%DEL%\..\%DEL%%DEL%%DEL%\..\x" nul  
findstr /a:09 "y" "a%DEL%/..\%DEL%%DEL%%DEL%\..\x" nul  
echo(


::: 5 Anführungszeichen :::

:: Anführungszeichen werden mit einem Backslash maskiert.
findstr /a:0c "y" "\"\..\x" nul  
echo(


::: 6 Strings "." und ".." ::: 

:: Diese Strings werden als "derzeitiges Verzeichnis" bzw. "übergeordnetes Verzeichnis" 
:: interpretiert, wenn sie für sich allein stehen. Das lässt dich durch das Voranstellen
:: und Backspacing eines weitern Zeichens verhindern.
findstr /a:0c "y" "a%DEL%.\..\x" nul  
findstr /a:09 "y" "a%DEL%..\..\x" nul  
echo(

pause
FINDSTR ist keine Built-In Funktion der cmd.exe, sondern ein externes Tool (findstr.exe). Bei jedem Aufruf der Funktion muss also dieser externe Prozess geladen werden. Das dauert nun mal Äonen bei Hunderten von Aufrufen.
Es gibt allerdings etwa elfundneunzigeinhalb 3rd Party Tools für diesen Zweck im Net, weil jeder Zweite der eine Programmiersprache auf Windows lernt, sich irgendwann mal so ein Progrämmchen zusammengeschraubt hat.

Grüße
rubberman
Mitglied: 130834
130834 Oct 26, 2016 at 12:39:28 (UTC)
Goto Top
optimieren wäre ein counter welche die g und b's stackt, so das gleich ein ganzer stapel auf einmal geschrieben werden kann

das würde weniger aufrufe erzeugen.

Und eventuell könnte man die color engine noch mehr spezifizieren das es schneller läuft...
Member: rubberman
rubberman Oct 26, 2016 at 13:01:07 (UTC)
Goto Top
das würde weniger aufrufe erzeugen.
Klar. Prüfe doch einfach in deiner Schleife, ob ein anderes Zeichen auftaucht.

Und eventuell könnte man die color engine noch mehr spezifizieren das es schneller läuft...
Nö. Wie oben schon geschrieben, ist es der Aufruf von findstr.exe, der dich ausbremst. Brauchst du aber, denn dessen Option /a malt deine Farben. Zum Verständnis hatte ich dir noch die paar Zeilen gepostet. Kannst dich gerne selbst daran versuchen. Wenn du meinst, dass der eine oder andere Spezialfall (\/". im String) nicht vorkommt, brauchst du ihn auch nicht zu behandeln.

Grüße
rubberman
Mitglied: 130834
130834 Oct 26, 2016 at 13:49:15 (UTC)
Goto Top
Da mein Videospiel sowieso Zusatztools benutzen muss/wird, habe ich mir mal gedacht wie es denn damit Aussehen würde.
Nicht unbedingt zu schnell. aber wenn ich die map nicht bei jedem Movement neuschreiben muss, sondern den Cursor aka den player Farbpunkt bewegen kann, dann hab ich soeben die Ladezeit erheblich verkürzt.

@echo off
mode con cols=90 lines=40
setlocal enabledelayedexpansion enableextensions
setlocal ENABLEDELAYEDEXPANSION
title Color Map Engine Test 1.0

:: strpied char: ± full char: Û


set mapline1=ggggggggggggggggggggggbbbbbbbbbbbbbbbggggggggggggggggggggggggggggggggggggggggggggggggggggg
set mapline2=gggggggggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbggggggggggggggggggggggggggggggggggggggggggggg
set mapline3=gggggggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbggggggggggggggggggggggggggggggggggggggggggg
set mapline4=gggggggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbggggggggggggggggggggggggggggggggggggggggggg
set mapline5=ggggggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbggggggggggggggggggggggggggggggggggggggggggg
set mapline6=gggggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbgggggggggggggggggggggggggggggggggggggggggg
set mapline7=gggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbggggggggggggggggggggggggggggggggggggggg

set /a lines=7


for /l %%i in (1 1 %lines%) do (
  set "line=!mapline%%i!"  
  set "n=0"  
  call :loop

)

ctext.exe "{07}"  
echo printed map
pause >nul
exit


:loop 
if "!line:~%n%,1!"=="" (exit /b) else (  
  if "!line:~%n%,1!"=="g" (  
    ctext.exe "{0A}"  
    <nul set /p ="Û"  
    ctext.exe "{0A}"  
  ) else if "!line:~%n%,1!"=="b" (   
    ctext.exe "{01}"  
    <nul set /p ="Û"  
    ctext.exe "{01}"  
  )
  set /a "n+=1"  
  goto loop
)

ctext.exe <
Member: rubberman
rubberman Oct 26, 2016 at 14:16:04 (UTC)
Goto Top
Damit hast du aber noch keinen Fortschritt gemacht. Du rufst nach wie vor für jedes Zeichen einen neuen Prozess auf. Ich kenne das Tool, damit kannst du auch sinnvoller arbeiten.
ctext.exe "{1a}a b c {3a}d e f{\n}{1a}g h i {3a}j k l{07}{\n}"

Grüße
rubberman
Mitglied: 130834
130834 Oct 26, 2016 updated at 15:03:03 (UTC)
Goto Top
Edit: Hups, ins englische verfallen.

Ich hab versucht eine Stack funktion einzuführen. Leider ist der output momentant durch ein Fehler einfach gar nichts.

Hab für debugzwecke die ganze map deaktiviert und nur ein paar einzelne zeichen ausgeben lassen.
Könntest du es dir mal anschauen?

PS: der letzte charakter wird nicht genommen, warum auch immer.

::@echo off
::mode con cols=90 lines=40
setlocal enabledelayedexpansion enableextensions
setlocal ENABLEDELAYEDEXPANSION
title Color Map Engine Test 1.0

:: striped char: ± full char: Û

:: store the things below in a external TXT to load and manage different Maps ( until the ^^ barrier )

:: set mapline1=ggggggggggggggggggggggbbbbbbbbbbbbbbbggggggggggggggggggggggggggggggggggggggggggggggggggggg
:: set mapline2=gggggggggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbggggggggggggggggggggggggggggggggggggggggggggg
:: set mapline3=gggggggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbggggggggggggggggggggggggggggggggggggggggggg
:: set mapline4=gggggggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbggggggggggggggggggggggggggggggggggggggggggg
:: set mapline5=ggggggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbggggggggggggggggggggggggggggggggggggggggggg
:: set mapline6=gggggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbgggggggggggggggggggggggggggggggggggggggggg
:: set mapline7=gggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbggggggggggggggggggggggggggggggggggggggg

set mapline1=gbggbbbggbggbbbg

set /a lines=1

:: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


for /l %%i in (1 1 %lines%) do (
set "line=!mapline%%i!"  
set "n=0"  
set "stack=0"  
set "char="  
call :loop
)

ctext.exe "{\n}{07}printed map"  
pause >nul
exit




:loop 
if "!line:~%n%,1!"=="" (exit /b)   
if not defined "!char!" ( set "char=!line:~%n%,1!" ) else ( if "!char!"=="" ( set "char=!line:~%n%,1!" ) )  
if "!char!"=="!line:~%n%,1!" (   
set /a stack=!stack!+1
set /a "n+=1"  
goto loop

) else (

if "!char!"=="g" ( set "color=0A" )  
if "!char!"=="b" ( set "color=01" )  

for /l %%p in (1 1 !stack!) do (
ctext.exe "{!color!}"  
<nul set /p ="Û"  
)

set "stack=1"  
set /a "n+=1"  
goto loop
)
)

echo Error: unreachable point reached
pause >nul
exit

:trash 

  if "!line:~%n%,1!"=="g" (  
    ctext.exe "{0A}"  
    <nul set /p ="Û"  
    ctext.exe "{0A}"  
  ) else if "!line:~%n%,1!"=="b" (   
    ctext.exe "{01}"  
    <nul set /p ="Û"  
    ctext.exe "{01}"  
  )
  set /a "n+=1"  
  goto loop
)

pause >nul
exit
Member: rubberman
rubberman Oct 26, 2016 at 15:44:37 (UTC)
Goto Top
Du versuchst ja immer noch jedes Zeichen einzeln zu "kolorieren".
Bastel dir doch einfach das Argument für den ctext Aufruf zusammen und rufe das ding nur einmal pro Zeile auf
@echo off
mode con cols=90 lines=40
setlocal enabledelayedexpansion enableextensions
setlocal ENABLEDELAYEDEXPANSION
title Color Map Engine Test 1.0

:: striped char: ± full char: Û

:: store the things below in a external TXT to load and manage different Maps ( until the ^^ barrier )

:: set mapline1=ggggggggggggggggggggggbbbbbbbbbbbbbbbggggggggggggggggggggggggggggggggggggggggggggggggggggg
:: set mapline2=gggggggggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbggggggggggggggggggggggggggggggggggggggggggggg
:: set mapline3=gggggggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbggggggggggggggggggggggggggggggggggggggggggg
:: set mapline4=gggggggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbggggggggggggggggggggggggggggggggggggggggggg
:: set mapline5=ggggggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbggggggggggggggggggggggggggggggggggggggggggg
:: set mapline6=gggggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbgggggggggggggggggggggggggggggggggggggggggg
:: set mapline7=gggggggggggbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbggggggggggggggggggggggggggggggggggggggg

set mapline1=gbggbbbggbggbbbg

set /a lines=1

:: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


for /l %%i in (1 1 %lines%) do (
  set "line=!mapline%%i!"  
  set "n=0"  
  set "char="  
  set "arg="  
  call :loop
  ctext.exe "!arg!"  
)

ctext.exe "{\n}{07}printed map"  
pause >nul
exit /b

:loop
set "newchar=!line:~%n%,1!"  
if "%newchar%"=="" (set "arg=!arg!{\n}"&exit /b)  
if "%newchar%"=="g" (  
  if "%newchar%" neq "%char%" set "arg=!arg!{0a}"  
  set "arg=!arg!±"  
) else if "%newchar%"=="b" (  
  if "%newchar%" neq "%char%" set "arg=!arg!{01}"  
  set "arg=!arg!Û"  
)
set /a "n+=1"  
set "char=%newchar%"  
goto loop
Mitglied: 130834
130834 Oct 26, 2016 updated at 15:54:33 (UTC)
Goto Top
Ist cool, funkt aber nicht, da ctext.exe den Charakter nicht richtig anzeigt, weshalb man dieses mit echo oder auf Umwegen ausgeben muss...
Sowie brauche ich \n niemals, da ich die ganze Map auf einmal printen muss, da es sonst diese komischen Abstände zwischen den einzelnen Achsen gibt. Aber intressant wie unheimlich schnell das printen der ganzen Zeile auf einmal geht... O.o
Member: rubberman
Solution rubberman Oct 26, 2016 at 16:27:07 (UTC)
Goto Top
da ctext.exe den Charakter nicht richtig anzeigt
Jaja, so sind die "Kommandozeilentoolentwickler". Schaffen es nicht ihre Programme vernünftig zu schreiben face-sad
for /l %%i in (1 1 %lines%) do (
  >nul chcp 1252
  set "line=!mapline%%i!"  
  set "n=0"  
  set "char="  
  set "arg="  
  call :loop
  >nul chcp 850
  ctext.exe "!arg!"  
)

Sowie brauche ich \n niemals
Dann schmeiß es raus face-wink
Mitglied: 130834
130834 Oct 26, 2016 at 16:36:21 (UTC)
Goto Top
Dann schmeiß es raus
Hab ich schon.

Wow es funkt, auch wenn ich keine Ahnung habe wie du das hingekriegt hast und es mich echt intressieren würde aber,

Danke man!!! Du hast mir soeben erfolgreich geholfen einen schnellen und effizienten echten Batch Map drawer mit Farben zu erstellen.
Wer hätte gedacht das es so etwas jemals geben wird abgesehen von mir!

Ähm, Jetzt muss ich es nur noch hinkriegen, das es die Maps aus TXTs ausliest, das wird einfach, und dann ein Videospiel programmieren. Wenn ich irgendwie hinkomm damit, werde ich es dir auf jedenfall senden! face-wink

Nochmals Danke
Member: rubberman
rubberman Oct 26, 2016 updated at 18:06:49 (UTC)
Goto Top
und es mich echt intressieren würde
Darüber könnte man Bücher schreiben ^^
www.c-plusplus.net/forum/161855-full
Kurz: Da der Entwickler des Tools (der auch noch Microsoft MVP ist) nicht ändern kann, wie Windows mit Zeichen umgeht, hätte er es berücksichtigen müssen. Weil er es nicht getan hat, hab ich es gemacht, indem ich mit der Änderung der Codepage (CHCP) die Interpretation der ASCII Werte der Zeichen verändert habe.
Mitglied: 130834
130834 Oct 27, 2016 at 17:01:37 (UTC)
Goto Top
Ich hab noch etwas weiter programmiert und bin dazu gekommen:

@echo off
mode con cols=90 lines=40
setlocal enabledelayedexpansion enableextensions
setlocal ENABLEDELAYEDEXPANSION
title Color Map Engine Test 1.0

:: striped char: ± full char: Û

:: store the things below in a external TXT to load and manage different Maps ( until the ^^ barrier )

 set mapback1=xxxxxxxxxxxxxxxxfffff999999999999999fffffffffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapback2=xxxxxxxxxxxxxxfff999999999999999999999999999ffffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapback3=xxxxxxxxxxxxfff99999999999999999999999999999999fffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

 set mapline1=aaaaaaaaaaaaaaaaaaaaa111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapline2=aaaaaaaaaaaaaaaaa111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapline3=aaaaaaaaaaaaaaa11111111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

set /a lines=3

:: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


for /l %%i in (1 1 %lines%) do (
  >nul chcp 1252
  set "line=!mapline%%i!"  
  set "bind=!mapback%%i!"  
  set "n=0"  
  set "char="  
  set "back="  
  set "arg="  
  call :loop
  >nul chcp 850
  ctext.exe "!arg!"  
)

ctext.exe "{\n}{07}[DEBUG] printed map"  
pause >nul
exit

:loop
set "newchar=!line:~%n%,1!"  
set "newback=!bind:~%n%,1!"  

if "%newchar%"=="" (exit /b)  
if "%newback%"=="" (exit /b)  

 if "%newback%" neq "%back%" (  
  set "arg=!arg!{%newback:x=0%"  
  set "arg=!arg!%newchar%}"  
  )

 if "%newchar%" neq "%char%" (  
  set "arg=!arg!{%newback:x=0%"  
  set "arg=!arg!%newchar%}"  
  )

  if "%newback%" EQU "x" ( set "arg=!arg!Û" ) else ( set "arg=!arg!±" )  

set /a "n+=1"  
set "char=%newchar%"  
set "back=%newback%"  
goto loop

Es ist zwar jetzt wieder langsamer aber es Unterstützt jetzt einen Hintergrund sowie striped special characters.
Wenn du ne Idee hättest es nochmal zu Optimieren, wäre mir es eine Freude diese genauer anzuschauen.
Member: rubberman
rubberman Oct 27, 2016 at 17:57:06 (UTC)
Goto Top
Es ist zwar jetzt wieder langsamer
Dann schmeiße diese GOTO Loops raus und arbeite mit FOR /L. Die Zeilenlänge ist ja eh konstant. Und bis zu einer Länge von x (8191 Zeichen für die gesamte Kommandozeile) kannst du das Argument auch komplett für alle Zeilen zusammen basteln, bevor du ctext aufrufst.
@echo off
mode con cols=90 lines=40
setlocal enabledelayedexpansion enableextensions
title Color Map Engine Test 1.0

:: striped char: ± full char: Û

:: store the things below in a external TXT to load and manage different Maps ( until the ^^ barrier )

 set mapback1=xxxxxxxxxxxxxxxxfffff999999999999999fffffffffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapback2=xxxxxxxxxxxxxxfff999999999999999999999999999ffffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapback3=xxxxxxxxxxxxfff99999999999999999999999999999999fffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

 set mapline1=aaaaaaaaaaaaaaaaaaaaa111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapline2=aaaaaaaaaaaaaaaaa111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapline3=aaaaaaaaaaaaaaa11111111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

set /a lines=3

:: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

>nul chcp 1252
for /f "tokens=1,3 delims=:" %%i in ('mode con^|findstr /bc:" "^|findstr /n .') do if %%i==2 set /a cols=%%j-1  
set "arg="  
set "char="  
set "back="  

for /l %%i in (1 1 %lines%) do (
  set "line=!mapline%%i!"  
  set "bind=!mapback%%i!"  
  for /l %%j in (0 1 %cols%) do (
    set "newchar=!line:~%%j,1!"  
    set "newback=!bind:~%%j,1!"  

    if "!newback!" neq "!back!" (  
      set "arg=!arg!{!newback:x=0!"  
      set "arg=!arg!!newchar!}"  
    )

    if "!newchar!" neq "!char!" (  
      set "arg=!arg!{!newback:x=0!"  
      set "arg=!arg!!newchar!}"  
    )

    if "!newback!" EQU "x" ( set "arg=!arg!Û" ) else ( set "arg=!arg!±" )  

    set "char=!newchar!"  
    set "back=!newback!"  
  )
)
>nul chcp 850
ctext.exe "!arg!"  

ctext.exe "{\n}{07}[DEBUG] printed map"  
pause >nul
Grüße
rubberman
Mitglied: 130834
130834 Oct 27, 2016 at 18:29:17 (UTC)
Goto Top
Cool, ich wusste doch das mir das was bringen würde, nur...

  set mapback1=xxxxxxxxxxxxxxxxfffff999999999999999fffffffffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  set mapline1=aaaaaaaaaaaaaaaaaaaaa111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  set mapback2=xxxxxxxxxxxxxxxfff99999999999999999999999999ffffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  set mapline2=aaaaaaaaaaaaaaaaaa11111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  set mapback3=xxxxxxxxxxxxxfff999999999999999999999999999999fffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  set mapline3=aaaaaaaaaaaaaaaa111111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  set mapback4=xxxxxxxxxxxxfff99999999999999999999999999999999fffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  set mapline4=aaaaaaaaaaaaaaa11111111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  set mapback5=xxxxxxxxxxxxfff99999999999999999999999999999999fffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  set mapline5=aaaaaaaaaaaaaaa11111111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  set mapback6=xxxxxxxxxxxxfff99999999999999999999999999999999fffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  set mapline6=aaaaaaaaaaaaaaa11111111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  set mapback7=xxxxxxxxxxxxfff99999999999999999999999999999999fffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  set mapline7=aaaaaaaaaaaaaaa11111111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  set mapback8=xxxxxxxxxxxxfff99999999999999999999999999999999fffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  set mapline8=aaaaaaaaaaaaaaa11111111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  set mapback9=xxxxxxxxxxxxfff99999999999999999999999999999ffffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  set mapline9=aaaaaaaaaaaaaaa11111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback10=xxxxxxxxxxxxfff9999999999999900009999999999fffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline10=aaaaaaaaaaaaaaa1111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback11=xxxxxxxxxxxxfff99999999999900000009999999999fffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline11=aaaaaaaaaaaaaaa11111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback12=xxxxxxxxxxxxfff9999999999900000000099999999999fffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline12=aaaaaaaaaaaaaaa1111111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback13=xxxxxxxxxxxxfff99999999999000000000999999999999fffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline13=aaaaaaaaaaaaaaa11111111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback14=xxxxxxxxxxxxfff99999999999900000000999999999999fffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline14=aaaaaaaaaaaaaaa11111111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback15=xxxxxxxxxxxxfff99999999999990000009999999999999fffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline15=aaaaaaaaaaaaaaa11111111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback16=xxxxxxxxxxxxfff99999999999999000099999999999999fffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline16=aaaaaaaaaaaaaaa11111111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback17=xxxxxxxxxxxxfff99999999999999999999999999999999fffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline17=aaaaaaaaaaaaaaa11111111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback18=xxxxxxxxxxxxfff99999999999999999999999999999999fffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline18=aaaaaaaaaaaaaaa11111111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback19=xxxxxxxxxxxxxxfff999999999999999999999999999999fffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline19=aaaaaaaaaaaaaaaaa111111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback20=xxxxxxxxxxxxxxxxfff9999999999999999999999999999fffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline20=aaaaaaaaaaaaaaaaaaa1111111111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback21=xxxxxxxxxxxxxxxxxxxfff9999999999999999999999ffffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline21=aaaaaaaaaaaaaaaaaaaaaa1111111111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback22=xxxxxxxxxxxxxxxxxxxxxffffff999999999999999fffffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline22=aaaaaaaaaaaaaaaaaaaaaaaaaaa111111111111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback23=xxxxxxxxxxxxxxxxxxxxxxxxxxfffff99999999ffffffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline23=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa11111111aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback24=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxffffffffffxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline24=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback25=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline25=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback26=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline26=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback27=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline27=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback28=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline28=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback29=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline29=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback30=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline30=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback31=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline31=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback32=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline32=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback33=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline33=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback34=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline34=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback35=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline35=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback35=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline36=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback36=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline37=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback37=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline38=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback38=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline39=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback39=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
 set mapline40=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 set mapback40=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

set /a lines=38

Das ist die normale Map size. Offenbar überlastet es aber ctext.exe und es stürzt ab. Eine Idee wie man das verhindern könnte?
Member: rubberman
rubberman Oct 27, 2016 at 19:11:08 (UTC)
Goto Top
Dann musst du zumindest auf zeilenweise Aufrufe zurück rudern.
:: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>nul chcp 1252
set "f=Û"  
set "s=±"  
>nul chcp 850

for /f "tokens=1,3 delims=:" %%i in ('mode con^|findstr /bc:" "^|findstr /n .') do if %%i==2 set /a cols=%%j-1  

for /l %%i in (1 1 %lines%) do (
  set "arg="  
  set "char="  
  set "back="  
  set "line=!mapline%%i!"  
  set "bind=!mapback%%i!"  
  for /l %%j in (0 1 %cols%) do (

    set "newchar=!line:~%%j,1!"  
    set "newback=!bind:~%%j,1!"  

    if "!newback!" neq "!back!" (  
      set "arg=!arg!{!newback:x=0!"  
      set "arg=!arg!!newchar!}"  
    )

    if "!newchar!" neq "!char!" (  
      set "arg=!arg!{!newback:x=0!"  
      set "arg=!arg!!newchar!}"  
    )

    if "!newback!" EQU "x" ( set "arg=!arg!%f%" ) else ( set "arg=!arg!%s%" )  

    set "char=!newchar!"  
    set "back=!newback!"  
  )
  ctext.exe "!arg!"  
)

ctext.exe "{\n}{07}[DEBUG] printed map"  
pause >nul
Mitglied: 130834
130834 Oct 27, 2016 at 19:18:01 (UTC)
Goto Top
Also hätte ich ne Firma, würd ich dich sofort einstellen.

Unfassbar! Also Das mit dem ganzen Auf einmal war schon himmlisch schnell. Aber das hier geht genauso gut!

Wenn ich nicht so ein Emotionsloser Klotz wäre könnte ich dir jetzt noch mehr von Herzen danken. ähm.

Danke. Funktioniert g̶u̶t̶ Wundervoll.
Member: rubberman
rubberman Oct 27, 2016 at 19:48:03 (UTC)
Goto Top
Also hätte ich ne Firma, würd ich dich sofort einstellen.
*lach* Ich hab meine Karriere schon gemacht. Wenn du mal eine Firma hast, die sich mit der Verarbeitung hochpolymerer Werkstoffe befasst, sag bescheid face-wink

Selbst wenn mir jemand 'ne Tasse Kaffee für diese Batchspielchen angeboten hat, hab ich das bislang immer abgelehnt. Ich meine, es ist Batch ... da ist das einfach ungerechtfertigt. In Zeiten von PowerShell & Co. umso mehr ^^