Fórum Ordenar Txt com TStringList #328094
25/08/2006
0
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
Curtir tópico
+ 0Posts
25/08/2006
Night_man
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
25/08/2006
Fabiano Góes
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
25/08/2006
Night_man
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
25/08/2006
Fabiano Góes
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
26/08/2006
Marco Salles
[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
Gostei + 0
26/08/2006
Fabiano Góes
é por isso que este é o melhor forum de Delphi e porque não de programação !!!
Gostei + 0