Acciones sobre archivos de texto. [Batch]

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

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

Eleкtro

#270
Lo que yo no entiendo es: ¿En la carpeta "Extensiones" deben ir todos los archivos sin importar la extension?, si fuese así entonces que le encuentras de beneficioso?, sería simplemente una copia nula (tamaño cero) de los mismo archivos.

¿O acaso quieres un txt por cada extension?, dentro de la carpeta "Extensiones".

Hice este código que genera una carpeta "Extensiones" por cada directorio y subdirectorio, dentro de la carpeta "Extensiones" se genera una serie de archivos "LOG" con el nombre de cada extension (Ejemplo: .avi.log), y dentro de cada archivo log están registrados los archivos de dicha extension.

Código (dos) [Seleccionar]
@Echo OFF
REM By Elektro H@cker

Set "Extensions="

:: No usar FOR /D /R para no crear conflictos en tiempo de ejecución entre el otro FOR al procesar carpetas.
For /F "Delims=" %%D in ('DIR /B /S /AD "%CD%\*"') Do (Call :List "%%D")
Echo [+] Terminado!
Pause&Exit

:List
Echo Procesando directorio "%~1"
MKDIR "%~1\Extensiones" 2>NUL

FOR %%€ IN ("%~1\*.*") DO (
Call Echo "%%Extensions%%" | FIND /I ";%%~x€" 1>NUL || (
Call Set "Extensions=%%Extensions%%;%%~x€"
Echo Procesando archivos "%%~x€"
(FOR %%# IN ("*%%~x€") DO (Echo %%#))>"%~1\Extensiones\%%~x€.log"
)
)

Echo+ | MORE
Set "Extensions="
GOTO:EOF


Saludos









leogtz

Código (bash) [Seleccionar]
@echo off
if not exist extensiones (
    mkdir "extensiones" && (
        echo Directorio "extensiones" creado
    )
)
for /f "tokens=*" %%_ in ('dir /b /a-d .') do (
    echo. 2> "extensiones\%%_"
)
pause


Prueba ese código, el .bat tiene que estar en el mismo directorio donde están tus .xls, .avi, .flv, etc.
Código (perl) [Seleccionar]

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

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

Pédrin-2

Fantastico Leo justo lo que necesitaba

Hola EleKtro H@cker, gracias por tu interes.

Un Saludo a los dos
Pido disculpas por las pifias que pueda decir. el unico fin es ayudar y aprender.
        Un Saludo

MauriH

#273
Cita de: Leo Gutiérrez. en 13 Septiembre 2013, 07:31 AM
Hola @MauriH

¿Podrías por favor un ejemplo de cómo quisieras la salida del archivo final o de lo que quisieras obtener?

Es que no me queda claro como quieres relacionar el archivo de preguntas y de respuestas con un archivo final.

Saludos.

Hola Leo, en mi anterior consulta te puse el ejemplo del archivo final, de pronto no lo viste por q esta todo muy junto, aqui te lo pongo de nuevo:

Archivo de preguntas:

1. El masaje cardiaco externo:
• No se realiza en recién nacidos
• Se realiza en la mitad superior del esternón en el adulto
• Produce un flujo sanguíneo 25 % del normal
• No esta indicado en la fibrilación ventricular sostenida
• Todas las anteriores

2. La administración intracardiaca de drogas durante RCP:
• Requiere mayor dosis de drogas
• Puede producir lesión irreversible en el corazón
• Es la vía de elección en la reanimación a tórax abierto
• La vía de abordaje es paraesternal izquierda
• Todas son ciertas

3. La adrenalina:
• Posee efecto beta predominante
• Se sintetiza en el hígado
• Tiene mayor efecto en la acidosis metabolica
• Aumenta la presión de perfusión durante la RCP
• Todas

4. Para diagnosticar la circulación ineficaz:
• El ECG es el método de elección
• Palpar el pulso en la arteria femoral o carótida
• Se han descrito alteraciones en el metabolismo de los ácidos grasos libres
• Ausencia de reflejos fotomotores
• Todas

5. En la evaluación preoperatoria de un paciente ASA I de 30 años es indispensable:
• Solicitar un ECG de rutina
• Abetalipoproteinemia
• Realizar un examen clínico completo
• Solicitar un coagulograma de rutina
• Todas



Archivo de respuestas:

Respuesta de la pregunta 1 :• Todas las anteriores
Respuesta de la pregunta 2 :• Todas son ciertas
Respuesta de la pregunta 3 :• Se sintetiza en el hígado
Respuesta de la pregunta 4 :• Se han descrito alteraciones en el metabolismo de los ácidos grasos libres
Respuesta de la pregunta 5 :• Abetalipoproteinemia

Nota. El texto q aparece en cursiva, realmente no aparece en mis archivos de texto, solo lo puse de un modo aclaratorio.



Archivo Final

1. El masaje cardiaco externo:
• No se realiza en recién nacidos
• Se realiza en la mitad superior del esternón en el adulto
• Produce un flujo sanguíneo 25 % del normal
• No esta indicado en la fibrilación ventricular sostenida
monordi1Todas las anterioresmonordi2

2. La administración intracardiaca de drogas durante RCP:
• Requiere mayor dosis de drogas
• Puede producir lesión irreversible en el corazón
• Es la vía de elección en la reanimación a tórax abierto
• La vía de abordaje es paraesternal izquierda
monordi1Todas son ciertasmonordi2

3. La adrenalina:
• Posee efecto beta predominante
monordi1Se sintetiza en el hígadomonordi2
• Tiene mayor efecto en la acidosis metabolica
• Aumenta la presión de perfusión durante la RCP
• Todas

4. Para diagnosticar la circulación ineficaz:
• El ECG es el método de elección
• Palpar el pulso en la arteria femoral o carótida
monordi1Se han descrito alteraciones en el metabolismo de los ácidos grasos libresmonordi2
• Ausencia de reflejos fotomotores
• Todas

5. En la evaluación preoperatoria de un paciente ASA I de 30 años es indispensable:
• Solicitar un ECG de rutina
monordi1Abetalipoproteinemiamonordi2
• Realizar un examen clínico completo
• Solicitar un coagulograma de rutina
• Todas

La idea es leer una por una las líneas de un archivo (el archivo de respuestas) y buscarlas en otro archivo (el archivo de preguntas) y poner una palabra delante y otra detras de cada coincidencia. Por si acaso uso Windows7, gracias de antemano. Un saludo.

Eleкtro

#274
@MauriH

Código (dos) [Seleccionar]
@Echo OFF

Set "Questions=C:\Preguntas.txt"
Set "Answers=C:\Respuestas.txt"

Set "Prefix=nothing"
Set "Suffix=nothing"

FOR /F "Usebackq Delims=" %%R IN ("%Answers%") DO (
FOR /F "Usebackq Delims=" %%P IN ("%Questions%") DO (
(
If /I "%%R" EQU "%%P" (Echo %PREFIX%%%P%SUFFIX%) Else (Echo %%P)
)>>"%TEMP%\Questions.tmp"
)
Move /Y "%TEMP%\Questions.tmp" "%Questions%" 1>NUL || (Echo ERROR al reemplazar archivo & Goto :OnError)
)

:OnError
Pause&Exit


PD: Antes de usar haz una copia del archivo original por precaución.

Saludos!








MauriH

#275
Cita de: EleKtro H@cker en 23 Septiembre 2013, 20:33 PM
@MauriH

Código (dos) [Seleccionar]
@Echo OFF

Set "Questions=C:\Preguntas.txt"
Set "Answers=C:\Respuestas.txt"

Set "Prefix=nothing"
Set "Suffix=nothing"

FOR /F "Usebackq Delims=" %%R IN ("%Answers%") DO (
FOR /F "Usebackq Delims=" %%P IN ("%Questions%") DO (
(
If /I "%%R" EQU "%%P" (Echo %PREFIX%%%P%SUFFIX%) Else (Echo %%P)
)>>"%TEMP%\Questions.tmp"
)
Move /Y "%TEMP%\Questions.tmp" "%Questions%" 1>NUL || (Echo ERROR al reemplazar archivo & Goto :OnError)
)

:OnError
Pause&Exit


PD: Antes de usar haz una copia del archivo original por precaución.

Saludos!

Hola, me parece muy bueno el codigo, gracias por la pronta respuesta  ;-), nada más tengo el problema de q busca cada linea del archivo de respuestas en todo el archivo de preguntas y marca todas las coincidencias, y eso no es bueno ya q muchas veces las opciones se repiten en varias preguntas (por ejemplo la ultima opción en las preguntas 3, 4 y 5) y no necesariamente son correctas todas, eso provoca q se marquen 2 o más opciones como correctas. Lo q quisiera es q una vez q encontró una coincidencia ya no siga buscando y pase a buscar la siguiente linea del archivo de respuestas, en el archivo de preguntas, pero q continue buscando a partir de donde se quedó en archivo de preguntas y no desde el principio.
No sé si me explique correctamente y tampoco sé si tal cosa es posible, espero vuestras respuestas. Muchas gracias por la ayuda.

Eleкtro

@MauriH

Es decir,  por poner un ejemplo, si tienes un archivo de preguntas de 200 lineas, y un archivo de respuestas con dos respuestas (2 lineas) donde la primera coincidencia de la primera respuesta (linea 1) coincide con la linea 190 del archivo de preguntas, ¿entonces la respuesta 2 debería empezar a buscar desde esa linea 190?.

Saludos








MauriH

#277
@EleKtro H@cker

Pues verás básicamente si, esa es una de las ideas q tuve para evitar q se marcaran por error dos opciones como correctas en una misma pregunta. La otra idea es q una vez q sea encontrada una coincidencia en el archivo de preguntas, ya no siga buscando, por que ahorita eso es lo q hace, busca una linea en todo el archivo de preguntas y marca todas las coincidencias q encuentra, pero yo quisiera q solo marque la primera y así se evitaría marcar otras opciones q no son correctas, y si se podría hacer q la segunda linea del archivo de preguntas comenzase a buscar partir de la coincidencia marcada por la primera seria genial, bueno eso es lo q se me ocurrió, pero en verdad no pude lograrlo escribiendo código, recién llevo poco tiempo practicando batch. Es q como te dije hay muchas opciones q se repiten en el archivo de preguntas y no necesariamente son correctas. Hay q tener en cuenta q todas las preguntas tienen una sola opción correcta y q hay exactamente la misma cantidad de preguntas en el archivo de preguntas como lineas en el archivo de respuestas, por ejemplo si tengo 600 preguntas, tengo 600 respuestas (en 600 lineas) y estas están en el mismo orden.
:¬¬ Gracias.

PD. Te parece si te envío los archivos de preguntas y respuestas para q puedas ver su estructura?

Eleкtro

#278
Cita de: MauriH en 24 Septiembre 2013, 16:35 PM
no pude lograrlo escribiendo codigo

Es facil, simula una variable Booleana para usarla como Flag:

Código (dos) [Seleccionar]
@Echo OFF & Setlocal EnableDelayedExpansion



Set "Questions=C:\Preguntas.txt"
Set "Answers=C:\Respuestas.txt"

Set "Prefix=nothing"
Set "Suffix=nothing"

Set "IsMatch=False" & REM No tocar esta variable!



Del /Q "%TEMP%\Questions.tmp" 2>NUL

FOR /F "Usebackq Delims=" %%R IN ("%Answers%") DO (

FOR /F "Usebackq Delims=" %%P IN ("%Questions%") DO (

(If /I "%%R" EQU "%%P" (
If /I "!IsMatch!" NEQ "True" (
Echo %PREFIX%%%P%SUFFIX%
) Else (
Echo %%P
)
Set "IsMatch=True"
) Else (
Echo %%P
))>>"%TEMP%\Questions.tmp"

) & REM # End For "%Questions%"

Set "IsMatch=False"
Move /Y "%TEMP%\Questions.tmp" "%Questions%" 1>NUL 2>&1 || (Echo ERROR al reemplazar archivo & Goto :OnError)

) & REM # End For "%Answers%"

:OnError
Pause&Exit


Saludos!








MauriH

#279
@EleKtro H@cker

Siento decirte q aun no me funciona como quisiera, me sigue marcando varias opciones como correctas en la misma pregunta, y algunas no me marco nada. Pienso q de pronto lo q esta haciendo es buscar la primera linea, encuentra la coincidencia y luego busca la segunda linea a partir de la primera coincidencia marcada, pero la tercera q deberia buscar a partir de la 2 coincidencia marcada sigue buscando a partir de la primera, no sé si me equivoco, pero aun estoy en problemas. Gracias por el interés, pero aún no doy con la solución, espero tu puedas.  :-[

Modifico:

Bueno acabo de revisar minuciosamente lo q hizo el codigo y me di cuenta de dos cosas, hizo lo q te dije en mi parrafo anterior, y la otra es q al parecer esto del Batch da para mucho, así q tuve una nueva idea para q eso no vuelva suceder, idea q por supuesto no podré lograr sin tu ayuda. Así q aqui te adjunto una extracto de ambos archivos tal y como son:



Preguntas.txt


#En la evaluación preoperatoria de un paciente ASA I de 30 años es indispensable:
• Solicitar un ECG de rutina
• Rx de tórax
• Realizar un examen clínico completo
• Solicitar un coagulograma de rutina
• Todas
#La detención súbita y completa de circulación se expresa:
• Midriasis a los 60 seg.
• Por pCO2 en sangre arterial baja
• Por acumulo de acido láctico en los tejidos periféricos
• Respiración boqueante o apnea
• Todas
#El masaje cardiaco externo puede producir un cierto grado de flujo sistémico y pulmonar por:
• Acción de la bomba cardiaca y torácica durante las compresiones
• Diferencias de presión entre la aurícula y el ventrículo
• Diferencias de presión aortico pulmonares
• Mecanismo valvular aortico
• Ninguna
#Cual es la conducta terapéutica en UTI en el síndrome de Stokes Adams:
• Atropina
• Beta adrenergicos
• Inserción de marcapaso definitivo
• Isoproterenol
• Todas
#La toxicidad de los anestésicos locales por lo general se debe:
• Uso de concentraciones altas de anestésicos
• Absorción rapida en un sitio vascularizado
• Inyección intravascular inadvertida
• Al uso de dosis excesivas
• Todas


Respuestas.txt


• Realizar un examen clínico completo
• Todas
• Acción de la bomba cardiaca y torácica durante las compresiones
• Isoproterenol
• Todas


Mi Archivo de salida fue:


#En la evaluación preoperatoria de un paciente ASA I de 30 años es indispensable:
• Solicitar un ECG de rutina
• Rx de tórax
nothing• Realizar un examen clínico completonothing
• Solicitar un coagulograma de rutina
nothing• Todasnothing
#La detención súbita y completa de circulación se expresa:
• Midriasis a los 60 seg.
• Por pCO2 en sangre arterial baja
• Por acumulo de acido láctico en los tejidos periféricos
• Respiración boqueante o apnea
nothing• Todasnothing
#El masaje cardiaco externo puede producir un cierto grado de flujo sistémico y pulmonar por:
nothing• Acción de la bomba cardiaca y torácica durante las compresionesnothing
• Diferencias de presión entre la aurícula y el ventrículo
• Diferencias de presión aortico pulmonares
• Mecanismo valvular aortico
• Ninguna
#Cual es la conducta terapéutica en UTI en el síndrome de Stokes Adams:
• Atropina
• Beta adrenergicos
• Inserción de marcapaso definitivo
nothing• Isoproterenolnothing
• Todas
#La toxicidad de los anestésicos locales por lo general se debe:
• Uso de concentraciones altas de anestésicos
• Absorción rapida en un sitio vascularizado
• Inyección intravascular inadvertida
• Al uso de dosis excesivas
• Todas


Archivo Final requerido:


#En la evaluación preoperatoria de un paciente ASA I de 30 años es indispensable:
• Solicitar un ECG de rutina
• Rx de tórax
nothing• Realizar un examen clínico completonothing
• Solicitar un coagulograma de rutina
• Todas
#La detención súbita y completa de circulación se expresa:
• Midriasis a los 60 seg.
• Por pCO2 en sangre arterial baja
• Por acumulo de acido láctico en los tejidos periféricos
• Respiración boqueante o apnea
nothing• Todasnothing
#El masaje cardiaco externo puede producir un cierto grado de flujo sistémico y pulmonar por:
nothing• Acción de la bomba cardiaca y torácica durante las compresionesnothing
• Diferencias de presión entre la aurícula y el ventrículo
• Diferencias de presión aortico pulmonares
• Mecanismo valvular aortico
• Ninguna
#Cual es la conducta terapéutica en UTI en el síndrome de Stokes Adams:
• Atropina
• Beta adrenergicos
• Inserción de marcapaso definitivo
nothing• Isoproterenolnothing
• Todas
#La toxicidad de los anestésicos locales por lo general se debe:
• Uso de concentraciones altas de anestésicos
• Absorción rapida en un sitio vascularizado
• Inyección intravascular inadvertida
• Al uso de dosis excesivas
nothing• Todasnothing

Mi idea es la siguiente:
Como ves todas las opciones comienzan con una Viñeta (•), las preguntas en cambio tienen el simbolo numeral (#). Entonces quisiera poder hacer q el batch busque la primera linea de Respuestas.txt en Preguntas.txt, desde la primera linea q comience con #, y marque la primera coincidencia, luego q busque la segunda linea de Respuestas.txt desde la 2° linea q comience con # en preguntas.txt, y luego la tercera y así sucesivamente. Gracias por toda la ayuda, disculpa las molestias, te estaré eternamente agradecido.

Saludos.