Acciones sobre archivos de texto. [Batch]

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

0 Miembros y 2 Visitantes están viendo este tema.

leogtz

Código (perl) [Seleccionar]

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

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

finoguer

Hola.

Les comento mi problema, para ver si pueden ayudarme ya que yo en este tema estoy muy perdido.

Tengo un fichero texto.txt con multiples filas y  lo que quiero es quitar un número determinado de caracteres de cada fila a partir de una determinada posición dejando el resto de la fila igual, para todas las filas del archivo.

leogtz

Necesito el contenido del archivo, qué es lo que quieres quitar y una salida de como quieres que quede. Ah, y que digas con qué propósito haces esto.
Código (perl) [Seleccionar]

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

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

finoguer

El archivo tiene lineas del siguiente tipo:
CitarAAAAAAAAAAAAAAAAAAAA                                           BBBBB BBBBBBBB BBBBB BBBBBB B                                                          CCCCC CCC CCCCCC CCCC C C                                                                                                                                                                               DDDDDDDDDDD         EEEEEEEEE                FFFFFFFFFFF              GGGGG GGGGGGGGGGGG G G GGGGGGG GGGG                                                                                                                                                                                                                                                                                           HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH       IIIII
Todo esto es solo una linea
y quiero que  a partir de la posición 111 de la línea quite 40 caracteres y quede:
CitarAAAAAAAAAAAAAAAAAAAA                                           BBBBB BBBBBBBB BBBBB BBBBBB B                  CCCCC CCC CCCCCC CCCC C C                                                       DDDDDDDDDDD         EEEEEEEEE                FFFFFFFFFFF              GGGGG GGGGGGGGGGGG G G GGGGGGG GGGG                                                                                                                                                                                                                                                                                           HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH       IIIII

El archivo solo tiene caracteres de texto y necesito hacer esto para que automaticamente se me pasen los datos entre 2 programas.

ydonerlcp

#124
Una consulta.-

Tengo el siguiente texto (texto.txt)
Citar====================================
texto texto texto texto
texto texto texto texto texto
texto texto
texto texto 12Z17NOV2010 texto
texto texto texto texto texto texto
====================================

Lo que quiero es que me actualice diariamente la fecha en el formato que esta, sin que agregue ni quite contenido alguno del texto además el archivo quede con el mismo nombre.

Alguna sugerencia ?

leogtz

#125
Cita de: ydonerlcp en 10 Marzo 2011, 16:26 PM
Una consulta.-

Tengo el siguiente texto (texto.txt)
Lo que quiero es que me actualice diariamente la fecha en el formato que esta, sin que agregue ni quite contenido alguno del texto además el archivo quede con el mismo nombre.

Alguna sugerencia ?

Debiste poner el archivo real, y si no puedes cambiarle por caracter cualquier, pero bueno, podemos editar solamente la línea número 5 (no has especificado si siempre se edita esa línea).

En un momento pongo mi solución.

EDITO:

Aquí está:

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 -i "5s/\(.*\s.*\s[0-9]*[a-zA-Z]\)\(.*\)\(\s.*\)/\1%DIA%%MES%%año: =%\3/" texto.txt


Necesitas descargar e instalar SED para windows.
http://sourceforge.net/projects/gnuwin32/files/sed/4.2.1/sed-4.2.1-setup.exe/download

Saludos.
Código (perl) [Seleccionar]

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

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

leogtz

Cita de: finoguer en 23 Febrero 2011, 14:19 PM
El archivo tiene lineas del siguiente tipo:Todo esto es solo una linea
y quiero que  a partir de la posición 111 de la línea quite 40 caracteres y quede:
El archivo solo tiene caracteres de texto y necesito hacer esto para que automaticamente se me pasen los datos entre 2 programas.

Es fácil, necesitas sed para Windows.

file.txt:

Código (dos) [Seleccionar]
C:\>type file.txt
AAAAAAAAAAAAAAAAAAAA                                           BBBBB BBBBBBBB BBBBB BBBBBB B
                         CCCCC CCC CCCCCC CCCC C C
                                                                                                    DDDDDDDDDDD         EEEEE
EEEE                FFFFFFFFFFF              GGGGG GGGGGGGGGGGG G G GGGGGGG GGGG

                                                                                                                 HHHHHHHHHHHH
HHHHHHHHHHHHHHHHHHHHHHHHHHHHH       IIIII

C:\>


Y con esta línea haces el trabajo:
Código (dos) [Seleccionar]
sed -i "s/^\(.\{111\}\).\{40\}\(.*\)$/\1\2/" file.txt
Código (perl) [Seleccionar]

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

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

ydonerlcp

#127
Estimado Leo Gutiérrez.-
Quiero agradecerle de antemano por la ayuda  que me ha brindado, probé el codigo y es exactamente lo que quiero, solo un detalle:

El archivo (texto.txt) se edita diariamente de manera que se mantiene actualizado la fecha en el archivo (texto.txt);

al ejecutar el batch debe actualizarse automáticamente la fecha en el (texto.txt) sólo esa linea y lo demás debe quedar como estaba.

actualmente al ejecutar no guarda la fecha en mi archivo (texto.txt)

Cómo puedo hacer ?

Desde ya muy agradecido por su respuesta.


leogtz

Cita de: ydonerlcp en 10 Marzo 2011, 23:49 PM
Estimado Leo Gutiérrez.-
Quiero agradecerle de antemano por la ayuda  que me ha brindado, probé el codigo y es exactamente lo que quiero, solo un detalle:

El archivo (texto.txt) se edita diariamente de manera que se mantiene actualizado la fecha en el archivo (texto.txt);

al ejecutar el batch debe actualizarse automáticamente la fecha en el (texto.txt) sólo esa linea y lo demás debe quedar como estaba.

Desde ya muy agradecido por su respuesta.



Disculpa, no he entendido bien qué es lo que quieres o  qué hay que hacer, si pudieras ser un poco más claro en lo que quieres.

Saludos.
Código (perl) [Seleccionar]

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

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

ydonerlcp

#129
Cita de: Leo Gutiérrez. en 11 Marzo 2011, 00:05 AM
Disculpa, no he entendido bien qué es lo que quieres o  qué hay que hacer, si pudieras ser un poco más claro en lo que quieres.

Saludos.

Discula por no ser muy claro en mi consulta:
Mi archivo (texto.txt) con contenido arriba mostrado es un archivo que debe ser actualizado diariamente pero sólo la fecha en el formato que está, manteniendo el contenido que tenia.

Ahora la solución que Ud. me ha dado cumple mi pedido el detalle esta en:

- Al ejecutar el batch quiero que actualice el archivo (texto.txt) con el contenido que tenía pero con la fecha ya actualizada; de manera que al abrir el archivo (texto.txt) me muestre el contenido con la fecha actual del sistema.

- El codigo que me envió, me muestra en la ventana de DOS todo el contenido del texto con fecha actualizada hasta ahi PERFECTO;  PERO al terminar de ejecutar mi batch lo cierro y vuelvo a abrir mi archivo de texto pára ver si se actualizó mi fecha o no y no veo que la fecha se haya actualizado; en otras otras palabras no guarda la fecha modificada.

Por favor .... muchas gracias por su ayuda.