Ordenar Txt com TStringList
[color=red:3d5c0b9227][b:3d5c0b9227]tem como ordenar um arquivo .txt por 3 colunas(41,42,43) ?[/b:3d5c0b9227][/color:3d5c0b9227]
cada linha do arquivo é referente os dados de um cheque e da coluna 41 à 43 seria o banco do cheque, portanto eu precisaria ordenar os dados por banco.
se alguem puder me ajudar eu agradeço !!!
cada linha do arquivo é referente os dados de um cheque e da coluna 41 à 43 seria o banco do cheque, portanto eu precisaria ordenar os dados por banco.
se alguem puder me ajudar eu agradeço !!!
Fabiano Góes
Curtidas 0
Respostas
Night_man
25/08/2006
a stringlist tem um metodo chamado CustomSort que recebe um parametro do tipo TStringListSortCompare
esse parametro eh um uma funcao que vai dizer pra sort do Stringlist como ordenar, vamos a um exemplo
esse parametro eh um uma funcao que vai dizer pra sort do Stringlist como ordenar, vamos a um exemplo
procedure TForm1.Ordena(Const AString: TStringList); function Compare(List: TStringList; Index1, Index2: Integer): Integer; begin Result := CompareStr(List[Index1], List[Index2]); end; begin AString.CustomSort(@Compare); end;
GOSTEI 0
Fabiano Góes
25/08/2006
NiGHT_MaN,
desde já gostaria de agradecer pela atenção.
desculpe a minha iguinorancia mais eu nao entendi o seu exemplo,
nao entendi o que a função Compare esta fazendo e como você usou: (@Compare)
mais uma vez quero pedir desculpas pela minha iguinorancia.
desde já gostaria de agradecer pela atenção.
desculpe a minha iguinorancia mais eu nao entendi o seu exemplo,
nao entendi o que a função Compare esta fazendo e como você usou: (@Compare)
mais uma vez quero pedir desculpas pela minha iguinorancia.
GOSTEI 0
Night_man
25/08/2006
o cara... quanta coisa agente nao sabe.. soh aprende se quebrando mesmo... mas vamos lah...
assim o stringlist tem um metodo chamado sort, ele ordena alfabeticamente os items. soh q isso na te serve, entao temos q usar um outro metodo, q nao caso eh o CustomSort.
Esse metodo precisa de uma funcao que diga para ele se uma linha eh menor ou maior q a outra
essa funcao deve se passada como parametro e a funcao ´Compare´
o ´@´ significa o endereco da funcao, eh o ponteiro para ela.
O metodo CustomSort eh como se fosse um evento, tipo o Onclick de um TButton, quando se clica no botao ele dispara o evento OnClick e esse evento esta associado a algum metodo.
vou te dar um exemplo
123Teste01abc
123Teste15abc
123Teste20abc
123Teste15abc
123Teste02abc
esses sao os meus items da StringLista
quando for chamado o metodo CustomSort ele vai comecar a percorrer os items 1 a 1. Quando ele precisar saber se o Item[0] eh maior que o Item[1] ele vai disparar a funcao que esta especificada, no caso Compare.
a funcao deve retornar um numero
< 0 se o Item[0] for < que o Item[1]
0 se o Item[0] for = que o Item[1]
> 0 se Item[0] for > que o Item[1]
a funcao CompareStr retorna esatamente esses valores.
quando Compare for chanada ela tera como valores
List: a alista que esta sendo ordenada ´AString´
Index1: ´0´ pois eh o 1º item que esta sendo comparado
Index2: ´1´ pois eh o segundo index que esta sendo comparado
para retornar eu vou fazer o seguinte
ira ser comparado ´Teste01´ com ´Teste15´ isso ira ser ´0´ pois ´Teste01´ eh menor q ´Teste15´
e assim todos os items serao comparados...
eu acho q o problema era q eu nao tinha escrito
espero q tenha fica mais claro agora
[/code]
assim o stringlist tem um metodo chamado sort, ele ordena alfabeticamente os items. soh q isso na te serve, entao temos q usar um outro metodo, q nao caso eh o CustomSort.
Esse metodo precisa de uma funcao que diga para ele se uma linha eh menor ou maior q a outra
essa funcao deve se passada como parametro e a funcao ´Compare´
o ´@´ significa o endereco da funcao, eh o ponteiro para ela.
O metodo CustomSort eh como se fosse um evento, tipo o Onclick de um TButton, quando se clica no botao ele dispara o evento OnClick e esse evento esta associado a algum metodo.
vou te dar um exemplo
123Teste01abc
123Teste15abc
123Teste20abc
123Teste15abc
123Teste02abc
esses sao os meus items da StringLista
quando for chamado o metodo CustomSort ele vai comecar a percorrer os items 1 a 1. Quando ele precisar saber se o Item[0] eh maior que o Item[1] ele vai disparar a funcao que esta especificada, no caso Compare.
a funcao deve retornar um numero
< 0 se o Item[0] for < que o Item[1]
0 se o Item[0] for = que o Item[1]
> 0 se Item[0] for > que o Item[1]
a funcao CompareStr retorna esatamente esses valores.
quando Compare for chanada ela tera como valores
List: a alista que esta sendo ordenada ´AString´
Index1: ´0´ pois eh o 1º item que esta sendo comparado
Index2: ´1´ pois eh o segundo index que esta sendo comparado
para retornar eu vou fazer o seguinte
Result := CompareStr(Copy(List[Index1], 4, 7), Copy(List[Index2], 4, 7);
ira ser comparado ´Teste01´ com ´Teste15´ isso ira ser ´0´ pois ´Teste01´ eh menor q ´Teste15´
e assim todos os items serao comparados...
eu acho q o problema era q eu nao tinha escrito
Result := CompareStr(Copy(List[Index1], 41, 3), Copy(List[Index2], 41, 3))
espero q tenha fica mais claro agora
[/code]
GOSTEI 0
Fabiano Góes
25/08/2006
NiGHT_MaN,
caramba mano, value mesmo heimmm,
com essa explicação nao teve como não entender, isso foi uma aula rsrsr
ai irmão espero um dia poder ajudar o pessoal daqui do forum com explicações como a sua.
fica na PAZ ai mano !!!
caramba mano, value mesmo heimmm,
com essa explicação nao teve como não entender, isso foi uma aula rsrsr
ai irmão espero um dia poder ajudar o pessoal daqui do forum com explicações como a sua.
fica na PAZ ai mano !!!
GOSTEI 0
Marco Salles
25/08/2006
[b:675c9874cb]So para acrescentar :[/b:675c9874cb]
[b:675c9874cb]em outras palavras:[/b:675c9874cb]
Na classe [b:675c9874cb]TStringList [/b:675c9874cb]o Método [b:675c9874cb]CustomSort[/b:675c9874cb] recebe como parametro de entrada uma ação do tipo o [b:675c9874cb]TStringListSortCompare[/b:675c9874cb]...É ainda , esta ação deve ser passada em forma de [b:675c9874cb]função[/b:675c9874cb] nesse caso :
[b:675c9874cb]function Compare[/b:675c9874cb](List: TStringList; Index1, Index2: Integer): Integer;
que deve ser [b:675c9874cb]compativel[/b:675c9874cb] com o tipo indicado , [b:675c9874cb]e de fato o é[/b:675c9874cb]:
[b:675c9874cb]é so olhar o Helph do delphi[/b:675c9874cb]
P:S ...edições 68 e 69 da ClubeDelphi possuem mais artigos que mostram o uso de funçoes de Callbacks
nao entendi o que a função Compare esta fazendo e como você usou: (@Compare)
´Em várias classes do Delphi existem certos métodos que recebem como parâmetro de entrada uma ação e essa ação será aplicada a elementos internos da classe.
Pode parecer estranho, já que existe um método ele deveria saber o que fazer. Porém o uso de funções de callback pode dar maior flexibilidade quanto à execução do método.
Essa ação que deverá ser passada ao método, é passada em forma de procedimento ou função que deve ser compatível com tipo indicado.´
[b:675c9874cb]em outras palavras:[/b:675c9874cb]
Na classe [b:675c9874cb]TStringList [/b:675c9874cb]o Método [b:675c9874cb]CustomSort[/b:675c9874cb] recebe como parametro de entrada uma ação do tipo o [b:675c9874cb]TStringListSortCompare[/b:675c9874cb]...É ainda , esta ação deve ser passada em forma de [b:675c9874cb]função[/b:675c9874cb] nesse caso :
[b:675c9874cb]function Compare[/b:675c9874cb](List: TStringList; Index1, Index2: Integer): Integer;
que deve ser [b:675c9874cb]compativel[/b:675c9874cb] com o tipo indicado , [b:675c9874cb]e de fato o é[/b:675c9874cb]:
[b:675c9874cb]é so olhar o Helph do delphi[/b:675c9874cb]
Delphi syntax:
procedure CustomSort(Compare: TStringListSortCompare); virtual;
Delphi syntax:
type TStringListSortCompare = function(List: TStringList; Index1, Index2: Integer): Integer;
P:S ...edições 68 e 69 da ClubeDelphi possuem mais artigos que mostram o uso de funçoes de Callbacks
GOSTEI 0
Fabiano Góes
25/08/2006
Valeu Marcos Salles, pela infornação !!
é por isso que este é o melhor forum de Delphi e porque não de programação !!!
é por isso que este é o melhor forum de Delphi e porque não de programação !!!
GOSTEI 0