Ver Mensaje Individual
  #6  
Antiguo 06-05-2011
Avatar de fide_uci
fide_uci fide_uci is offline
Miembro
 
Registrado: ene 2009
Ubicación: Cuba - La Habana
Posts: 226
Reputación: 16
fide_uci Va por buen camino
Bueno aqui esta la funcion que he utilizado ya para convertir la dichosa linea con la fecha y hora en el formato dado a algo que delphi entienda. Aqui les dejo el codigo.

Ha, por cierto la clase que utilizo ahi es una que me permite sacar los tokens, o parametros separados por coma o espacio del string. Si hace falta me dicen y publico la Unit con la definicion de la clase.

Aca el codigo.

Código Delphi [-]
procedure TForm1.GetMessageFromTXT(pFileName: string; var pIdMessage: TIdMessage);
var
  vStringList: TStringList;
  vDateTime: TDateTime;
  vCToken: TToken;
  vNum, vX: Byte;
  vStrDateTime, vStrUtil: string;
begin

  vStringList := TStringList.Create;
  vCToken := TToken.Create;

  try
    vStringList.LoadFromFile(pFileName);

    pIdMessage.From.Text := vStringList.Strings[0];
    pIdMessage.Recipients.Add.Text :=  vStringList.Strings[1];
    pIdMessage.Subject := vStringList.Strings[2];


    vCToken.Text := vStringList.Strings[3];
    vCToken.Seps := [',',' ']; //Separadores utilizados
    vCToken.Count;

    vCToken.First;
    vNum := 0;
    while vCToken.MoreTokens do
    begin
      Inc(vNum);
      //1: Dia del mes, que no es necesario
      //2: Mes (que tenemos que sacar su indice del array de meses)
      //3: #dia (ej. 22)
      //4: Año
      //5: "at"
      //6: La Hora
      //7: AM o PM
      vStrUtil := StringReplace(vCToken.LastToken, ' ', '', [rfReplaceAll]);

      case vNum of
        2: begin
            (*Aca tenemos que saber en que mes estamos para extraerlo
             OJO: Esto va a fallar cuando el SO este en español o sea
             el arreglo de meses no contenga los meses en ingles. *)

            //**** Recorremos todos los meses
            for vX := 1 to 12 do
              begin
                //Sacamos el numero del mes dado
                if LowerCase(ShortMonthNames[vX]) = LowerCase(vStrUtil) then
                  begin
                    vStrDateTime := IntToStr(vX);
                    break;
                  end;   
              end;
           end;
        3: begin
            vStrDateTime := vStrDateTime + '/' + vStrUtil;
           end;
        4: begin
            vStrDateTime := vStrDateTime + '/' + vStrUtil;
           end;
        6: begin
            vStrDateTime := vStrDateTime + ' ' + vStrUtil;
           end;
        7: begin
            vStrDateTime := vStrDateTime + ' ' + vStrUtil;
           end;
      end;

      vCToken.Next;
    end;

    vDateTime := StrToDateTime(vStrDateTime);

    pIdMessage.Date := vDateTime;    

    vStringList.Delete(0);
    vStringList.Delete(0);
    vStringList.Delete(0);
    vStringList.Delete(0);
    vStringList.Delete(0);

    pIdMessage.Body.Text := vStringList.Text;

  finally
    vStringList.Free;
    vCToken.Free;
  end;

end;

Última edición por fide_uci fecha: 06-05-2011 a las 16:22:45. Razón: Corrigiendo algunos problemitas que se me quedaron.
Responder Con Cita