Se trata de un generador de arrays de hasta 5 dimensiones... tiene posibilidad de expander sin perder datos, guardar un array en un fichero, cargarlo desde un programa, crear punteros a cierta casilla de un array, etc.
Tambien tiene variables de ayuda para saber el tamaño de un array y bueh xD eso. Se le puede dar un valor por defecto a todas las casillas del array cuando se definen declarando la variable "default".
Otra cosa... hay un bug con los espacios que aqui no voy a comentar que se arregla con call:putbar o call:quitbar
Aqui os dejo el codigo y luego explico la sintaxis:
Código:
@echo off&SETLOCAL ENABLEDELAYEDEXPANSION
GoTo:code
:;By blackray;:
:array
FOR %%x IN ("%~1","%~2","%~3") DO (
IF [%%x]==[""] (
echo Error.&GoTo:EoF
)
)
IF "%default%"=="" (
SET default=0
)
IF /i "%~1"=="newarray" (
IF NOT "%~7"=="" (
SET array[1]=%~2
SET array[2]=%~3
SET array[3]=%~4
SET array[4]=%~5
SET array[5]=%~6
SET array[6]=%~7
CALL:new5
GoTo:EoF
)
IF NOT "%~6"=="" (
SET array[1]=%~2
SET array[2]=%~3
SET array[3]=%~4
SET array[4]=%~5
SET array[5]=%~6
CALL:new4
GoTo:EoF
)
IF NOT "%~5"=="" (
SET array[1]=%~2
SET array[2]=%~3
SET array[3]=%~4
SET array[4]=%~5
CALL:new3
GoTo:EoF
)
IF NOT "%~4"=="" (
SET array[1]=%~2
SET array[2]=%~3
SET array[3]=%~4
CALL:new2
GoTo:EoF
)
IF NOT "%~3"=="" (
SET array[1]=%~2
SET array[2]=%~3
CALL:new1
GoTo:EoF
)
)
IF /i "%~1"=="expandarray" (
CALL:defined %~2
IF NOT "%~7"=="" (
SET array[rows]=!%~2.rows!
SET array[columns]=!%~2.columns!
SET array[len]=!%~2.len!
SET array[len4]=!%~2.len4!
SET array[len5]=!%~2.len5!
SET array[1]=%~2
SET array[2]=%~3
SET array[3]=%~4
SET array[4]=%~5
SET array[5]=%~6
SET array[6]=%~7
CALL:edit5
GoTo:EoF
)
IF NOT "%~6"=="" (
SET array[rows]=!%~2.rows!
SET array[columns]=!%~2.columns!
SET array[len]=!%~2.len!
SET array[len4]=!%~2.len4!
SET array[1]=%~2
SET array[2]=%~3
SET array[3]=%~4
SET array[4]=%~5
SET array[5]=%~6
CALL:edit4
GoTo:EoF
)
IF NOT "%~5"=="" (
SET array[rows]=!%~2.rows!
SET array[columns]=!%~2.columns!
SET array[len]=!%~2.len!
SET array[1]=%~2
SET array[2]=%~3
SET array[3]=%~4
SET array[4]=%~5
CALL:edit3
GoTo:EoF
)
IF NOT "%~4"=="" (
SET array[rows]=!%~2.rows!
SET array[columns]=!%~2.columns!
SET array[1]=%~2
SET array[2]=%~3
SET array[3]=%~4
CALL:edit2
GoTo:EoF
)
IF NOT "%~3"=="" (
SET array[rows]=!%~2.rows!
SET array[1]=%~2
SET array[2]=%~3
CALL:edit1
GoTo:EoF
)
)
IF /i "%~1"=="pointer" (
CALL:defined %~4
IF /i "%~2"=="asign" (
IF NOT "%~4"=="" (
SET array[val]=%~3
SET array[var]=%~4
CALL:asign
GoTo:EoF
)
)
IF /i "%~2"=="create" (
CALL:defined %~4
SET array[var]=%~3
SET array[where]=%~4
CALL:create
GoTo:EoF
)
)
IF /i "%~1"=="save" (
CALL:defined %~2
SET array[save]=%~2
SET array[dir]=%~3
CALL:save
GoTo:EoF
)
IF /i "%~1"=="load" (
SET array[dir]=%~2
SET array[state]=%~3
CALL:load
GoTo:EoF
)
echo Error.&GoTo:EoF
:new1
SET %array[1]%=array
SET %array[1]%.rows=%array[2]%
FOR /L %%e IN (0,1,%array[2]%) DO (
SET %array[1]%[%%e]=%default%
)
SET default=0
GoTo:EoF
:new2
SET %array[1]%=array
SET %array[1]%.rows=%array[2]%
SET %array[1]%.columns=%array[3]%
FOR /L %%f IN (0,1,%array[2]%) DO (
FOR /L %%c IN (0,1,%array[3]%) DO (
SET %array[1]%[%%f.%%c]=%default%
)
)
SET default=0
GoTo:EoF
:new3
SET %array[1]%=array
SET %array[1]%.rows=%array[2]%
SET %array[1]%.columns=%array[3]%
SET %array[1]%.len=%array[4]%
FOR /L %%f IN (0,1,%array[2]%) DO (
FOR /L %%c IN (0,1,%array[3]%) DO (
FOR /L %%r IN (0,1,%array[4]%) DO (
SET %array[1]%[%%f.%%c.%%r]=%default%
)
)
)
SET default=0
GoTo:EoF
:new4
SET %array[1]%=array
SET %array[1]%.rows=%array[2]%
SET %array[1]%.columns=%array[3]%
SET %array[1]%.len=%array[4]%
SET %array[1]%.len4=%array[5]%
FOR /L %%f IN (0,1,%array[2]%) DO (
FOR /L %%c IN (0,1,%array[3]%) DO (
FOR /L %%r IN (0,1,%array[4]%) DO (
FOR /L %%p IN (0,1,%array[5]%) DO (
SET %array[1]%[%%f.%%c.%%r.%%p]=%default%
)
)
)
)
SET default=0
GoTo:EoF
:new5
SET %array[1]%=array
SET %array[1]%.rows=%array[2]%
SET %array[1]%.columns=%array[3]%
SET %array[1]%.len=%array[4]%
SET %array[1]%.len4=%array[5]%
SET %array[1]%.len5=%array[6]%
FOR /L %%f IN (0,1,%array[2]%) DO (
FOR /L %%c IN (0,1,%array[3]%) DO (
FOR /L %%r IN (0,1,%array[4]%) DO (
FOR /L %%p IN (0,1,%array[5]%) DO (
FOR /L %%k IN (0,1,%array[6]%) DO (
SET %array[1]%[%%f.%%c.%%r.%%p.%%k]=%default%
)
)
)
)
)
SET default=0
GoTo:EoF
:edit1
SET %array[1]%=array
SET %array[1]%.rows=%array[2]%
FOR /L %%e IN (%array[rows]%,1,%array[2]%) DO (
SET %array[1]%[%%e]=%default%
)
SET default=0
GoTo:EoF
:edit2
SET %array[1]%=array
SET %array[1]%.rows=%array[2]%
SET %array[1]%.columns=%array[3]%
FOR /L %%f IN (%array[rows]%,1,%array[2]%) DO (
FOR /L %%c IN (%array[columns]%,1,%array[3]%) DO (
SET %array[1]%[%%f.%%c]=%default%
)
)
SET default=0
GoTo:EoF
:edit3
SET %array[1]%=array
SET %array[1]%.rows=%array[2]%
SET %array[1]%.columns=%array[3]%
SET %array[1]%.len=%array[4]%
FOR /L %%f IN (%array[rows]%,1,%array[2]%) DO (
FOR /L %%c IN (%array[columns]%,1,%array[3]%) DO (
FOR /L %%r IN (%array[len]%,1,%array[4]%) DO (
SET %array[1]%[%%f.%%c.%%r]=%default%
)
)
)
SET default=0
GoTo:EoF
:edit4
SET %array[1]%=array
SET %array[1]%.rows=%array[2]%
SET %array[1]%.columns=%array[3]%
SET %array[1]%.len=%array[4]%
SET %array[1]%.len4=%array[5]%
FOR /L %%f IN (%array[rows]%,1,%array[2]%) DO (
FOR /L %%c IN (%array[columns]%,1,%array[3]%) DO (
FOR /L %%r IN (%array[len]%,1,%array[4]%) DO (
FOR /L %%p IN (%array[len4]%,1,%array[5]%) DO (
SET %array[1]%[%%f.%%c.%%r.%%p]=%default%
)
)
)
)
SET default=0
GoTo:EoF
:edit5
SET %array[1]%=array
SET %array[1]%.rows=%array[2]%
SET %array[1]%.columns=%array[3]%
SET %array[1]%.len=%array[4]%
SET %array[1]%.len4=%array[5]%
SET %array[1]%.len5=%array[6]%
FOR /L %%f IN (%array[rows]%,1,%array[2]%) DO (
FOR /L %%c IN (%array[columns]%,1,%array[3]%) DO (
FOR /L %%r IN (%array[len]%,1,%array[4]%) DO (
FOR /L %%p IN (%array[len4]%,1,%array[5]%) DO (
FOR /L %%k IN (%array[len5]%,1,%array[6]%) DO (
SET %array[1]%[%%f.%%c.%%r.%%p.%%k]=%default%
)
)
)
)
)
SET default=0
GoTo:EoF
:create
SET %array[var]%[array]=%array[where]%
SET %array[var]%=!%array[where]%!
GoTo:EoF
:asign
SET %array[var]%=%array[val]%
SET !%array[var]%[array]!=!%array[var]%!
GoTo:EoF
:defined
IF NOT DEFINED %~1 (
echo Array not exist.&pause>nul&exit
)
GoTo:EoF
:save
CALL:defined %array[save]%
SET %array[save]%>%array[dir]%
GoTo:EoF
:load
IF NOT EXIST "%array[dir]%" (
echo File not found.&GoTo:EoF
)
FOR /F "tokens=*" %%x IN (%array[dir]%) DO (
SET "%%x"
)
IF /i "%array[state]%"=="D" (
DEL /F /Q %array[dir]%
GoTo:EoF
)
IF /i "%array[state]%"=="ND" (
GoTo:EoF
)
GoTo:EoF
:quitbar
SET var=%1
SET %1=!%var%:_= !
GoTo:EoF
:putbar
SET var=%1
SET %1=!%var%: =_!
GoTo:EoF
:code
REM AQUI EL CODIGO :D
Espero que no os parezca cutre
Bien... ahora lo que es capaz de hacer y como hacerlo:
Crear un nuevo array: call:array newarray nombre tamaño1 [tamaño2] [tamaño3] [tamaño4] [tamaño5]
Los que estan entre [] son opcionales... ya que el minimo puede ser de una dimension pero el maximo de 5... espero que ya llegue xD
Expander un array: call:array expandarray nombre tamaño1 [tamaño2] [tamaño3] [tamaño4] [tamaño5]
Podeis crear una nueva dimension y ampliar dimensiones existentes a la vez sin perder ningun dato guardado
Crear puntero a casilla: call:array pointer create nombre casillaarray
Creamos el puntero y apunta a la casilla que se defina xD
Asignar valor a un puntero (se modificara la casilla tambien ):
call:array pointer asign valor puntero
Pues se le asigna el valor al puntero, modificando tambien la casilla original ya que el puntero apunta a la casilla xD
[En este es donde esta el bug... no le puede asignar un valor con espacios asi que tienes que pasar antes el valor por la etiqueta call:putbar y cuando lo recuperes, pasarlo por el call:quitbar xD]
Guardar un array en fichero: call:array save nombrearray fichero.extensión
Creo que queda claro, guarda el array en un fichero... aqui hay un bug pero no tiene porque pasar nada si se programa bien
Leer un fichero con un array guardado: call:array load fichero.extensión ND/D
Se lee, y lo mas interesante quiza es el ND/D indica si se desea eliminar o no tras su lectura, si se especifica ND no se eliminara... si es D si
Y ahora funciones que no son de array pero que ya trae el programa en si:
PUTBAR: call:putbar variable
Cambia todos los espacios ( ) de una variable por barra inferior (_)
QUITBAR: call:quitbar variable
La inversa, cambia todas las barras (_) por espacios ( )
NOTA: EN ESTOS LA VARIABLE SIN %%
Y nada mas... espero que os sirva de algo ese fue mi entreteimiento en las vacaciones
Saludos!