Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Tratamiento de un bloque de datos (https://www.clubdelphi.com/foros/showthread.php?t=83413)

mosco 15-06-2013 18:21:37

Tratamiento de un bloque de datos
 
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:

Código:

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:

Código:

(00080137)00(00120137)41(00160137)41(00200137)41(00240137)40(00280137)42(00320137)42(00360137)40(00400137)41(00440137)41(00480137)40(00520137)41(00560137)41(00600137)39(00640137)39(00680137)39(00720137)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. 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.


La franja horaria es GMT +2. Ahora son las 09:43:12.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi