Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Arreglo bi-tri dimensional a partir de un String (https://www.clubdelphi.com/foros/showthread.php?t=54399)

egostar 17-03-2008 20:28:22

Arreglo bi-tri dimensional a partir de un String
 
Hola amigos

Pues bien, quiero hacer una funcion que me permita obtener a partir de un string un arreglo de enteros de esta forma:

'357,112' --> (357,112)
'672,464' --> (672,464)
'84,176,20' --> (84,176,20)
'89,176,20' --> (89,176,20)
'672,176,20' --> (672,176,20)

Lo que quiero hacer es tener una clase o una variable que pueda acceder de esta forma:

'357,112' --> (357,112) --> Dato1

Dato1.X, Dato1.Y

'672,176,20' --> (672,176,20) --> Dato2

Dato2.X, Dato2.Y, Dato2.Z

Espero haber sido lo suficientemente claro. :)

Salud OS

egostar 17-03-2008 20:39:45

Creo que ni yo me entendi a lo que pregunte..... :D:D:D

Lo que necesito es pasar el dato String a una variable que sea un arreglo y que pueda acceder a los valores como si fueran coordenadas (X,Y)

Salud OS

eduarcol 17-03-2008 21:13:34

a ver si entendi:

Código Delphi [-]
unit Unit3;

interface

uses
   sysutils;

type
   TDato = Class(TObject)
      x: Integer;
      y: Integer;
      z: Integer;
      procedure Cargar(cValor: String);
   end;

implementation

procedure TDato.Cargar(cValor: String);
begin
   x := StrtoIntDef(Copy(cValor, 1, Pos(',', cValor) - 1));
   cValor := Copy(cValor, Pos(',', cValor) + 1, Length(cValor));
   y := StrtoIntDef(Copy(cValor, 1, Pos(',', cValor) - 1));
   cValor := Copy(cValor, Pos(',', cValor) + 1, Length(cValor));
   z := StrtoIntDef(Copy(cValor, 1, Length(cValor));
end;

end.

cHackAll 17-03-2008 21:20:54

Código Delphi [-]
type
 TEgostar = class(TStringList)
 private
  function GetPoint(Index: Integer): TPoint;
  function GetLines(Index: Integer): Integer;
  function GetCaption(Index: Integer): string;
 protected
  property Point[Index: Integer]: TPoint read GetPoint;
  property Lines[Index: Integer]: Integer read GetLines;
  property Caption[Index: Integer]: string read GetCaption;
 end;
 
implementation

function TEgostar.GetPoint(Index: Integer): TPoint;
var S: string;
begin
 S := Copy(Strings[Index], Pos('=', Strings[Index]) + 1, 255);
 Result.X := StrToInt(Copy(S, 1, Pos(',', S) - 1));
 System.Delete(S, 1, Pos(',', S));
 if Pos(',', S) = 0 then
  Result.Y := StrToInt(S)
 else
  Result.Y := StrToInt(Copy(S, Pos(',', S) + 1, 255));
end;
 
function TEgostar.GetLines(Index: Integer): Integer;
var S: string;
begin
 S := Strings[Index];
 System.Delete(S, 1, Pos(',', S));
 if Pos(',', S) = 0 then
  Result := -1
 else
  Result := StrToInt(Copy(S, Pos(',', S) + 1, 255));
end;
 
function TEgostar.GetCaption(Index: Integer): string;
begin
 Result := Copy(Strings[Index], 1, Pos('=', Strings[Index]) - 1)
end;

Prueba;
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var e: TEgostar; i: Integer;
begin
 ListBox1.Clear;
 e := TEgostar.Create;
 e.LoadFromFile('xxx.txt');
 for i := 0 to e.Count - 1 do
  ListBox1.AddItem(e.Caption[i] + ' - ' + IntToStr(e.Point[i].X) + ':' + IntToStr(e.Point[i].Y) + ' (' + IntToStr(e.Lines[i]) + ')', nil);
 e.Destroy;
end;

egostar 17-03-2008 22:40:46

Muchas gracias amigos, ya estoy haciendo las pruebas, son geniales :)

Salud OS

Al González 18-03-2008 06:12:49

¡Hola Eliseo!

Gracias por el refresco del otro día en tu oficina.

Que bueno que ya hay varias buenas respuestas de los compañeros. Tengo curiosidad por conocer la razón de esto que buscas, para tener más claro el objetivo y, de ser posible, tratar de ayudar.

Saludos.

Al.

egostar 19-03-2008 01:27:05

Cita:

Empezado por Al González (Mensaje 273858)
¡Hola Eliseo!

Gracias por el refresco del otro día en tu oficina.

Que bueno que ya hay varias buenas respuestas de los compañeros. Tengo curiosidad por conocer la razón de esto que buscas, para tener más claro el objetivo y, de ser posible, tratar de ayudar.

Saludos.

Al.

Hola amigo Al, para la próxima te prometo tener una cerveza bien fria :)

Bueno, la cuestión es que estoy tratando de mejorar uno de mis sistemas el cual genera la impresión de facturas usando el canvas de impresión en lugar de reporteadores (francamente siempre me ha gustado usar el canvas).

Bueno, resulta que para no tener que modificar el código cada vez que venda un sistema me puse a la tarea de crear un configurador de facturas usando coordenadas (una cuadricula), eso ya está listo, ahora el punto es que esta herramienta que hice genera un archivo con las coordenadas donde deberá de imprimirse cada campo de la factura, por ejemplo:

Cita:

Fecha=3500,500
Lo que quería era convertir ese String en "algo" que pueda acceder como si fueran coordenadas, por ejemplo:

Código Delphi [-]
Printer.Canvas.TextOut(Fecha.X , Fecha.Y,'Fecha');

gracias amigos [Eduarcol] y [cHackAll] por las ideas, gracias [Al] por interesarte en esta solicitud mia. :) y por supuesto a mi buen amigo [Caral] por ese apoyo moral que siempre estas listo a dar :)

Salud OS

Caral 19-03-2008 01:32:38

Hola
Que conste que yo di el apoyo moral.:):D
Saludos

egostar 19-03-2008 01:41:35

Cita:

Empezado por Caral (Mensaje 274033)
Hola
Que conste que yo di el apoyo moral.:):D
Saludos

:eek::o:(, perdona amigo, por supuesto que el apoyo moral es lo que mas cuenta. :)

Salud OS

eduarcol 19-03-2008 14:05:17

Cita:

Empezado por egostar (Mensaje 274032)

gracias amigos [Eduarcol] y [cHackAll] por las ideas, gracias [Al] por interesarte en esta solicitud mia. :) y por supuesto a mi buen amigo [Caral] por ese apoyo moral que siempre estas listo a dar :)

Salud OS

Cita:

Empezado por Caral (Mensaje 274033)
Hola
Que conste que yo di el apoyo moral.:):D
Saludos

a ver, muy a pesar mio, tengo que remitirlos a la guia de estilo, es impropio de este club que los consejos los den en mensajeria privada, cuando alguien necesite apoyo moral no va a tener donde conseguirlo, asi que para la proxima no se repita o los tendremos que banear a los dos :D:D

Al González 19-03-2008 19:54:54

Ya me queda un poco más claro (lo que casi no me queda es tiempo el día de hoy, pero trataré de ayudar).

Creo que convendría cargar el archivo de texto en un TStringList (método LoadFromFile) y usar su propiedad Values para acceder a las coordenadas de cada campo.

Con esto, ya sólo restaría convertir un string '50,50' en los enteros: 50 y 50, para lo cual podrías usar algo del código de Javier y Eduardo.

Espero haya sido útil. ;)

Saludos.

Al González. :)


La franja horaria es GMT +2. Ahora son las 23:28:54.

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