Acciones sobre archivos de texto. [Batch]

Iniciado por leogtz, 24 Enero 2009, 00:30 AM

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

leogtz

Ah, entiendo.

Eso es lo curioso, porque en el código está la opción -i (en la línea de SED), o sea, la opción -i (inplace) se supone que edita el archivo y ya lo deja listo. En fin, vamos a hacer esto:
Citar
C:\>type texto.txt
====================================
texto texto texto texto
texto texto texto texto texto
texto texto
texto texto 12Z17NOV2010 texto
texto texto texto texto texto texto
====================================

C:\>dudas.bat
        1 archivos copiados.

C:\>type texto.txt
====================================
texto texto texto texto
texto texto texto texto texto
texto texto
texto texto 12Z10MAR2011 texto
texto texto texto texto texto texto
====================================

C:\>

Código (dos) [Seleccionar]
@echo off
rem Sacar el mes:
for /f "tokens=1,2,3 delims=/" %%a in ('date /t') do (
if "%%b"=="01" set "MES=JAN";
if "%%b"=="02" set "MES=FEB";
if "%%b"=="03" set "MES=MAR";
if "%%b"=="04" set "MES=APR";
if "%%b"=="05" set "MES=MAY";
if "%%b"=="06" set "MES=JUN";
if "%%b"=="07" set "MES=JUL";
if "%%b"=="08" set "MES=AUG";
if "%%b"=="09" set "MES=SEP";
if "%%b"=="10" set "MES=OCT";
if "%%b"=="11" set "MES=NOV";
if "%%b"=="12" set "MES=DEC";
set "DIA=%%a";
set "año=%%c";
)
sed "5s/\(.*\s.*\s[0-9]*[a-zA-Z]\)\(.*\)\(\s.*\)/\1%DIA%%MES%%año: =%\3/" texto.txt > tmp.txt
copy /y "tmp.txt" "texto.txt"
del /f /q "tmp.txt"
exit /b 0


Y la pregunta obligatoria, ¿para qué haces este proceso?, ¿cuál es el fin?
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

ydonerlcp


Muchisímas gracias amigo Leo Gutiérrez; todo funciona perfectamente como quería.

Estoy automatizando procesos y para que todo funcione era muy necesario un simple archivo de txt con fecha actualizado de manera que al leer la fecha actual pueda ejecutar automáticamente otras solicitudes que un usuario necesite.

Dios te bendiga amigo Gutierrez, una vez mas gracias por tu ayuda, ánimos y que los éxitos  continúen.

leogtz

Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

finoguer

Leo, muchas gracias por tu ayuda, hace exactamente lo que quería.

Un saludo.

wigo69

Disculpa leo lo que sucede es que estamos haciendo un trabajo y toda la información que subiste nos ha servido muchísimo pero aun así no logramos terminar el texto mi pregunta es la siguiente como puedo dividir un archivo txt en dos sub archivos que contengan cada uno la mitad de la lineas de código de txt general

por ejemplo tengo un texto.txt de 1000 lineas de código
deseo que se creen dos sub texto.txt  el 1 y el 2 que contengan 500 lineas de código

1 texto.txt = 0-499
2 texto.txt = 500- 1000
ojala nos puedas ayudar de antemano muchísimas gracias

aca esta el enunciado

a) Retorne al standar output el numero de lineas original de el archivo
b) Retorne al standar output la cantidad de lineas en donde aparece la
palabra "version" sin importar si es en mayusculas o minusculas
c) Cambie todas las ocurrencias de la palabra "Version" por "VERSION" en
todo el archivo
d) Elimine las lineas en blanco del archivo
e) Retorne al standar output el nuevo numero de lineas del el archivo
f) Dividir el archivo en 2 archivos con el mismo taman~o (o con diferencia
minima) indicando el nombre de los archivos generados
g) Comprimir el archivo original (con los cambios indicados) y darle el
siguiente nombre: original.yyy-mm-dd.txt donde yyyy-mm-dd es la fecha
actual

es el f) dividir

cuídate y muchas gracias :)

leogtz

¿En dónde te han encargado hacer esto?

Código (dos) [Seleccionar]
@echo off
setlocal enabledelayedexpansion
for /f %%_ in ('type file.txt ^| find /v /c ""') do set /a n_lines=%%_, medio=n_lines / 2
set i=0
for /f "tokens=*" %%_ in (file.txt) do (
set /a i+=1
if !i! leq !medio! (echo %%_ >> temp1.txt) else (echo %%_ >> temp2.txt)
)


El resultado se guarda en temp1.txt y el otro en temp2.txt.

Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

wigo69

muchas gracias, esto me lo pidieron en la u para un trabajo pero no sabiamos mucho, cosas vagas y hemos ido aprendiendo mediante tu post :)

leogtz

Mmmm, no sabía que les enseñaban Batch en la universidad.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

wigo69

#138
disculpa que te moleste denuevo lo que sucede es que ise un texto llamado texto1.txt
tiene 10 lineas 5 son de letras y 5 de numeros
al compilar el codigo y cambiando file por texto1.txt cuando ejecuto no me pesca no se si debo cambiar algunos otros parametros

Código (dos) [Seleccionar]
@echo off
setlocal enabledelayedexpansion
for /f %%_ in ('type texto1.txt ^| find /v /c ""') do set /a n_lines=%%_, medio=n_lines / 2
set i=0
for /f "tokens=*" %%_ in (texto1.txt) do (
set /a i+=1
if !i! leq !medio! (echo %%_ >> temp1.txt) else (echo %%_ >> temp2.txt)
)

asi lo deje solo cambie el file
muchas gracias por tu respuesta y disculpa las molestias

wigo69

es un profesor de Sistema operativo xD que no nos ise certamen 3 por tiempo y nos dio un trabajo pero sin saber que no sabiamos casi nada yo por ejemplo nada y nos dio tiempo hasta el viernes, no necesito nota pero la idea no es sacarse un 1 y de pasadita aprender xD

gracias por tu ayuda :)