Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   [AYUDA] Backup de SMS a Base de Datos (https://www.clubdelphi.com/foros/showthread.php?t=45396)

hmoner 02-07-2007 03:35:22

[AYUDA] Backup de SMS a Base de Datos
 
Hola Amigos.

Tengo una lista de archivos txt con un formato especifico, que han sido grabados por una aplicacion que hace backup de SMSs en telefonos con Windows Mobile

Como podran ver a continuacion en el siguiente link, he realizado un simple programita, que toma esa lista de archivos txt, y con solo hacer doble click muestra el contenido del archivo en un TMemo

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

Lo que quiero hacer en realidad es

1- Crear una tabla en una base de datos con los siguientes campos:
remitente (nombre o numero de celular), destinatario (nombre o numero de celular), fecha y mensaje.

2- Procesar estos archivos de texto especiales, e insertar en la tabla cada mensaje (registro de la tabla) que se vaya procesando

3- Mostrar los mensajes con la aplicacion, pero ejecutando consultas por fechas, horarios, etc. (realizando SQL)

Los puntos 1 y 3 son faciles y se como hacerlos

El que me tiene MUY intrigado es el punto 2

Alguien me puede ayudar a procesar esos archivos de texto con ese formato especial ? Lo que no se es como leer y procesar ese formato, y encima como veran en la captura, a veces el mensaje sale cortado con un caracter especial (que sale como un cuadradito vacio). Como debere tratar estos caracteres ?

Desde ya muchisimas gracias por la ayuda, y perdon por el mensaje tan largo

Saludos,

hmoner 03-07-2007 14:54:18

HELP !!
Alguien tiene alguna idea de como procesar este archivo?

marcoszorrilla 03-07-2007 15:06:50

Si ya lo cargas en un memo la cosa está fácil:

1.[Sender]:XXXXX[Recieved]
00123456789

Campo remitente de la Tabla:
Código Delphi [-]
Ancho_hasta_Recieved:=9 //hay que hallarlo
Remitente:Copy(Cadena,10, Ancho_Hasta_Recieved);

La fecha y la hora habría que estudiar como capturarla ya que según veo no utiliza 2 dígitos para el día y mes.

Ver si lleva alguna marca de inicio de texto del mensaje o simplemente es donde acabe la hora:

Bueno es una idea ya nos dirás como lo vas resolviendo.

Un Saludo.

marcoszorrilla 03-07-2007 15:14:47

Añado que en cuanto a las cadenas con la fecha y hora sería posible una vez delimitadas tratarlas con StrToDateTime.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
x:TdateTime;
begin
x:=StrToDateTime(Edit1.Text);
Edit2.Text:=DateTimeToStr(x);
end;

Un Saludol.

hmoner 10-07-2007 22:52:02

Hola marcos
Gracias por la ayuda, y permiteme hacer algunas preguntas del caso

En la primer linea de los archivos de mensajes recibidos tengo esto por ejemplo:
[Sender]: Ernesto Perez Garcia Gomez [Received]: 2007-3-2 13:58:55

Entiendo lo de tomar con la funcion copy hasta el indice donde comienza el nombre, pero como hago para extraer hasta que comience [R... ? Osea, no todos los nombres tienen la misma longitud... Supongo que como dice tu primer respuesta, debere hallar la longitud del nombre primero... pero no se como

Hasta ahora tengo este codigo
Código:

...
    if ( pos('[Receiver]',buffer) > 0 ) then
    begin
      listbox1.Items.Add( copy(buffer,12,13) );
...

Alli uso 13, pero no siempre sera esa longitud

Y otra pregunta, parecida a la anterior...
Cuando lea el mensaje, debere hacer lo mismo para saber si llegue al final del mensaje, no ?

Resolviendo esto podre solucionar todo para los archivos de mensajes enviados

Muchisimas gracias

marcoszorrilla 10-07-2007 23:23:56

Para empezar a hacer la prueba, crea un formulario con 2 Tedit, en el primero escribe el texto que muestras en tu pregunta (corrige Reciever por Recieved) y el segundo déjalo tal cual.

Ahora con este código verás como capturamos el nombre en cuestión.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
Var
nIniSender:Integer;
nFinSender:Integer;
begin
nIniSender:=10;
nFinSender:= pos('[Received]',Edit1.Text);
nFinSender:= nFinSender - nIniSender;

  if nFinSender > 0 then
  Edit2.Text:=Copy(Edit1.Text,nIniSender,nFinSender);
end;

Un Saludo.

hmoner 12-07-2007 01:57:12

Funcionó perfecto Marcos
supongo que
nIniSender:=10;
corresponde a la cantidad de caracteres desde el inicio que debo tomar para que empiece a obtener el nombre, no ?

Para la fecha, hora, y mensaje, debo hacer lo mismo ?

Gracias

marcoszorrilla 12-07-2007 06:58:01

Si eso es, dada la estructura el comienzo es el caracter 10, por eso lo incluyo como fijo.

Un Saludo.

gabrielkc 12-07-2007 07:02:28

No sabes hacer autómatas?,

eso es un trabajo para un Autómata, te saldría facilísimo y mucho mas adaptable


La franja horaria es GMT +2. Ahora son las 04:43:16.

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