Ms-Dos - Substring a Token en un FOR

   
Vista:

Substring a Token en un FOR

Publicado por TheEmulator (2 intervenciones) el 06/09/2013 00:22:23
Buenas tardes.


Necesito ayuda con un problema que tengo tratando de hacer un subtring sobre una variable token. Me explico si tengo una variable normal definida con SET y le hago un substring funciona, pero si intento hacer subtring a una variable que esta definida como token no lo hace.

¿Alguien a hecho algo similar antes?


Aqui está el codigo de lo que intento hacer:

@echo off

for /F "usebackq tokens=1,2,3,4 delims= " %%a IN (`type archivo`) DO (

SET dato=%c:~0,2%
echo %dato%
)
pause
-------------------------
En el codigo lo que hago es leer un archivo que se encuentra con campos separados(tabulador) y dividir cada fila en diferentes campos. Luego quiero que se tome el campo numero 3 en este caso seria el token c y que le haga un substring para almacenar los 2 primeros valores en una variable llamada dato. Luego imprimir el valor de dato en pantalla


De programación en DOS no se mucho y lo que he visto es que las variables se tratan diferente a los tokens y alli radica el problema que tengo.

Por ejemplo si quiero imprimir una variable se hace con echo %variable% pero los token se imprimen con echo %%token.


gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
información
Otras secciones de LWP con contenido de Ms-Dos
- Cursos de Ms-Dos
- Temas de Ms-Dos
información
Cursos y Temas de Ms-Dos
- Manual MS-DOS
- Tutorial de MS-DOS
- Tutorial Sobre el Mouse
Imágen de perfil de Antoni Masana

Substring a Token en un FOR

Publicado por Antoni Masana (269 intervenciones) el 06/09/2013 07:14:12
El FOR y el SET no combinan bien, tiene fallos de diseño el MS-DOS.

Si guardas esto en C:\Temp\Ejemplo.bat y lo ejecutas:

1
2
3
4
5
6
7
8
@echo off
 
for /F %%a IN (C:\Temp\Ejemplo.bat) DO (
 
   SET dato=%%a
   echo. %dato%
)
pause


Lo que obtendras es algo asi

1
2
3
4
5
6
7
8
9
C:\Temp>Ejemplo.bat
 pause
 pause
 pause
 pause
 pause
 pause
 pause
Presione una tecla para continuar . . .


¿Por que? es un misterio al que nos tiene acostumbrado MicroSoft

En cambio si haces esto:

1
2
3
4
5
6
7
8
9
@echo off
 
for /F %%a IN (C:\Temp\Ejemplo.bat) DO call :Etiqueta %%a
pause
goto:eof
 
:Etiqueta
   SET dato=%1
   echo.%dato%


El resultado es este:

1
2
3
4
5
6
7
8
9
C:\Temp>Ejemplo.bat
@echo
for
pause
goto:EOF
:Etiqueta
SET
echo.
Presione una tecla para continuar . . .


En tu caso la solución seria algo asi:

1
2
3
4
5
6
7
8
9
10
@echo off
 
for /F "usebackq tokens=1,2,3,4 delims= " %%a IN ( archivo ) DO call :Label  %%c
pause
goto:eof
 
:Label
   SET dato=%1
   SET dato=%dato:~0,2%
   echo.%dato%


Si haces esto tambien deberia funcionar

1
2
3
@echo off
for /F "usebackq tokens=1,2,3,4 delims= " %%a IN ( archivo ) DO echo %c:~0,2%
pause


En MS-DOS el deberia no es una variable, es una constante, esperas que algo funcione de una determinada forma, que es lo que se espera por logica, pero MicroSoft emplea la logica inversa y a veces conseguir hacer algo con comandos es una tarea de locos.

Lo digo por experiencia propia.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Substring a Token en un FOR

Publicado por TheEmulator (2 intervenciones) el 06/09/2013 16:43:53
Lo resolví usando etiquetas y con call como indicaste en la respuesta.

Como de programación en bash no se nada y necesitaba ajustar unos scripts estuve un buen tiempo varado en esa parte y buscando en internet no encontraba algun ejemplo de lo que queria hacer.

Habia pensado en lo de usar etiquetas pero solo conocia el goto por lo que no me iba a servir ya que el script llegaria a la etiqueta pero no retornaria al for pero con el call como dijsite si hace lo que queria de vovler al for.


Saludos y gracias por la respuesta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar