elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Funciones i pasar por referencia arrays
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Funciones i pasar por referencia arrays  (Leído 2,743 veces)
dracrac

Desconectado Desconectado

Mensajes: 60


Ver Perfil
Funciones i pasar por referencia arrays
« en: 6 Septiembre 2015, 19:50 pm »

Hola

Me gustaria que alguien me pudiera ayudar con el siguiente codigo en batch que no me funciona y no se por que:



Código
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3.  
  4. call :funcion_Guardar lista 1 "Caracol"
  5. call :funcion_Guardar lista 2 "estrella"
  6. call :proc_Print lista 2
  7.  
  8. call :funcion_Guardar lista1 1 "lunes"
  9. call :funcion_Guardar lista1 2 "Martes"
  10. call :proc_Print lista1 2
  11.  
  12.  
  13.  
  14.  
  15. :funcion_Guardar
  16. set vector=%1
  17. set pos=%2
  18. set valor=%~3
  19.  
  20. set vector[%pos%]=%valor%
  21.  
  22. set "%1=%vector%"
  23. goto :eof
  24.  
  25.  
  26. :proc_Print        
  27. set vec=%1
  28. set lenght=%2
  29.  
  30. for /l %%n in (1,1,%lenght%) do (
  31. echo vec[%%n]:!vec[%% style="color: #448888;">n]!
  32. )
  33. goto :eof




La idea es hacer 2 vectores de diferentes elementos con funciones y pasarlos por referencia. Alguien me puede ayudar?

Gracias


« Última modificación: 6 Septiembre 2015, 23:11 pm por Eleкtro » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: Funciones i pasar por referencia arrays
« Respuesta #1 en: 6 Septiembre 2015, 23:38 pm »

Debes utilizar las etiquetas GeShi para insertar código, lee las normas del subforo de Scripting.



La idea es hacer 2 vectores de diferentes elementos con funciones y pasarlos por referencia. Alguien me puede ayudar?

Eso es simplemente imposible de realizar en Batch, es un lenguaje limitado. Ni puedes crear Arrays regulares, ni mucho menos Vectores, ni tampoco pasar variables por referencia, no existen esos conceptos, además, en Batch no hay funciones como tales sino "puntos de detención" (o labels) que van al punto "B" y vuelven a "A" para seguir el procesamiento por lotes.

Lo único que puedes conseguir es escribir nombres de variables en forma de vectores, pero no usar un vector real.

No hay que confundir esto (un nombre de variable):
Código:
Set VarName[Número]

Con esto otro (un vector, lo cual es algo imaginario en Batch):
Código:
Set Vector[Índice]

Lo siento, pero la única y la mejor solución es que cambies a un lenguaje apto, un lenguaje capacitado para dicha tarea, que basicamente sería cualquier lenguaje actual excepto Batch.

Te estoy dando mi más sincera y humilde opinión, lo que estás haciendo no te va a servir de nada útil, es absurdo implicarse más en ese asunto con una herramienta inutil cómo Batch, es un consejo, pero de todas formas si quieres que lo que estás intentando hacer te funcione, te explicaré donde has fallado...



A la etiqueta funcion_Guardar le pasas el argumento "lista" que debería ser el nombre de tu variable, pero realmente el nombre que le asignas es "vector" tal cual:
Citar
Código:
set vector[%pos%]=%valor%

Para solucionarlo, añádele el símbolo reservado de variable para asignarle el nombre "lista" al nombre de tu variable:
Código:
set %vector%[%pos%]=%valor%

En el bloque de la etiqueta proc_Print te sucede lo mismo:
Citar
Código:
echo vec[%%n]:!vec[%%n]!

Modifícalo por:
Código:
echo vec[%%n]:!%vec%[%%n]!

Saludos


« Última modificación: 6 Septiembre 2015, 23:44 pm por Eleкtro » En línea



dracrac

Desconectado Desconectado

Mensajes: 60


Ver Perfil
Re: Funciones i pasar por referencia arrays
« Respuesta #2 en: 7 Septiembre 2015, 13:29 pm »

Muchas Gracias Elektro!! :D

justo lo que necesitaba !!   ;-)


Me gustaria hacerte otra pregunta rapida:

Existe alguna diferencia entre estas 2 declaraciones de variables ?

Código:
set a=Hola mundo
set "a=Hola mundo"

o con valores numericos:

Código:
set a=1
set "a=1"

El resultado es el mismo si lo pruebas pero he visto algunos codigos que siempre lo ponen entre comilllas y no se porque razón lo hacen. Gracias de nuevo
« Última modificación: 7 Septiembre 2015, 13:31 pm por dracrac » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: Funciones i pasar por referencia arrays
« Respuesta #3 en: 7 Septiembre 2015, 21:08 pm »

Existe alguna diferencia entre estas 2 declaraciones de variables ?

Código:
set a=Hola mundo
set "a=Hola mundo"

o con valores numericos:

Código:
set a=1
set "a=1"

En ese ejemplo no hay diferencia, pero las comillas dobles se deben usar para asegurarse de que el string se cierra evitando posibles conflictos al utilizar caracteres reservados. Por ejemplo:

Código:
Set var=Hello&World

Código:
Set "var=Hello&World"

saludos
En línea



dracrac

Desconectado Desconectado

Mensajes: 60


Ver Perfil
Re: Funciones i pasar por referencia arrays
« Respuesta #4 en: 7 Septiembre 2015, 22:38 pm »

Muchas gracias de nuevo Elektro!

Tu ayuda me ha venido de maravilla  ::)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Consultas sobre punteros en funciones por referencia..
Programación C/C++
roser24 5 4,133 Último mensaje 5 Mayo 2010, 17:47 pm
por roser24
Paso de parametros por referencia...funciones
Programación C/C++
soser 2 4,573 Último mensaje 2 Septiembre 2010, 22:33 pm
por soser
c++ Funciones por referencia
Programación C/C++
programador10 2 2,697 Último mensaje 11 Junio 2011, 06:18 am
por programador10
funciones paso por referencia
Programación C/C++
vivianfes 6 2,804 Último mensaje 4 Marzo 2015, 01:09 am
por vivianfes
¿Las matrices se pasan a las funciones por valor o referencia? [C]
Programación C/C++
NOB2014 3 2,758 Último mensaje 6 Junio 2016, 14:51 pm
por NOB2014
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines