Importar Gran Cantidad De Valores


Ir a la página 1, 2  Siguiente

Objetivo: Importar Gran Cantidad De Valores
Tengo unas tablas con muchos números relacionados entre ellos por filas y columnas. Los debo insertar como constantes en una serie de fórmulas, supongo que no es difícil pero no sé como especificar qué numero tiene que usar en cada momento, lo suyo seria decir columna tal y fila cual. Esa tabla la tengo en un archivo .pdf, del cual puedo copiar los valores, pero me gustaría poder importar la tabla completa para tenerla en el programa. Hay alguna forma de hacerlo rápidamente?

Muchas gracias de antemano.

Perfil MP  
Objetivo: Re: Importar Gran Cantidad De Valores
Hola, Oleguer.

Lo primero que yo haria seria pasar esa información de pdf a una archivo de texto (si te deja seleccionar los datos el pdf, lo copias y luego abres el gedit y lo pegas...), de esa forma es muy facil tratar la información... (a lo mejor se puede tratar directamente en un archivo .pdf, pero yo no se como...)

Luego se trataria de leer ese archivo .txt, linea a linea, y con la orden split, vas "partiendo" las lineas que lee en las distintas columnas, asignandole a una matriz...

DIM lineas_del_fichero AS String[]
Dim columnas as string[]
Dim matriz as float[100,10] ' una matriz de 100 filas por 10 columnas, por ejemplo...
DIM a AS Integer
DIM b AS Integer

Dialog.Title = “Seleccione un archivo”
IF NOT Dialog.OpenFile() THEN
lineas_del_fichero = Split(File.LOAD(Dialog.Path), "\n")

for a=0 to lineas_del_fichero.count-1
columnas=split(lineas_del_fichero[a]," ") ' por ejemplo si los numeros de las columnas se separan por un espacio (Truco: con gedit es muy facil buscar y reemplazar varios espacios y sustituirlo por uno solo ;) )
for b=0 to columnas.count-1
matriz[a,b]=val(columnas[b]) ' la matriz[a,b], continea fila y columna el numero (con val(), convertimos el texto en numero.....
next
next


Asi tendrias ya una "matriz", en la que podrias leer la información, para llamarla a traves de las formulas...

Puedes ver un ejemplo de lectura/escritura de fichero de texto en Enlace

Sin saber como es el .pdf, ni como son las formulas que usan los datos, no te puedo ayudar mas.

Saludos

última edición por jsbsan el Lunes, 21 May 2012, 19:03; editado 1 vez
Objetivo: Re: Importar Gran Cantidad De Valores
Muchas gracias por contestar tan rápidamente, jsbsan, agradezco mucho tu trabajo, y aprovecho para decirte que me baje tu documento sobre componentes en gambas2, una gran aportación, cuando tenga tiempo me lo leeré.

El proyecto que hago ahora es un trabajo que hago para el instituto, se trata de un seguidor solar, una máquina con dos motores hecha para enfocar placas solares con un ángulo de 90 grados con el sol. Si te interesa el trabajo tenemos una web dónde vamos subiendo los avances, si quieres deja algún comentario de la impresión que te da o diferentes ideas que tengas: http://www.seguintalsol.site11.com/

Si te interesa ver la tabla o alguna formula esta en este documento, (página 29): enlace

El programa que estoy haciendo haré ahora en gambas2 es el que dirá los grados de inclinación que debería tener la placa solar para aprovechar al máximo el sol.

Estoy muy agradecido de todas tus aportaciones. Muchas gracias.

Perfil MP  
Objetivo: Re: Importar Gran Cantidad De Valores
Otro problema que me he encontrado es que al copiar los valores de la tabla del pdf, se copia al gedit como una lista, alguien sabe como copiarlo como una tabla para así poder hacer el split del contenido por espacios como decía jsbsan?
Con una lista es un lío porque hay demasiados valores y desordenados.

Gracias por la colaboración, no dudaré en citar a los que me ayuden cómo jsbsan a los agradecimientos del trabajo.

Perfil MP  
Objetivo: Re: Importar Gran Cantidad De Valores
Oleguer:

Vale, y he visto tu problema, asi es mas o menos la captura que me sale en el gedit:

capturandodatosdeunatab

Ademas tambien da un problema, que segun selecciones no coge bien los valores (eso debe de ser por como esta hecho el pdf...)

He probado con otro programa, el pdfedit, lo puedes instalar asi:
$ sudo apt-get install pdfedit
El cual tiene una opción de guardar el fichero .pdf como .txt, y la conversion lo hace bien...

pdfeditorconversionatex

Como el archivo es muy grande, puedes copiar cada tabla que te interese, a un archivo nuevo.
Hacer que tu programa lea cada archivo de tabla y (usando el codigo que te paso, lo tendras que adaptar a cada tabla) asignarlo a cada variable o matriz que use en las formulas

Si te surgen dudas, pues lo comentas...

Saludos

Nota:
He visto que tu proyecto trata sobre montar un dispositivo que mantenga una placa solar siempre enfocada al sol.
En youtube hay muchos videos que explican como hacerlo con una placa arduino y varias resistencias LDR (resistencias que varian su valor segun la luz que les de). Son muy interesantes y tambien te podrian valer para tu proyecto
http://www.neoteo.com/proyecto-girasol-orientando-un-panel-solar

Objetivo: Re: Importar Gran Cantidad De Valores
Gracias por la aportación me he estado mirando la pagina esa y es realmente interesante.
Seguramente tendré más dudas sobre la parte de programación, porque aún estoy empezando, no sé demasiado, y el proyecto es difícil.


Muchas gracias.

Perfil MP  
Objetivo: Re: Importar Gran Cantidad De Valores
Pues nada, hay mucha informacion en internet de proyectos similares, mirate tambien este video... esta muy chulo...

Link

http://code.google.com/p/arduino-solar-tracking/downloads/list
Con un arduino, 3 resistencias ldr, un motor, y 2 cd + 4 placas , ¡¡ se lo monta !!!

Y este tambien esta muy bien:

Link

Se basa en la comparación de 4 resistencias sensibles a la luz (LDRs) de 1K colocadas en cruz (2 en el eje X y 2 en el eje Y). Dependiendo de sus valores de resistencia tendrán una caída de tensión u otra. Esta diferencia es comparada y según que resistencia tiene más o menos caída de tensión (según la luz proyectada sobre ella), se le mandará que giren los motores en un sentido u otro por medio del integrado L293B que puede controlar hasta 2 motores de CC, dando una corriente de salida por canal de 1 A.



Hay otra variante a tu proyecto, que creo que es más complica que la tuya. Es un mecanismo el cual hace que un espejo siempre haga incidir la luz reflejada del sol sobre al mismo punto.

http://www.cerebralmeltdown.com/heliostatprojects/

Puedes ver una aplicación real en esta foto:
psa

Objetivo: Re: Importar Gran Cantidad De Valores
Gracias por el interés! He visto estos vídeos y son realmente muy interesantes, al principio también me decanté por colocar sensores de luz y así guiar la placa, pero al final decidimos hacer-lo un poco más serio y hacerle seguir el sol mediante los algoritmos de posición solar, que estan explicados en el pdf que te enseñé. Se ve que en las centrales o huertos solares se hace así... Y aquí entra el tema de gambas, la idea es, mediante esas ecuaciones, dar valores de cuanto tiempo tiene que estar el motor girando para obtener la posición óptima de la placa durante un año. Esos valores los introduciré a un PLC, que será el que se encargará de cortar y cerrar los circuitos conectados a los motores para que la placa se oriente.

Muchas gracias, si estas interesado ya te mandaré una copia del programa cuando lo termine.

Perfil MP  
Objetivo: Re: Importar Gran Cantidad De Valores
He probado el código apañándolo un poco para que me busque el solo el fichero y yo no tenga que seleccionarlo , así:

PUBLIC SUB Button3_Click()

DIM lineas_del_fichero AS String[]
DIM columnas AS string[]
DIM matriz AS Float[140, 4] ' una matriz de 100 filas por 10 columnas, por ejemplo...
DIM a AS Integer
DIM b AS Integer

'Dialog.Title = “Seleccione un archivo”
lineas_del_fichero = Split(File.LOAD(user.Home & "/Taula L's"), "\n")

FOR a = 0 TO lineas_del_fichero.count - 1
columnas = Split(lineas_del_fichero[a], " ") ' por ejemplo si los numeros de las columnas se separan por un espacio (Truco: con gedit es muy facil buscar y reemplazar varios espacios y sustituirlo por uno solo ;) )
FOR b = 0 TO columnas.count - 1
matriz[a, b] = Val(columnas[b]) 'la matriz[a,b], continea fila y columna el numero (con val(), convertimos el texto en numero.....
NEXT
NEXT

TextArea1.Text = matriz[2, 3]
END


pero me da un error en la parte :
FOR b = 0 TO columnas.count - 1
matriz[a, b] = Val(columnas[b]) 'la matriz[a,b], continea fila y columna el numero (con val(), convertimos el texto en numero.....
NEXT


Dice: wanted float, got Null instead

Alguna idea?

Perfil MP  
Objetivo: Re: Importar Gran Cantidad De Valores
Oleguer:

Pues tendria que ver que informacion contiene el archivo user.Home & "/Taula L's" ,(por cierto que tiene un nombre muy raro... ,¿no le has puesto la extension .txt? ¿lo has creado con el pdfedit?)

Pueden ser dos cosas:
1) Por la pinta que tiene el error, puede faltar celdas, porque intenta seleccionar una Val(columnas[b]) ,
no la encuentra, dando el valor NULL , ya que esperaba un numero float y se encuentra con nada...

2) Tambien puede ser que el numero este con "," decimal, en vez de "." decimal... si es eso , abre el fichero con gedit, y reemplaza la coma por el punto, y vuelve a ejecutar el programa. (tambien se puede hacer una rutina en gambas que antes de convertir a numero con Val, revise el dato que reciba y convierta la coma por el punto decimal..se puede hacer de las dos formas...)

Por cierto la linea
Citar:

TextArea1.Text = matriz[2, 3]

A lo mejor te puede da error, ya que estas asignando un float a un texto, yo siempre lo convierto a texto el valor numerico, que quiero presentar en un textbox

Citar:

TextArea1.Text = str$(matriz[2, 3])


Saludos

Ir a la página 1, 2  Siguiente

Página 1 de 2


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.713s (PHP: -85% SQL: 185%)
Consultas SQL: 46 - Debug off - GZIP Activado