![]() |
TStringList
Buenos dias foreros. Un compañero comento q lo mejor para leer un txt pa riba era utilizar un TStringList y va de muerte. Lo q quiero hacer es lo siguiente:
Leo un DXF q es un archivo de CAD. Este archivo contiene las lineas ,circulos y demas y una cantidad lo detallada. A la vez una linea en concreto contiene su definicion: dode empieza, donde acaba, color, nombre, layer etc y no extrictamente tiene un numero de campos fijo, osea q puede variar dependiento de la complejidad de la linea. LO Q QUIERO HACER Utilizando un TStringList: Un TStringList que contenga un TStringList. En el primero almacenaria los tipos de dibujo: Si es lineas ,Si es circulos, Si es etc. y esta linea, circulo a la vez contiene su definicion que puede tener mas o menos campos. Y sepues como accedo a ese TStringList dentro del TStringList? Pues muchas gracias |
Quizás te sirva esta idea: un array bidimensional de TStrings donde en el primero almacenarias el tipo de dibujo y en el segundo las características de este
|
Eso ya. Jo antes lo habia hecho con arrays pero lo quiero hacer lo TStringList porque tiene mogollon de metodos, eventos etc.
Gracias |
No, si no te estaba diciendo de no hacerlo con TStringList :D El TStringList es una clase que deriva de TStrings que es lo que yo te proponía. Lo que pasa es que los TStringList te decía de ponerlos en un array bidimensional.
A parte de eso, tienes clases estilo a los TStrings que pueden servirte para almacenar los 2 TStrings que necesitas TList (unit Classes) TObjectList (unit Contnrs) TComponentList (unit Contnrs) Míratelos en la ayuda y escoge el que más te guste si no te gusta lo del array de TStrings (o TStringList) ;) |
Te he hecho caso y he provado pero me da un error de win.
Supongo q es por no hacer el create SA, no? Lo he comentado mas abajo. Si es eso , donde lo creo? type PMyList = ^AList; AList = record SA: TStringList; end; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; MyList: TList; ARecord: PMyList; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin MyList := TList.Create; try New(ARecord); ARecord^.SA.Add('1'); // El error empieza aqui ARecord^.SA.Add('2'); ARecord^.SA.Add('3'); ARecord^.SA.Add('4'); ARecord^.SA.Add('5'); MyList.Add(ARecord); New(ARecord); ARecord^.SA.Add('11'); ARecord^.SA.Add('12'); ARecord^.SA.Add('13'); ARecord^.SA.Add('14'); ARecord^.SA.Add('15'); MyList.Add(ARecord); finally MyList.Free; end; end; end. |
Efectivamente, si no instancias La TStringList, te dará error. A parte de eso, ese código o único que va a hacer es ir dejando tus AList en memoria y sin nadi que apunte a ellos. Lo que quería decir Cadetill era algo así:
Código:
type |
Perfecto era lo q queria aunque me da un error en la linea ShowMesage en items y pone Undeclared identifier: 'Items'
|
Perdon, la propiedad no se llama Items, sino Strings :P
|
hola Me prodriais ayudar a analizar esta linea?
ShowMessage(TStringList(ObjList[i]).strings[j]); type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); var Temp: TStringList; ObjList: TObjectList; i, j: integer; begin ObjList := TObjectList.Create; try Temp := TStringList.Create; Temp.Add('1'); Temp.Add('2'); Temp.Add('3'); Temp.Add('4'); Temp.Add('5'); ObjList.Add(Temp); Temp := TStringList.Create; Temp.Add('11'); Temp.Add('12'); Temp.Add('13'); Temp.Add('14'); Temp.Add('15'); ObjList.Add(Temp); for i := 0 to ObjList.Count - 1 do for j := 0 to TStringList(ObjList[i]).Count - 1 do ShowMessage(TStringList(ObjList[i]).strings[j]); finally ObjList.Free; end; end; end. Es que no logro entenderla. En principio seria linea tendria de ser: ShowMessage(ObjList[1].strings[1]); Comentarmela por favor |
Bueno, veo que marto sí que me entendió :D
Veamos, la linea que te ha puesto marto. Código:
ShowMessage(TStringList(ObjList[i]).strings[j]); Por pasos: 1.- ObjList[i] -> accedemos a un objeto (sin saber cual) 2.- TStringList(ObjList[i]) -> casteamos el objeto a un TStringList ya que sabemos que lo es 3.- TStringList(ObjList[i]).strings[j] -> accedemos a una de las propiedades de este objeto (el StringList) De echo, si quitas el casteo e intentas compilar... creo que te va a dar un error muy chulo :D Espero te sirva |
Joder... q bien explicao.
Muchas gracias. |
La franja horaria es GMT +2. Ahora son las 23:40:37. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi