Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   convertir arreglo Array[0..33] of Char; a cadena (https://www.clubdelphi.com/foros/showthread.php?t=77675)

richy08 17-02-2012 18:02:26

convertir arreglo Array[0..33] of Char; a cadena
 
buenos dias compañeros estoy un poco perdido con esto de las coversiones de datos, les explico tengo un record de esta manera:

Código Delphi [-]
 TRegDocumento = Record
    aFolio         : Double;
    aNumMoneda     : LongInt;
    aTipoCambio    : Double;
    aImporte       : Double;
    aDescuentoDoc1 : Double;
    aDescuentoDoc2 : Double;
    aSistemaOrigen : LongInt;
    aCodConcepto   : Array[0..kLongCodigo] of Char;
    aSerie         : Array[0..kLongSerie] of Char;
    aFecha         : Array[0..kLongFecha] of Char;
    aCodigoCteProv : Array[0..kLongCodigo] of Char;
    aCodigoAgente  : Array[0..kLongCodigo] of Char;
    aReferencia    : Array[0..kLongReferencia] of Char;
    aAfecta        : LongInt;

como puedo convertir este dato a tipo cadena

aSerie : Array[0..33] of Char;


gracias por cualquier comentario

ecfisa 17-02-2012 19:10:37

Hola richy08.

Podes usar el procedimiento SetString.

A modo de ejemplo:
Código Delphi [-]
procedure TForm1.btnDemoClick(Sender: TObject);
var
  aSerie : array[0..33] of Char;
  i: Byte;
  Cadena: string;
begin
  for i:= 0 to 33 do aSerie[i]:= Chr(63+i);
  SetString(Cadena, aSerie, Length(aSerie));
  ShowMessage(Cadena);
end;

Saludos.

richy08 17-02-2012 19:13:45

gracias eficsa probare lo que me comentas

saludos

richy08 17-02-2012 19:20:39

pregunta tonta pero sigo sin comprender :o, si tengo una variable asi

Código Delphi [-]
var 
cadena :string;
.
.
.
cadena:='f';
documento.aserie:='f';   <----esto es diferente de esto ---> documento.aserie:=cadena;


saludos

ecfisa 17-02-2012 19:35:06

Hola richy08.

La lógica indica que si Cadena = string y documento.Cadena = string, esto implica que Cadena y documento.Cadena son del mismo tipo.
Código Delphi [-]
...
implementation

type
  TRegDocumento = Record
    Cadena: string;
  end;

var
  documento: TRegDocumento;

procedure TForm1.btComprobarClick(Sender: TObject);
var
  Cadena: string;
begin
  Cadena:= 'f';
  documento.Cadena:= 'f';
  ShowMessage(Cadena+' = '+documento.Cadena);
end;
...

Pero no acabo de entender que problema te está generando la duda...

Saludos.

roman 17-02-2012 19:37:20

No veo para qué copiar caracter por caracter. Si aSerie contiene un caracter de terminación #0, se puede asignar directamente:

Código Delphi [-]
Cadena := aSerie;

Si no contiene caracter de terminación pero se sabe la longitud L que ocupa (no necesariamente L debe ser la longitud de aSerie) entonces se puede usar SetString directamente:

Código Delphi [-]
SetString(Cadena, aSerie, L);

// Saludos

ecfisa 17-02-2012 19:43:40

Hola roman.

El código
Código Delphi [-]
procedure TForm1.btnDemoClick(Sender: TObject);
var
  aSerie : array[0..33] of Char;
  i: Byte;
  Cadena: string;
begin
  for i:= 0 to 33 do aSerie[i]:= Chr(63+i);
  SetString(Cadena, aSerie, Length(aSerie));
  ShowMessage(Cadena);
end;
fué un demo para que pudiera ver el uso de SetString en el pasaje de array of char a string. El copiado de caracteres es sólo a efectos de que Cadena tuviera un valor para mostrar.

Saludos. :)

richy08 17-02-2012 19:45:59

gracias roman y eficsa por su tiempo, ahi va de donde me surge la duda estoy tratando de usar el sdk de contpaqi, tengo un record declarado asi:

Código Delphi [-]
type
  TRegDocumento = Record
    aFolio         : Double;
    aNumMoneda     : LongInt;
    aTipoCambio    : Double;
    aImporte       : Double;
    aDescuentoDoc1 : Double;
    aDescuentoDoc2 : Double;
    aSistemaOrigen : LongInt;
    aCodConcepto   : Array[0..kLongCodigo] of Char;
    aSerie         : Array[0..kLongSerie] of Char;
    aFecha         : Array[0..kLongFecha] of Char;
    aCodigoCteProv : Array[0..kLongCodigo] of Char;
    aCodigoAgente  : Array[0..kLongCodigo] of Char;
    aReferencia    : Array[0..kLongReferencia] of Char;
    aAfecta        : LongInt;
  end {RegDocumento};

type
  LPFREGDOCUMENTO = ^TRegDocumento;


despues en el evento de un boton tengo esto

Código Delphi [-]
var
  documento: LPFREGDOCUMENTO;
  lSerie : Array[0..kLongSerie] of Char;
  aFolio :double;


se supone que con esta funcion el sdk de contpaq me devuelve la serie y el folio del cfdi en uso.

Código Delphi [-]
 lError:=fSiguienteFolio('5',  lSerie, aFolio);
     //showmessage(lSerie);
     if lError <> kSIN_ERRORES  then
     begin
      rMensajeError( lError );
      FreeMem(documento);
      Exit;
     end;

pero al querer mandarle de nuevo esos datos al sdk de esta manera me dice que los tipos de datos son incompatibles

Código Delphi [-]
    documento.aFolio:=aFolio;
    documento.aNumMoneda:=1;
    documento.aTipoCambio:=1;
    documento.aImporte:=5000.50;
    documento.aDescuentoDoc1:=0;
    documento.aDescuentoDoc2:=0;
    documento.aSistemaOrigen:=5;
    documento.aCodConcepto:='5';
    documento.aSerie:=lserie;                  <------------------aqui esta el error :confused:
    documento.aFecha:='01/01/2012';
    documento.aCodigoCteProv :='1';
    documento.aAfecta:=0;


saludos

ecfisa 17-02-2012 20:03:25

Hola.
Cita:

Código Delphi [-]
 documento.aSerie:=lserie;                  <------------------aqui esta el error

Pero en ese caso no estás copiando una variable de tipo string a otra como indicabas en el mensaje #4 ni tampoco un array of char a string. Estas copiando un array of char a otro.

En este caso probá de este modo:
Código Delphi [-]
  CopyMemory(@documento.aSerie[0], @lSerie[0], SizeOf(lSerie));

Saludos.

richy08 17-02-2012 20:20:04

Cita:

Empezado por ecfisa (Mensaje 425381)
Hola.

Pero en ese caso no estás copiando una variable de tipo string a otra como indicabas en el mensaje #4 ni tampoco un array of char a string. Estas copiando un array of char a otro.

En este caso probá de este modo:
Código Delphi [-] CopyMemory(@documento.aSerie[0], @lSerie[0], SizeOf(lSerie));


Saludos.


mil gracias Eficsa esto es lo que estaba buscando

saludos


La franja horaria es GMT +2. Ahora son las 18:15:36.

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