Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-05-2014
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 275
Poder: 17
webmasterplc Va por buen camino
Concatenar un numero determinado de palabras con el contenido de un array

Buenas Tengo una función la cual me hace el envio de sms a travez de un gateway, esta funcion lo hace correctamente, para enviar masivos hago la consulta sql y la cargo en un array y luego hay un ciclo recorriendo el array pro a veces son 1000 registros y tarda mucho y a veces me da un error,el gateway me permite concatenar numeros con ; hasta 500 y alli hace una sola petición pos miestras que como lo hago hace 1000 peticiones, como podre hacer para concatenar y eliminar el ultimo numero el punto y coma que le queda al final este es el codigo.
Código Delphi [-]
function enviarSMS (phone,mensaje : string) : string; 
var
  http: TIdHttp;   
  params: TStrings;   
  respuesta: string;  
begin     
  http := TIdHTTP.Create(nil);     
  params := TStringList.Create;      
  begin         
    params.Add('usuario=miusuario');         
    params.Add('clave=AprilApril1979');         
    params.Add('telefonos='+phone);         
    params.Add('texto='+mensaje);         
    respuesta := http.Post('http://www.enlinea-ve.com/webservices/' +           'SendSms', params);     
  end;     
  params.Free;     
  http.Free; 
end;
el array esta creado en la unidad

contactos: array of string;

y llamo la funcion asi
Código Delphi [-]
with datos.sqcontactos do
begin                 
  Close;                 
  SQL.Text:= 'SELECT * FROM vcontactos WHERE vcontactos.miem_clasificacion =: miem_clasificacion';                 
  ParamByName('miem_clasificacion').AsString:=cbbclasificacion.Text;
  Open;                     
  while not Eof do                     
  begin                       
    SetLength(contactos, Length(contactos)+1);                       
    contactos[High(contactos)] := FieldByName('celular').AsString;
    Next;                     
  end;               
end;      
try             
  for i:= Low(contactos) to High(contactos) do             
  begin              
    enviarSMS((Format('%s', [contactos[i]])),mmomensaje.Text);             
  end;           
finally             
  contactos:=nil;             
  lst1.Clear;             
  mmomensaje.Clear;             
  MessageDlg('Proceso de Envío de SMS Concluido Exitosmente', mtCustom, [mbOK], 0);            
end;
Lo Otro es que como ven solo paso el numero al array quisiera ver si es posible pasarle numero y nombre a un array para personalizar el mensaje de texto cuando sea necesario.

Gracias de Antemano

Última edición por Casimiro Notevi fecha: 10-05-2014 a las 16:28:41.
Responder Con Cita
  #2  
Antiguo 10-05-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola webmasterpcl.

Voy a empezar por el final.
Cita:
Lo Otro es que como ven solo paso el numero al array quisiera ver si es posible pasarle numero y nombre a un array para personalizar el mensaje de texto cuando sea necesario.
De este modo podes enviarle los datos que desees mediante un arreglo dinámico:
Código Delphi [-]
...
type
  TRecip = record
    Nombre: string;
    Numero: string;
    //...
  end;

var
  contactos: array of TRecip;

function enviarSMS (Recip: TRecip; Mensaje: string): string;
var
  http: TIdHttp;
  params: TStrings;
  respuesta: string;
begin
  http := TIdHTTP.Create(nil);
  params := TStringList.Create;
  try        
    params.Add('usuario=miusuario');
    params.Add('clave=AprilApril1979');
    params.Add('Nombre=' + Recip.Nombre);
    params.Add('telefonos=' + Recip.Numero);
    params.Add('texto=' + Mensaje);
    Result := http.Post('http://www.enlinea-ve.com/webservices/' + 'SendSms', params);
  finally
    params.Free;     
    http.Free;
  end;
end;

En el uso tendras que modificar:
Código Delphi [-]
  with datos.sqcontactos do
  begin                 
    Close;                 
    SQL.Text:= 'SELECT * FROM vcontactos WHERE vcontactos.miem_clasificacion =: miem_clasificacion';                 
    ParamByName('miem_clasificacion').AsString:=cbbclasificacion.Text;
    Open;                     
    while not Eof do                     
    begin                       
      SetLength(contactos, Length(contactos)+1);  
      //  * Aquí *
      contactos[High(contactos)].Nombre:= FieldByName('Nombre').AsString;                     
      contactos[High(contactos)].Numero:= FieldByName('celular').AsString;
      Next;                     
    end;               
  end;      
  try             
    for i:= Low(contactos) to High(contactos) do             
     enviarSMS(contactos[i], Memo1.Text);   // * Y aquí *    
  finally             
    contactos:=nil;             
    lst1.Clear;             
    mmomensaje.Clear;             
    MessageDlg('Proceso de Envío de SMS Concluido Exitosmente', mtCustom, [mbOK], 0);            
  end;

Cita:
...hasta 500 y alli hace una sola petición pos miestras que como lo hago hace 1000 peticiones, como podre hacer para concatenar y eliminar el ultimo numero el punto y coma que le queda al final este es el codigo.
No termino de comprender esta parte, pero para eliminar el último el último caracter de una cadena:
Código Delphi [-]
  
  SetLength(un_string, Length(un_string) - 1);

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 10-05-2014
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 275
Poder: 17
webmasterplc Va por buen camino
Osea me gustaria contatenar de 500 en 500 separados por (;) pero si le agredo un punto y coma despues de cada numero me va a quedar un (;) al final y me dara error en vez de pasarle un numero a la vez le pasaria 584240000000;584260000000; y los enviaria e en una sola peticion 500 sms , lo que me respondiste esta genial para personalizar el mensaje pero cuando no quiero personalizarlo solo hago una sola peticion de numeros concatenados por ;

Última edición por Casimiro Notevi fecha: 10-05-2014 a las 22:24:34.
Responder Con Cita
  #4  
Antiguo 10-05-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola webmasterplc.
Cita:
Empezado por webmasterplc Ver Mensaje
Osea me gustaria contatenar de 500 en 500 separados por ( pero si le agredo un punto y coma despues de cada numero me va a quedar un ( al final y me dara error en vez de pasarle un numero a la vez le pasaria 584240000000;584260000000; y los enviaria e en una sola peticion 500 sms , lo que me respondiste esta genial para personalizar el mensaje pero cuando no quiero personalizarlo solo hago una sola peticion de numeros concatenados por ;
Entonces es como te sugerí en la última parte del mensaje anterior.

Hace esta simple prueba:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
begin
  s:= '584240000000;584260000000;584280000000;584300000000;';
  SetLength(s,Length(s)-1);
  ShowMessage(s);
end;
La variable s termina con el valor: '584240000000;584260000000;584280000000;584300000000' (sin finalizar en ";") que es precisamente lo que estas buscando.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 11-05-2014
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 275
Poder: 17
webmasterplc Va por buen camino
lo que busco en realidad es enviarlo de dos formas a la funcion, una ir recorriendo el array numero por numero y haciendo la petición uno a la vez que me permitiria personalizar cada mensaje y de la otra recorrer el array y concatenar los numeros de 500 numeros en 500 y si hay mil solo hago dos peticiones de envio de sms
Responder Con Cita
  #6  
Antiguo 11-05-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola webmasterplc.

Por lo que comentas en el mensaje #3 la parte de personalizar ya la tenes encaminada, pero creo que no me has entendido sobre como procesar el punto y coma cuando envias el lote de 1000 mensajes.

A ver si con este ejemplo me explico mas claramente:
Código Delphi [-]
var
  h, l, m: Integer;
begin
  // Asumo que contactos ya tiene asignado los 1000 números
  l:= Low(contactos);
  m:= High(contactos) div 2;
  h:= High(contactos);

  // quitar ";" al contacto 500
  SetLength(contactos[m], Length(contactos[m])-1);
  // quitar ";" al contacto 1000
  SetLength(contactos[h], Length(contactos[h])-1);
  
  // Visualizar el resultado
  ShowMessage(Format('000-499: %s %s%s500-999: %s %s',
    [contactos[l],contactos[m],#10,contactos[m+1],contactos[h]]));
...
Cuando envíes "contáctos" como argumento los datos 500 y 1000 ya no terminarán en ";".

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 11-05-2014 a las 22:47:13.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Obtener determinado dígito de un número xneox Varios 10 07-10-2012 01:43:22
Ordenar Array de Registro por campo determinado Bauhaus1975 Varios 10 01-03-2009 10:44:09
Seleccionar un numero determinado de registros de una tabla NPIdea Firebird e Interbase 8 26-11-2008 19:50:46
Convertir una cadena de palabras separadas por # en array David OOP 11 10-09-2008 15:46:09
Borrar un dato determinado de un Array. alfredosg19 Varios 5 24-03-2005 10:05:17


La franja horaria es GMT +2. Ahora son las 19:59:23.


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
Copyright 1996-2007 Club Delphi