Página 1 de 1

TStringList. Revision

Publicado: Lun Ene 26, 2009 6:48 pm
por rafa
Amigos, os dejo una clase sobre la que voy trabajando poco a poco , que
nos permite trabajar cadenas de texto cómodamente.
Ahora permite usar ordenación, case sensitive, si queremos que en la
lista existí­an o no elementos duplicados, etc..
A la espera de un problema con la sobrecarga del operador "[]",
( J.Gimenez, pol amol a Dioz! que me tienes abandonao! ;-) ) se accede
como si fuese un method normal.
Vamos lentos, si, pero es que la conversión delphi/Xailer a veces no
resulta del todo satisfactoria, a veces se les va la olla a estos de
Delphi y el tiempo es muy miserable.
Espero seguir portando más funcionalidad, hasta llevar a LoadFromTxt() y
SaveFromTxt(), que es en lo que principalmente me interesaba, pero
bueno, al final terminaré de hacerla casi casi el 100%.
La clase esta ahora mismo pensada en la funcionalidad, no en la
optimización.
Un ejemplo;
o := TStringList():Create()
o:lCaseSensitive := .f. // Se establece a UPPER.
o:lSorted := .T. // Se establece que se ordene.
o:Add( "Hola" ) // nIndex 1
o:Add( "1 Hola" ) // nIndex 1, porque es ordenado.
// TODO:Vamos a tratarlo como una función
MsgInfo( o:aStrings(1) ) // 1 Hola
// En listas ordenadas, por defecto no permite duplicados por lo tanto
// Si queremos duplicados en lista ordenadas tan fácil como
// o:Duplicates := dupAccept
o:Add( "Hola" )
// Aqui tendremos 2, no 3, porque no permite duplicados
MsgInfo( "Count:" + ToString( o:nCount ) )
// Ahora , vamos a quitar la ordenación
o:Clear()
o:lCaseSensitive := .T. // Se establece a UPPER.
o:lSorted := .F. // Se establece que se ordene.
o:Add( "Hola" ) // nIndex 1
o:Add( "1 Hola" ) // nIndex 1, porque es ordenado.
o:Add( "Hola" )
MsgInfo( o:aStrings(1) ) // Hola
// Aqui tendremos 3
MsgInfo( "Count:" + ToString( o:nCount ) )
// Ordenación al reves.
o:Clear()
o:lCaseSensitive := .T. // Se establece a UPPER.
o:lSorted := .T. // Se establece que se ordene.
o:bCustumSort := {|x,y| x > y }
o:Add( "1" )
o:Add( "5" )
o:Add( "3" )
o:Add( "2" )
o:Add( "4" )
MsgInfo( o:aStrings(1) ) // 5
Saludos
Rafa Carmona
--

TStringList. Revision

Publicado: Lun Ene 26, 2009 7:23 pm
por ignacio
Rafa,
Para la sobrecarga del operador:
METHOD aStrings( nIndex, cString ) OPERATOR "[]"
Para su uso:
En vez de: MsgInfo( o:aStrings(1) )
Usar: msginfo( o[1] )
Un saludo
--
Ignacio Ortiz de Zúñiga
Xailer support / Soporte de Xailer
http://www.xailer.com
http://www.xailer.info
"rafa" <thefull_quita@t-gtk.org> escribió en el mensaje
news:497df761$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Amigos, os dejo una clase sobre la que voy trabajando poco a poco , que
> nos permite trabajar cadenas de texto cómodamente.
>
> Ahora permite usar ordenación, case sensitive, si queremos que en la
> lista existían o no elementos duplicados, etc..
>
> A la espera de un problema con la sobrecarga del operador "[]",
> ( J.Gimenez, pol amol a Dioz! que me tienes abandonao! ;-) ) se accede
> como si fuese un method normal.
>
> Vamos lentos, si, pero es que la conversión delphi/Xailer a veces no
> resulta del todo satisfactoria, a veces se les va la olla a estos de
> Delphi y el tiempo es muy miserable.
>
> Espero seguir portando más funcionalidad, hasta llevar a LoadFromTxt() y
> SaveFromTxt(), que es en lo que principalmente me interesaba, pero
> bueno, al final terminaré de hacerla casi casi el 100%.
>
> La clase esta ahora mismo pensada en la funcionalidad, no en la
> optimización.
>
> Un ejemplo;
>
> o := TStringList():Create()
> o:lCaseSensitive := .f. // Se establece a UPPER.
> o:lSorted := .T. // Se establece que se ordene.
>
> o:Add( "Hola" ) // nIndex 1
> o:Add( "1 Hola" ) // nIndex 1, porque es ordenado.
>
> // TODO:Vamos a tratarlo como una función
> MsgInfo( o:aStrings(1) ) // 1 Hola
>
> // En listas ordenadas, por defecto no permite duplicados por lo tanto
> // Si queremos duplicados en lista ordenadas tan fácil como
> // o:Duplicates := dupAccept
>
> o:Add( "Hola" )
>
> // Aqui tendremos 2, no 3, porque no permite duplicados
> MsgInfo( "Count:" + ToString( o:nCount ) )
>
> // Ahora , vamos a quitar la ordenación
> o:Clear()
> o:lCaseSensitive := .T. // Se establece a UPPER.
> o:lSorted := .F. // Se establece que se ordene.
> o:Add( "Hola" ) // nIndex 1
> o:Add( "1 Hola" ) // nIndex 1, porque es ordenado.
> o:Add( "Hola" )
>
> MsgInfo( o:aStrings(1) ) // Hola
> // Aqui tendremos 3
> MsgInfo( "Count:" + ToString( o:nCount ) )
>
> // Ordenación al reves.
> o:Clear()
> o:lCaseSensitive := .T. // Se establece a UPPER.
> o:lSorted := .T. // Se establece que se ordene.
> o:bCustumSort := {|x,y| x > y }
> o:Add( "1" )
> o:Add( "5" )
> o:Add( "3" )
> o:Add( "2" )
> o:Add( "4" )
> MsgInfo( o:aStrings(1) ) // 5
>
> Saludos
> Rafa Carmona
>

TStringList. Revision

Publicado: Lun Ene 26, 2009 10:40 pm
por rafa
"Ignacio Ortiz de Zúñiga" <NoNameToAvoidSpam@xailer.com> wrote:
>Rafa,
>
>Para la sobrecarga del operador:
>
> METHOD aStrings( nIndex, cString ) OPERATOR "[]"
>
>Para su uso:
>
>En vez de: MsgInfo( o:aStrings(1) )
>
>Usar: msginfo( o[1] )
>
Mamma mia! Que error más infantil que he cometido , jajaja.
El problema es que en Delphi se esta sobrecargando una property, que entiendo
no es posible en Xailer, y yo emperrao.
¿ Es posible sobrecargar una property/DATA ?
saludos
rafa Carmona

TStringList. Revision

Publicado: Mar Ene 27, 2009 9:24 am
por rafa
Me autorespondo, no es necesario sobrecargar una data.
En Delphi, por lo tanto nosotros lo haremos igual,
o[1] es igual a o.strings[1]
por lo tanto, sobrecargando el method ya lo tenemos.
Thanks Ignacio!
Rafa Carmona
Saludos