Ms-Dos - rellenar array a través de un fichero y usarlo después

 
Vista:

rellenar array a través de un fichero y usarlo después

Publicado por Lupa (2 intervenciones) el 17/03/2020 02:12:44
Buenas noches,

estoy intentando obtener cada línea de un fichero .txt y meter cada una de esas líneas en un array para luego poder usarlas. El problema que tengo es que sólo sé definir el array dentro del for, pero después no puedo acceder a él.

El fichero que leo, en cada línea aparece el tiempo de inicio de una canción, hay 14 canciones distintas, por tanto, os dejo lo que contiene para que lo veáis mejor:

// FICHERO songs.txt

00:00 Horizon - Hotel Pools
02:38 Coral Blush - Hello Meteor
08:02 another 80’s synthwave song - rayklin
12:33 SOMEBODY - 80AM
15:51 Flights of Fancy - FRACTAL MAN
19:54 Submerse - Safehouse
22:27 S a l v i a B l i s s - M Y D R E A M Y A D V E N T U R E
24:24 Surface Waves - Hello Meteor
29:58 Think of the Future - VentureX
34:10 Nothing Lasts Forever - bl00dwave
37:34 Beyond - Voyage
43:44 View Existent - Poetically
47:50 Imagine - Departure
51:20 Lost in a Sea of Stars - FRACTAL MAN

// FIN FICHERO songs.txt

----------

El bucle for me pinta perfectamente sólo los número, es decir:

00:00
02:38
08:02
12:33
15:51
19:54
22:27
24:24
29:58
34:10
37:34
43:44
47:50
51:20

Pero quiero almacenar todos esos valores en un array, así pues mi array elem[4] tendrá que dar el resultado 15:51

El problema es que creo que al hacer set del array dentro del for, una vez fuera del bucle ya no puedo acceder al array, y me gustaría hacerlo.

Os dejo el código a continuación.

1
2
3
4
5
6
7
8
9
10
setlocal EnableDelayedExpansion
 
for /F %%a in (songs.txt) do (
   set elem[!num!]=%%a
   echo !elem[%num%]!
)
 
echo ejemplo: !elem[4]!
 
endlocal

// FIN DEL CÓDIGO

Al final, el último echo, sólo imprime la palabra "ejemplo:" sin el valor de la posición 4 del array.

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
Imágen de perfil de Antoni Masana
Val: 1.419
Oro
Ha mantenido su posición en Ms-Dos (en relación al último mes)
Gráfica de Ms-Dos

rellenar array a través de un fichero y usarlo después

Publicado por Antoni Masana (811 intervenciones) el 20/03/2020 12:30:42
Aqui tienes los cambios necesarios para que funcione:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@echo off
setlocal EnableDelayedExpansion
 
set num=0
for /F "delims=*" %%a in (songs.txt) do (
   set /A Num+=1
   set reg=%%a
   set elem_Time[!num!]=!reg:~0,5!
   set elem_Name[!num!]=!reg:~6,99!
)
echo.
echo.
echo ejemplo: !elem_Time[1]!  !elem_Name[1]!
echo ejemplo: !elem_Time[2]!  !elem_Name[2]!
echo ejemplo: !elem_Time[3]!  !elem_Name[3]!
echo ejemplo: !elem_Time[4]!  !elem_Name[4]!
set x=5
echo ejemplo: !elem_Time[%x%]!  !elem_Name[%x%]!
 
endlocal

Esto es un mal llamado 'Sistema Operativo'. Para estas y otras muchas cosas es mejor usar el Python o Perl entre otros.

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

rellenar array a través de un fichero y usarlo después

Publicado por Lupa (2 intervenciones) el 21/03/2020 14:53:06
Muchas gracias Antoni,

al final descubrí otra solución. Con el mismo código que tenía, en vez de hacer ECHO !elem[%num%]!, puse CALL ECHO %%elem[!num!]%% y me funcionó perfectamente, pero gracias por la contestación, parece bastante más limpio todo.

Un saludo.
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