Go Down

Topic: [SOLUCIONADO]Comparar un variable con un código guardado en la tarjeta SD (Read 13667 times) previous topic - next topic

noter

Si pero esa es tu necesidad y no lo tomes a mal.
Hablamos en líneas generales.
Yo hablo con Noter sobre un proyecto de otra envergadura supongo muchos mas registros pero no se cual sería el tamaño de los resgistros que justifica hacer un ordenamiento.
Entiendo la el punto de cruce estaría en hacer un busqueda 1 a 1, y tomar el tiempo hasta encontrarlo, y claro como análisis de peor caso, buscando 1 a 1, y resulta que el que busco esta al final. Entonces consultar cada registro me lleva un tiempo t y llegar al registro N me llevará Nt.

Por el otro lado tenerlo indexado y ordenados implica que la busqueda no llevara mas de algunos pocos registros pero el ordenamiento insume tiempo???
Hola.
Mira; has entrado en un tema que me extrañaba que nadie se hubiera intentado o necesitado pelear. Si sólo vamos a tomar la velocidad de búsqueda, entonces lo mejor va a ser siempre una búsqueda indexada; y si vamos a trabajar sobre muchos registros, entonces va a ser indispensable.
El quid de la cuestión es si es necesario o no, pues el código se va a complicar, y vamos a necesitar que nuestros datos sean de longitud constante para poder saltar directamente a un número de registro aleatorio, con lo que un pequeño error en la longitud de un registro nos puede corromper todo el archivo (poco recomendable modificar el archivo en un editor de texto, por ejemplo). Luego hay que tener en cuenta que, si bien las búsquedas se van a acelerar exponencialmente, el agregar un registro, por ejemplo, significa que hay que insertarlo en su orden correcto, lo que supone que deberemos reescribir todo el archivo desde la posición de inserción en adelante. Esto, para el ejemplo de este tema, no debiera ser muy costoso, pues cada registro consta de un solo dato (básicamente el propio archivo es un índice); pero imagina que cada registro tiene 500 bytes de longitud. Si necesitamos mover 1000 registros tras una inserción para mantenerlos ordenados, habría que mover ya medio mega de información. En ese caso los datos brutos se guardan como van llegando en el archivo, y en otro archivo índice almacenamos en orden sólo cada índice y puntero al archivo de datos, pero hay que tener en cuenta no olvidarnos de actualizar ese archivo cuando corresponda (tras agregar, modificar, eliminar...).
En fin, surbyte; no me quiero enrollar, y menos en este post que ya está solucionado; pero es un tema apasionante. Si quieres iniciar un proyecto por ese camino, abre un tema nuevo y podemos desarrollarlo para intentar tapar el hueco entre un archivo de búsqueda "tracicional" y la conexión a una base de datos remota.

surbyte

Bien, Noter. A mi el tema me apasiona y la verdad no se porque. Asi que abriré el proyecto a ver como lo desarrollamos entre los que se interesen.

maxid

llego tarde pero tengo varias ideas.

Primero encontré que la libreria SD.h hereda de Stream por lo que tiene un metodo Find, probé en un ejemplo y compila, no tengo una sd para probar.


Con respecto al tamaño, de claves lo vengo pensando hace rato porque tengo un proyecto que lo usa y lo tengo en espera.
les comentos algunas opciones
  • Si lo accedes de una pc ya lo envias ordenado en el archivo.
  • Un metodo que usaba novell, era calcular un hash de la posicion aproximada, desde ahi para abajo seguia buscando secuencialmente, esto permite una busqueda muy rapida
  • Otra es tenerlos ordenados e ir comparando el primer caracter solo, si no coincide pasar a la siguiente linea, si coincide seguir con el segundo caracter. Mejora el rendimiento ya que no hay que leer la clave completa.
  • Tambien se puede armar una cache de claves mas usada y primero leer ahi despues en el resto, que puede estar en un array en la eprom o en ram misma
El que pregunta aprende, el que responde aprende a responder.

noter

Bueno.

Creo que es momento de dejar este hilo para no ensuciarlo (ya está solucionado) y abrir un nuevo tema en proyectos.

maxid

se puede hacer una libreria de busqueda y guardado de datos en archivos en una SD.
El que pregunta aprende, el que responde aprende a responder.

julio625

HOLA AMIGOS¡¡¡

tengo una inquietud que espero ustedes me puedan orientar, es básicamente lo mismo que se a venido desarrollando solo que en mi caso la lectura de los tag la estoy haciendo en hex y no en decimal y ahi es donde viene mi pregunta?

como podría comparar las lecturas de mis tag con las correspondientes series ya guardas en el archivo en la sd estando en formato hex.

mis tag leidos solo tiene este formato CBD9A45B, yo esta lectura la guardo en un string como puedo compara lo que esta en la sd con esta variable tipo string

gracias por su ayuda
 

Lucario448

HOLA AMIGOS¡¡¡

tengo una inquietud que espero ustedes me puedan orientar, es básicamente lo mismo que se a venido desarrollando solo que en mi caso la lectura de los tag la estoy haciendo en hex y no en decimal y ahi es donde viene mi pregunta?

como podría comparar las lecturas de mis tag con las correspondientes series ya guardas en el archivo en la sd estando en formato hex.

mis tag leidos solo tiene este formato CBD9A45B, yo esta lectura la guardo en un string como puedo compara lo que esta en la sd con esta variable tipo string

gracias por su ayuda
Podrías, por favor, crear un hilo nuevo sobre tu pregunta? Gracias...

Go Up