Base de datos desde archivo de texto.

Iniciado por calvin2sr, 19 Marzo 2013, 13:38 PM

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

calvin2sr

Hola:
A ver si me podeis ayudar. Tengo un archivo de texto con varias lineas, todas del mismo tipo. palabra0 palabra1 palabra2 palabra3. Me gustaria coger la primera palabra del archivo de texto y meterla en un campo de una base de datos mysql, meter la palabra2 en otro campo, etc y asi con cada linea del archivo de texto que seria una entrada de la base de datos. Me podeis orientar de por donde podria empezar? es que estoy muy verde en este tema.
Gracias.

Danyfirex

Debes especificar con que lo quieres hacer batch,Autoit,vbscritps,python,ruby,perl.  :silbar:

Eleкtro

Bueno, no somos adivinos, ¿Windows o Linux?

No manejo las bases de datos MySQL así que desconozco como hacerlo, pero podría ser algo así:

AddData.bat
Código (dos) [Seleccionar]
@Echo OFF
For /F "Usebackq Tokens=*" %%X in ("Archivo.txt") Do (... "campo1" "%%X")



Quizás esto te sirva:

Google + "commandline add entry to mysql"

CitarTo insert data into MySQL table you would need to use SQL INSERT INTO command. You can insert data into MySQL table by using mysql> prompt or by using any script like PHP.
Syntax:

Here is generic SQL syntax of INSERT INTO command to insert data into MySQL table:

INSERT INTO table_name ( field1, field2,...fieldN )

www.tutorialspoint.com/mysql/mysql-insert-query.htm

http://www.ntchosting.com/mysql/insert-data-into-table.html

http://www.iis-aid.com/articles/how_to_guides/creating_mysql_database_via_the_command_line

http://dev.mysql.com/doc/refman/5.0/en/








calvin2sr

El script seria ejecutado en windows, aunque pensandolo bien, seguro que hay otra manera mas facil de hacerlo. A lo mejor con funciones tipo grep y demas se puede sacar algo. El objetivo principal del script seria ir cogiendo de ese archivo de texto distintos valores y mostrar por pantalla solo los que me interese. Ejemplo:
El archivo es de este tipo:

fecha0 tipo0 variable-a0 variable-b0
fecha1 tipo1 variable-a1 variable-b2

Ese archivo se va actualizando cada cierto tiempo.

Querria algo para sacar el maximo de la variable-a0 en un mismo dia. Y tambien que cuando esa variable-a0 se acerque a un determinado valor que yo decida, me envie un email.

Me podriais dar ideas de cual seria la forma mas facil de hacerlo?
Muchas gracias.

jhonatanAsm

creo que con un:
insert into load data local infile
de mysql se puede realizar.

salu2.
mi primer lenguaje fue ensamblador, tengo 60 años, y no creo que haya sido un error.

- La mayor complejidad de todas es hacer complejo algo que no lo es.

- El inteligente no es aquel que lo sabe todo sino aquel que sabe utilizar lo poco que sabe.

Eleкtro

¿Entonces lo de añadir datos a la base desde la consola ya no quieres?

A ver si no he entendido mal:
Ahora sólo sería obtener el valor numérico de la tercera palabra de la primera línea, o sería de cada tercera palabra de cada línea? y en fín si el número es mayor de "X", que te mande un email.

La manera más sencilla desde Windows es Batch, para lo del email puedes usar esta utilidad Commandline (no requiere autentificación de ningún tipo): https://www.zeta-uploader.com/es

Esto comprueba el tercer token de cada línea, si es mayor que "X" envía un email.
He usado como delimitador el caracter del espacio, quizás debas modificarlo a tus necesidades...



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

Set "Max=100"
Set "Interval=5"

:Loop
Echo [%TIME:~0,-3%] Checkando...
For /F "Usebackq Tokens=1-3* Delims= " %%A in ("Archivo.txt") Do (
If %%C GTR %MAX% (
Echo [%TIME:~0,-3%] Variable: %%C es mayor que %MAX%, enviando email...
Zulc.exe -receivers="tuemail@hot.com" -remarks="Test remark" -subject="Test subject")
)
)
(Ping -n %INTERVAL% Localhost >NUL) & (GOTO :LOOP)










calvin2sr

Cita de: EleKtro H@cker en 19 Marzo 2013, 15:57 PM
¿Entonces lo de añadir datos a la base desde la consola ya no quieres?

A ver si no he entendido mal:
Ahora sólo sería obtener el valor numérico de la tercera palabra de la primera línea, o sería de cada tercera palabra de cada línea? y en fín si el número es mayor de "X", que te mande un email.

La manera más sencilla desde Windows es Batch, para lo del email puedes usar esta utilidad Commandline (no requiere autentificación de ningún tipo): https://www.zeta-uploader.com/es

Esto comprueba el tercer token de cada línea, si es mayor que "X" envía un email.
He usado como delimitador el caracter del espacio, quizás debas modificarlo a tus necesidades...



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

Set "Max=100"
Set "Interval=5"

:Loop
Echo [%TIME:~0,-3%] Checkando...
For /F "Usebackq Tokens=1-3* Delims= " %%A in ("Archivo.txt") Do (
If %%C GTR %MAX% (
Echo [%TIME:~0,-3%] Variable: %%C es mayor que %MAX%, enviando email...
Zulc.exe -receivers="tuemail@hot.com" -remarks="Test remark" -subject="Test subject")
)
)
(Ping -n %INTERVAL% Localhost >NUL) & (GOTO :LOOP)



El problema es que el archivo de texto es un log, el cual se va actualizando cada cierto tiempo añadiendo una linea de cada vez que se actualiza al final del archivo de texto. Entonces con ese programa mirara todas las lineas, se supone que yo quiero que compruebe el valor si es mayor de uno dado cada vez que se actualice para ver si en la linea actualizada el valor es mayor al que yo le pase. No se si me entendeis. Me parece que voy hacer 2 programas separados, uno para el email y otro para las otras instrucciones con los valores. Yo creia que metiendo los datos del log dentro de la base de datos, al ser mysql esta ya tiene todas las instrucciones hechas y tu puedes operar con ella con normalidad. Si quieres saber todas las entradas en tal fecha pues ya tienes una instruccion en mysql, que quieres saber cual fue el valor maximo de una variable en este mes, pues tienes otra instruccion diferente. El caso es que meter todo el archivo a la base de datos se puede hacer algo complicado no? por eso os dije lo de que a lo mejor habia otra forma de implementar lo que yo quiero obtener de esos datos.
Muchas gracias por las respuestas.

Eleкtro

#7
No hay problema...

Este script sólamente comprueba el valor de la última línea.



PD: Las explicaciones están en el código.

@Echo OFF
SETLOCAL ENABLEDELAYEDEXPANSION

Set /A "Max=100"
Set /A "Interval=10"
Set /A "LastFileSize=0"
Set /A "CurrentFileSize=0"

Set "File=C:\Users\Administrador\Desktop\1.txt"

:Loop

REM Comprueba el tamaño actual del archivo LOG
For %%F in ("%File%") Do (Set /A "CurrentFileSize=%%~zF")

REM Si el tamaño actual no es igual al ultimo tamaño registrado [Es decir, si el LOG se ha actualizado...]
If %CurrentFileSize% NEQ %LastFileSize% (
Set /A "LastFileSize=%CurrentFileSize%"

Echo [%TIME:~0,-3%] Comprobando actualización del LOG...
For /F "Usebackq Tokens=1-3* Delims= " %%A in ("%File%") Do (Set /A "Value=%%C")

REM Si el valor es mayor que X...
If !Value! GTR %MAX% (
Echo [%TIME:~0,-3%] Valor: "!Value!" es mayor que "%MAX%".
Echo [%TIME:~0,-3%] Enviando e-mail...
rem Zulc.exe -receivers="tuemail@hot.com" -remarks="Test remark" -subject="Test subject")
) ELSE (
Echo [%TIME:~0,-3%] Valor: "!Value!" Todo Correcto.
)

) ELSE (
REM De lo contrario...
Echo [%TIME:~0,-3%] Nada que comprobar.
)
(Ping -n %INTERVAL% Localhost >NUL) & (GOTO :LOOP)








calvin2sr

Cita de: EleKtro H@cker en 19 Marzo 2013, 18:06 PM
No hay problema...

Este script sólamente comprueba el valor de la última línea.



PD: Las explicaciones están en el código.

@Echo OFF
SETLOCAL ENABLEDELAYEDEXPANSION

Set /A "Max=100"
Set /A "Interval=10"
Set /A "LastFileSize=0"
Set /A "CurrentFileSize=0"

Set "File=C:\Users\Administrador\Desktop\1.txt"

:Loop

REM Comprueba el tamaño actual del archivo LOG
For %%F in ("%File%") Do (Set /A "CurrentFileSize=%%~zF")

REM Si el tamaño actual no es igual al ultimo tamaño registrado [Es decir, si el LOG se ha actualizado...]
If %CurrentFileSize% NEQ %LastFileSize% (
Set /A "LastFileSize=%CurrentFileSize%"

Echo [%TIME:~0,-3%] Comprobando actualización del LOG...
For /F "Usebackq Tokens=1-3* Delims= " %%A in ("%File%") Do (Set /A "Value=%%C")

REM Si el valor es mayor que X...
If !Value! GTR %MAX% (
Echo [%TIME:~0,-3%] Valor: "!Value!" es mayor que "%MAX%".
Echo [%TIME:~0,-3%] Enviando e-mail...
rem Zulc.exe -receivers="tuemail@hot.com" -remarks="Test remark" -subject="Test subject")
) ELSE (
Echo [%TIME:~0,-3%] Valor: "!Value!" Todo Correcto.
)

) ELSE (
REM De lo contrario...
Echo [%TIME:~0,-3%] Nada que comprobar.
)
(Ping -n %INTERVAL% Localhost >NUL) & (GOTO :LOOP)

Muchas gracias, voy a probarlo y luego te digo si se asemeja a lo que quiero. Y para lo otro de hacer operaciones sobre esos datos cogidos del log se te ocurra alguna idea? la de la base de datos creo que es buena pero no se si da mucho choyo ir cogiendo dato por dato e ir metiendolos en campos de mi base mysql.
Un saludo y de nuevo muchas gracias.

calvin2sr

He estado intentando probar tu programa pero estoy algo verte en esto de los batch. No se supone que tengo que meter el codigo en un archivo.bat y ejecutar desde un cmd poniendo el archivo tal cual? por ejemplo. Estoy dentro del directorio y hago un programa.bat
Estoy haciendolo bien? es que si lo hago asi me crea un bucle infinito diciendo que le falta un operando.
Muchas gracias por contestar.