Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Crear array of char con valores predeterminados (https://www.clubdelphi.com/foros/showthread.php?t=87759)

JuanOrtega 21-02-2015 19:53:23

Crear array of char con valores predeterminados
 
Hola tengo un problema con este codigo :

Código Delphi [-]
function hola(texto:string):bool;
var
  test: string;
  probando: Array [0 .. Length(texto)  + 7] of Char;

Como ven estoy tratando de crear una array of char con la longitud de la variable string que se usa como parametro en la funcion pero el problema es que siempre me dice que la variable texto no existe , probe volviendo a declarar la variable despues del begin pero no me deja me dice que no se esperaba el array.

¿ como logro este ejercicio ?

BDWONG 21-02-2015 20:52:46

Tienes que usar arreglos dinamicos y asi podras establecer el tamaño segun el caso especifico
te dejo esto haber si te sirve


Código Delphi [-]
function funcion(texto:string):boolean;
var
  probando: Array of Char;
begin

    SetLength(probando,length(texto)+7);
    writeln('Tamano del arreglo ',length(probando));

    result:=true;
end;

begin

  writeln(funcion('cadena'));
  readln;
end.

saludos.......

JuanOrtega 21-02-2015 21:00:52

te agredezco la ayuda , una pregunta sobre el codigo , el cero en "0.." ¿ ya no importa y o es el mismo resultado ?

avance en el codigo :

Código Delphi [-]
function hola(texto:string):bool;
var
  test: string;
  probando: Array of Char;
bein
  SetLength(probando, length(texto) + 7);
  test := 'hola mundo';
  StrCopy(probando, pchar(test));
end;

pero ahora me da este error que antes no me daba : "There is no overloaded version of 'StrCopy' that can be called with these arguments" , ¿ a que se debe ?

ecfisa 21-02-2015 21:51:23

Hola Lepuke.

No entiendo el sentido del código, pero si como estimo, deseas pasar el contenido del string al array of Char, deberías hacer:
Código Delphi [-]
...
  test := 'hola mundo';
  StrPCopy(@probando[1], test); // o también: StrPCopy(Addr(probando[1]), test);
...

Saludos :)

nlsgarcia 22-02-2015 01:39:08

Lepuke,

Cita:

Empezado por Lepuke
...Crear array of char con valores predeterminados...

:rolleyes:

Revisa este código:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
   ArrName : Array of Char;
   Name : String;
   AuxName : String;
   i : Integer;

begin

   Name := 'Nelson Garcia';

   SetLength(ArrName,Length(Name));
   StrPCopy(@ArrName[0],Name);
   Showmessage('ArrName: ' + String(@ArrName[0]));

   AuxName := String(@ArrName[0]);
   Showmessage('AuxName: ' + AuxName);

   AuxName := EmptyStr;
   for i := Low(ArrName) to High(ArrName) do
      AuxName := AuxName + ArrName[i];
   Showmessage('AuxName: ' + AuxName);

   Finalize(ArrName);

end;
El código anterior en Delphi 7 sobre Windows 7 Professional x32, ejemplifica el uso de arreglos dinámicos de tipo Char.

Espero sea útil :)

Nelson.

JuanOrtega 20-08-2015 19:13:36

gracias por la ayuda , tengo un duda sobre el mismo tema , si en vez de que sea un Array of Char sea un Array of Byte ¿ como seria para agregarles varios elementos ? , intente con los ejemplos que me dieron y siempre me devuelve el mismo error :

There is no overloaded version of 'StrPCopy' that can be called with these arguments

nlsgarcia 20-08-2015 21:37:09

Lepuke,

Cita:

Empezado por Lepuke
...si en vez de que sea un Array of Char sea un Array of Byte ¿como seria para agregarles varios elementos?...

:rolleyes:

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
const
   Max = 10;

var
   A1 : Array of Byte;
   i : Integer;

begin

   for i := 1 to Max do
   begin
      SetLength(A1,Length(A1)+1);
      A1[High(A1)] := i;
   end;

   for i := Low(A1) to High(A1) do
      MessageBox(0, PChar(Format('A1[%d] = %d',[i,A1[i]])) , 'Dynamic Arrays', MB_OK);

   Finalize(A1);   

end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, ejemplifica el uso de arreglos dinámicos de tipo Byte.

Espero sea útil :)

Nelson.

JuanOrtega 21-08-2015 00:34:41

era el ejemplo que buscaba , gracias por la ayuda nlsgarcia.


La franja horaria es GMT +2. Ahora son las 15:13:32.

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