• Jueves 18 de Abril de 2024, 08:28

Autor Tema:  Procesar Un Archivo De Texto Y Extraer Variables  (Leído 2630 veces)

kabeza

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
    • http://www.beza.com.ar
Procesar Un Archivo De Texto Y Extraer Variables
« en: Martes 10 de Julio de 2007, 23:22 »
0
Hola
Les escribo porque tengo la siguiente duda.
Estoy procesando unos archivos de texto, los cuales tienen un formato muy variable, y de alli debo extraer variables para luego insertarlas en una base de datos

Lo que llevo hecho hasta ahora es lo siguiente

ht_tp://xs217.xs.to/xs217/07271/smsbackup.jpg

Pero necesito extraer de cada archivo de texto lo siguiente

Sender (nombre de quien envia el SMS)
Received (fecha)
Received (hora)
Mensaje

Osea, necesito extraer de cada SMS esas 4 cosas por separado, teniendo en cuenta la longitud variable del nombre de quien envia, que tambien puede ser un numero, no solo nombre, y de la variabilidad del mensaje tambien

Alguien tiene idea de como hacerlo ? Estoy probando con la funcion Copy( pero lleva parametros fijos de longitud

Gracias

-DriverOp-

  • Miembro activo
  • **
  • Mensajes: 81
    • Ver Perfil
Re: Procesar Un Archivo De Texto Y Extraer Variables
« Respuesta #1 en: Miércoles 22 de Agosto de 2007, 01:38 »
0
El truco estaría en encontrar el "token", es decir aquel caracter que te permite saber dónde se separan los datos. Aparentemente el "token" en los mensajes que muestras es el espacio en blanco teniendo en cuenta que el mensaje siempre está al final y los datos que quieres extraer siempre están en la misma posición si cuentas los "tokens".

Entonces lo mejor sería tomar todo el mensaje como si fuera una sola cadena y parsearla según el "token".

Código: Text
  1. function Explode(car: char; s:string): TStrings;
  2. var
  3.   TS: TStrings;
  4.   i: integer;
  5.   a: string;
  6. begin
  7.   TS:=TStringList.Create;
  8.   if Length(s) > 0 then
  9.     begin
  10.      a:='';
  11.      for i:=1 to Length(s) do
  12.        begin
  13.          if s[i] <> car then a:=a+s[i]
  14.          else
  15.           begin
  16.             if a <> '' then TS.Add(a);
  17.            a:='';
  18.           end;
  19.        end;
  20.      if a <> '' then TS.Add(a);
  21.     end;
  22.   Result:=TS;
  23. end;
  24.  

Esta función la llamarías así:

Código: Text
  1. tsMensaje:=Explode(' ',Mensaje);
  2.  
Siendo Mensaje el mensaje SMS y tsMensaje un TString.
El resto es recorrer tsMensaje buscando dónde está la cadena '[SENDER]:' y sabrás que en el próximo item de tsMensaje está el nombre del sender. Luego buscas '[RECEIVED]:' y sabrás que en el próximo item de tsMensaje está la fecha y luego la hora, el resto es el mensaje en sí.

Saludos.