PDA

Ver la Versión Completa : Tratamiento de un bloque de datos


mosco
15-06-2013, 18:21:37
No tengo experiencia programando y quisiera que me aconsejaran.

Por un lado recibo en Ascii la direccion con 8 bytes de datos, desde la 0000000 hasta la 16000000 y por otro lado (tambien en Ascci) la intensidad de una señal con 2 bytes desde 00 hasta 99 (en la práctica este último valor pasará de 75). Cada direccion de 8 bytes llevará aparejado su valor de señal de 2 bytes. Esta señal de 2 bytes será maxima en un intervalo de direcciones. Tengo que saber la dirección media cuando la señal es maxima.

No se que hacer, si crear un fichero de texto para almacenar estos datos y luego hallar el valor/es maximo/s leyendo de nuevo los datos o hacerlo con algún tipo de base de datos.

¿Que debo hacer?.

Saludos.

Ñuño Martínez
17-06-2013, 22:13:23
Depende de cómo deba funcionar.

El principal problema que le veo al archivo de texto es cómo gestionar el acceso y mantenimiento (eliminar lo que ya no necesitas, acceder desde diferentes partes/hilos/programas, etc), algo que los gestores de bases de datos hacen muy bien. Su ventaja es que necesita menos memoria.

mosco
18-06-2013, 20:46:48
Gracias Ñuño. Ayer he conseguido grabar perfectamente los datos de direccion y fuerza de señal en un fichero de texto. Tienes toda la razón pero me enfrento a algo verdaderamente dificil para mi, no tengo experiencia pero he conseguido que los datos se graben. Ahora que ya tengo la seguridad de que los datos están ahí toca pasarlos a un array dinámico, no se como pero a lo mejor alguien me pueda orientar...

Vean el código que llevo hecho y que ya graba los datos a un archivo de texto:

procedure TForm1.Button10Click(Sender: TObject);
var
a: string;
i, j, ndirecciones: integer;
begin
CrearFichero;
ndirecciones:= 200;
dato:=#105; //Izquierda 1ra vez
FileWrite(FHandle,PChar(dato)^,Length(dato));
for i:=0 to ndirecciones-1 do
begin
Fileread(FHandle,PChar(dato)^,Length(dato));
if dato = '(' then
begin
memo2.Lines[0] := '(' ;
for j:=0 to 8 do
begin
Fileread(FHandle,PChar(dato)^,Length(dato));
memo2.Lines[0] := memo2.Lines[0] + dato;
end;
EnviaDatos('iwconfig wlan0 | grep -i "Link Quality" | cut -f2 -d ''='' | cut -f1 -d"/"');
RecibeDatosB;
memo2.Lines[0] := memo2.Lines[0] + FuerzaSenialB;
a:=memo2.Lines[0];
end;
EscribirDatos (a);
end;
dato:=#112;
FileWrite(FHandle,PChar(dato)^,Length(dato)); //Paramos
end;
Y vean un trozo del archivo de texto que se crea:

(00080137)00(00120137)41(00160137)41(00200137)41(00240137)40(00280137)42(00320137)42(00360137)40(004 00137)41(00440137)41(00480137)40(00520137)41(00560137)41(00600137)39(00640137)39(00680137)39(0072013 7)40...La fuerza de la señal (dos bytes después de los parentesis) no varia casi nada porque no tengo puesto el receptor en la antena todavía para que se mueva con esta.


Saludos.

Ñuño Martínez
01-07-2013, 18:32:47
Échale un vistazo a la clase TStringList (http://www.delphibasics.co.uk/RTL.asp?Name=TStringList). Después, deberías cambiar un poco el formato del archivo, separando usando saltos de línea y comas. Así puedes leer el archivo diréctamente con TStringList.LoadFromFile, saber el número de entradas con TStringList.Count, y usar otras propiedades y métodos para obtener los datos.