Ayuda con este script

Iniciado por janus_gf, 5 Mayo 2008, 05:47 AM

0 Miembros y 1 Visitante están viendo este tema.

janus_gf

hola a todos amigos :) miren tengo un archivo txt  con varias lineas ahora
lo q quiero es que por ejemplo tomar las cinco primeras lineas y mandarlo
a otro archivo, intente con este codigo:  :¬¬

@echo off
cls
set /a r=0
for /f  "tokens=*" %%i in (test5.txt) do @echo %%i && set /a r +=1 && if "%r%"=="5" @echo %%i>>1.txt

Este script se me ocurrio pero igualno funciona en realidad no tengo muchas ideas de como podria hacer agradeceria sugerencias  ::)
un salu2 a todos ;)

No_NICK

Epale amigo que buena pregunta disculpa pero te voy a modificar
  tan solo un poquitin tú codigo espero que no te molestes
 
  xD Saludos


echo off
:: Creo el archivo, por que no existe aún
:: en tú caso como ya existe el archivo
:: omite estas primeras lineas
echo este es el texto de la linea 1 > texto.txt
echo estes es la linea 2 >> texto.txt
echo uff y asi puedo continuar hasta >> texto.txt
echo la linea 4 >> texto.txt
echo y sin parar hasta el final >> texto.txt
echo que tal dos lineas mas ^? >> texto.txt
echo bueno esta bien estas >> texto.txt
echo sera la ultima linea >> texto.txt
:: Aqui termina de escribir el archivo
echo %errorlevel% > nul

:: aquí comienza a correr tú scripts...
:: agrego el contador y lo igualamos a cero

set /a var=0

:: en este punto puedes agragar la direccion donde se encuantra el archivo
:: ejemplo:
:: set xD=c:\Document and....\dedos.txt

set xd=texto.txt

:: con el comando for listamos todas las lienas del archivo .txt
for /f "tokens=*" %%a in (%xd%) do set j=%%a && call :ini

:ini
:: luego con el contador listamos solo las primeras 5 lineas q pasaron por el for
if '%var%'=='5' goto fin
set /a var=var+1

:: pasamos las 5 primeras lineas al archivo llamado prueba.txt
echo %var% %j% >> prueba.txt
goto :eof

:fin


: {Y-este-es-el-Fin-xD}



.....

janus_gf

hola No_Nick excelente gracias por la respuesta  ;) justo lo q estaba buscando
pero ahora tengo esta inquietud :¬¬ si por ejemplo quiero leer apartir de la linea 2 por ejemplo y solamente las 3 lineas consecutivas como podria hacer esa delimitacion.

Un salu2 amigo y nuevamente gracias por responder si se te ocurre algo
en buena hora  ::)

No_NICK

#3
... a esta linea le agregas un "skip=n"  que
especifica el número de
líneas que hay que saltarse al principio
del archivo.

Citar

:: Solo modifica esta linea agregando el skip=n
:: La lógica del script quedaría así : si tienes 5 lineas en el .txt
::  -si comienzas por la linea 2 = entonces en el archivo .txt la linea 5 sera
:: 3 en el contador

     for /f "tokens=* skip=2 " %%a in (%xd%) do set j=%%a

:: Lo demás queda igual


Saludos...


janus_gf

Muchas gracias amigo :D, mira estoy tratando de hacer lo siguiente tengo un
archivo con 5 preguntas, ahora lo estoy dividiendo cada pregunta en un archivo aparte, asi como me dijiste funciona perfectamente ;) pero para cada pregunta tengo q crear otro script y bueno yo lo quería implementar solo en un script, mi código es el siguiente:

@echo off
:: Esta variable es para capturar el nro de pregunta
set /a preg=1

:: esta es para saltar las lineas
set /a salta=1

:inicio
cls

set /a var=0

:: pregunto por el nro de pregunta y de acuerdo
:: a eso salto las lineas

if "%preg%"=="2" set /a salta=6
if "%preg%"=="3" set /a salta=6*2
if "%preg%"=="4" set /a salta=6*3
if "%preg%"=="5" set /a salta=6*4

:: con el comando for listamos todas las lienas del archivo .txt
for /f "skip=%salta% tokens=*" %%a in (test5.txt) do set j=%%a && call :ini

:ini
:: luego con el contador listamos solo las primeras 5 lineas q pasaron por el for
if '%var%'=='5' goto fin
set /a var=var+1

:: pasamos las 5 primeras lineas al archivo llamado prueba.txt
echo %j% >> P%preg%.txt
:: goto :eof


:fin
:: Aqui pregunto si es la ultima pregunta termina
if "%preg%" LEQ 5 goto salida

:: si no es la ultima aumenta el nro de pregunta
set /a preg+=1

:: regresamos al inicio para barrer las sigtes pregutnas
goto inicio

:salida


Sin embargo solo me toma la primera pregunta nada mas, el resto no las toma nose porque  :-[  sedebe poder hacer .. bueno nos vemos

Salu2




No_NICK

#5
ummm creo que tienes dos detalles en tú scripts

Citar
:: el operador de comparación a utilizar seria este NEQ
:: y debes agregar al if /I de manera de q le informes al bat
:: q estas haciendo una comparación

if /I "%preg%" NEQ "5" goto salida


El segundo detalle que veo es el contador fíjate

Citar

set /a preg+=1           -- el que tú tienes
::y estes es

set /a preg=%preg%+1    ---el que yo usaría



     (creo que con ésto ya solucionas el problema...)

   Pero aún así me tomo la molestia de modificar la forma de usar
el contador para optimizar el uso de la memoria.. (no es necesario q lo hagas es solo un ejemplo...


Citar

::Ejemplo contador

echo off

:::iguala en la primera linea el contador a cero SIEMPRE xD
set /a preg=0

::y nos saltamos por encima el contador
goto inicio

:contador
set /a preg=%preg%+1
goto :EOF


:inicio
:: lo llamamos para que nos asigne 1 valor a la variable %preg%
call :contador

::
:: aquí comenzaría tú scripts




echo PREGUNTA %preg%






:: aquí finaliza tú scripts
:: ya verificamos la variable %preg% que valor tiene
:: y así hasta que se cumpla la condición y nos vamos al fin

if /I "%preg%" NEQ "4" goto inicio

goto fin

:fin


:: esto por que ??
:: por que es mas fácil reutilizar el contador en cualquier lugar del scripts
:: ejemplo

:: lo igualo a cero y lo llamo otra vez

set /a preg=0
call :contador

echo y sigo escribiendo código xD
echo por que el contador ahora esta en
echo el numero %preg% otra vez





   Saludos...

janus_gf

excelente muchas gracias amigo ya todo funciona oks ;)
si tengo alguna otra duda lo postearé bajo otro tema
bueno nuevamente gracias por responder

Salu2 .....  ::)