GARANTIR DESCONTO

Fórum Ordenar Txt com TStringList #328094

25/08/2006

0

[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 !!!


Fabiano Góes

Fabiano Góes

Responder

Posts

25/08/2006

Night_man

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

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;



Responder

Gostei + 0

25/08/2006

Fabiano Góes

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.



Responder

Gostei + 0

25/08/2006

Night_man

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
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]


Responder

Gostei + 0

25/08/2006

Fabiano Góes

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 !!!


Responder

Gostei + 0

26/08/2006

Marco Salles

[b:675c9874cb]So para acrescentar :[/b:675c9874cb]

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


Responder

Gostei + 0

26/08/2006

Fabiano Góes

Valeu Marcos Salles, pela infornação !!
é por isso que este é o melhor forum de Delphi e porque não de programação !!!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar