Acciones sobre archivos de texto. [Batch]

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

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

SuperDraco

el código que te dije yo si que funciona al decir cuantas palabras "depresión" encuentra, pero ten en cuenta que si alguna NO tiene acento en la "ó" pues obviamente entonces esa no la va a contar.

saludos
No he vuelto, solo estoy de paso.

leogtz

El error debe estar en el manejo del acento.
Código (perl) [Seleccionar]

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

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

PTT69

jajaja no me entienden la pregunta...  :-[

tonce busquen la palabra la, si da igual eso, a lo que voy
es que me tome todo el código, todo, es decir, termina de buscar
la palabra "X" y pasa a la siguiente función....

el problema es pasar a la siguiente función sin error  :-\

leogtz

A ver así:

Código (dos) [Seleccionar]
@echo off
setlocal enabledelayedexpansion

rem Puedes cambir texto.txt por el archivo que quieras.

for /f "Tokens=*" %%a in ('type texto.txt') do (
set linea=%%a
set linea=!linea:depresión=DEPRESION!
call :show !linea!
)

goto:lineas

:show
echo %*
goto:eof

:lineas
echo.
echo Total lineas:
type .\texto.txt | find /v /c ""

:repetido
echo Palabra "Depresi¢n" Sale:
type texto.txt | find /i /c "depresión"
Código (perl) [Seleccionar]

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

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

wigo69

#154
ola leo te escribo por que tengo un problema tengo el codigo final con todos los pasos pero cuando quiero partir el texto inicial en dos me crea 2 subtextos con mas codigo del debido por ejemplo tengo texto1.txt con 10 lineas de codigo y deceo partilas en 2 de 5 lineas como te dije pero me crea dos subtextos con 20 lineas cada uno xD te muestro mi codigo final


Código (dos) [Seleccionar]
7za.exe a -tzip original.%date:~-4,4%%date:~-7,2%%date:~0,2%.txt.zip -mx9 -r  texto.txt
echo se ha guardado un archivo comprimido

@echo off

setlocal enabledelayedexpansion
echo Codigo Rene toledo flores y Alexis Maureira s. Hackers

echo Cantidad de lineas totales:
type texto.txt | find /v /c "" < texto.txt

echo Lineas donde se encuentra version
type texto.txt | find /i /c "version"



for /f "tokens=* delims=" %%x in (texto.txt) do (
set linea=%%x
set linea=!linea:version=VERSION!
call :show !linea!
)
echo se a generado uno texto  y la Version ha sido cambiada y lineas en blanco eliminadas:



echo Cantidad de lineas totales:
type textomodificado.txt | find /v /c "" < textomodificado.txt
pause


goto:eof
:show
echo %* >> textomodificado.txt



for /f %%_ in ('type textomodificado.txt ^| find /v /c ""') do set /a n_lines=%%_, medio=n_lines / 2
set i=0
for /f "tokens=*" %%_ in (textomodificado.txt) do (
set /a i+=1
if !i! leq !medio! (echo %%_ >> parte1.txt) else (echo %%_ >> parte2.txt)
)


goto:eof


muchas gracias de antemano

leogtz

Coloquen el contenido de los archivos de texto que están usando.
Código (perl) [Seleccionar]

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

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

wigo69

texto.txt
asdasd
asdasd
asdsad
asdsad
asdsad
11111
22222
33333
44444
55555

leogtz

A ver, veamos, hagamos la prueba con el siguiente texto.txt:

Citarasdasd
asdasd
asdsad
asdsad
asdsad
11111
22222
33333
44444
55555
version

Hay que cambiar "version" por "VERSION".

Usando el siguiente código:
Código (dos) [Seleccionar]
@echo off

setlocal enabledelayedexpansion
echo Codigo Rene toledo flores y Alexis Maureira s. Hackers

echo Cantidad de lineas totales:
type texto.txt | find /v /c ""

echo Lineas donde se encuentra version
type texto.txt | find /i /c "version"

for /f "tokens=* delims=" %%x in (texto.txt) do (
set linea=%%x
set linea=!linea:version=VERSION!
call :show !linea!
)
echo Se a generado uno texto  y la Version ha sido cambiada y lineas en blanco eliminadas:
 
echo Cantidad de lineas totales:
type textomodificado.txt | find /v /c ""

goto:dividir

:show
echo %* >> textomodificado.txt
goto:eof

:dividir
for /f %%_ in ('type textomodificado.txt ^| find /v /c ""') do set /a n_lines=%%_, medio=n_lines / 2
set i=0
for /f "tokens=*" %%_ in (textomodificado.txt) do (
set /a i+=1
if !i! leq !medio! (echo %%_ >> parte1.txt) else (echo %%_ >> parte2.txt)
)
exit /b 0


Nos da el siguiente resultado:

Codigo Rene toledo flores y Alexis Maureira s. Hackers
Cantidad de lineas totales:
11
Lineas donde se encuentra version
1
Se a generado uno texto  y la Version ha sido cambiada y lineas en blanco elimin
adas:
Cantidad de lineas totales:
11


textomodificado.txt:

asdasd
asdasd
asdsad
asdsad
asdsad
11111
22222
33333
44444
55555
VERSION


parte1.txt

asdasd 
asdasd 
asdsad 
asdsad 
asdsad 


parte2.txt

11111 
22222 
33333 
44444 
55555 
VERSION 


Listo, funciona.
Código (perl) [Seleccionar]

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

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

oloco

#158
Hola a tod@s.
Llevo días dándole vueltas a un problema con un script y he visto este post. Lo he leido enteramente y he visto cosas muy interesantes, pero nada que se asemeje a mi problema:
Utilizo sqlcmd para consultar una tabla llamada familia en una BD SQL, y el resultado lo redirecciono a un fichero de texto llamado familia.txt
este es el formato que me devuelve:

szfamilyname      
--------------------
HMAR          
HTERESA
HLUZ                

(3 rows affected)


(todos los nombres que me interesan empezarán por H)
Con el comando findstr /I "H" familia.txt > contador.txt puedo sacar la información que me importa al fichero contador.txt

Bien. El problema es que hay muchas bases de datos, y cada una de ellas me devuelve un número diferente de valores, aunque todos los nombres empiezan por H también. Por ejemplo, si consulto la misma tabla szfamilyname en otra BBDD, el resultado podría ser:

szfamilyname      
--------------------
HEMILIO            
HRODRIGO
HCARMEN
HLORENA            

(4 rows affected)


Lo que me interesa es poder crear un script de forma tal que cada vez que consulto la tabla en cualquier base de datos, me cree una variable cuyo contenido sea el nombre de cada valor que devuelve. Lo complicado de todo esto, es que el número de valores puede variar en cada BBDD, por lo que seguramente tenga que crear algún tipo de contador que lea las lineas del fichero contador.txt y de alguna forma cree una variable con el nombre que aparece en cada linea (sean cuantas sean las lineas). ´
Estoy seguro de que me he expresado bastante mal, así que voy a tratar de exponerlo de una forma más amena con un ejemplo:

Mi aplicación necesita consultar el libro de familia (la BBDD) para poder acceder a la información del número de hij@s que hay (tabla szfamilyname). Con cada nombre existente en cada lista que dicha tabla me reporte, quiero crear una variable para más tarde poder operar con ella (estaría genial poder llamar a cada variable con el mismo nombre que su propio valor, pero eso es lo de menos)

Hasta el momento no me había encontrado con ningún problema similar (he tenido que utilizar un código sacado de aquí para poder contar el número de lineas que tiene un fichero y después operar con él), pero creo que aquí el kid del problema es cómo hacer para que, independientemente del número de "hij@s" que exista, se cree una variable con su nombre.

Espero entre tod@s podais ayudarme.
Un saludo, y mil gracias por adelantado!!!

P.D por cierto, si pensais que existe otra manera diferente y más sencilla de hacer lo que necesito sin tener que usar ficheros de texto, sentiros en libertad de cambiar mi post a otro sitio.

leogtz

Código (perl) [Seleccionar]

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

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