Como Ordenar Arquivo Texto ?
03/03/2006
0
[01, 06] = CHEQUE
[07, 08] = CONTA
[15, 03] = BANCO
[18, 04] = AGENCIA
[22, 01] = PASSADA
[23, 02] = ESCANINHO
[25, 12] = VALOR
gostaria de ordenar assim
CONTA, CHEQUE, BANCO, AGENCIA
só que ainda tem um porem:
a CONTA - que é de 08 deve ser ordenado pelos 07 primeiros caracter
o CHEQUE - que é de 06 deve ser ordenado pelos ultimos 04 caracter
BANCO - os 03
agencia - os 04
Não sei se deu pra entender, não sei se é possivel fazer isso com texto ou terei que jogar em um banco de dados depois fazer um select, se der pra fazer com texto eu prefiro.
Bom galera essa está dificil espero que os craques aqui do forum consiga resolver, se não estou perdido :(
ate mais !!!
Fabiano Góes
Post mais votado
03/03/2006
var Origem: TStringList; // Objeto que irá conter a lista ordenada TempList: TStringList; Buffer: TStringList; // Objeto temporário que irá ordernar a lista i: integer; begin Origem := TStringList.Create; Buffer := TStringList.Create; TempList := TStringList.Create; try Origem.LoadFromFile(Arquivo); TempList.LoadFromFile(Arquivo); // Monta cada linha para ser ordenada e acrescenta o caracter ´*´ mais // o indice da linha for i := 0 to (Origem.Count - 1) do Buffer.Add(RetornaLinha(Origem.Strings[i]) + ´*´ + IntToStr(i)); // Ordena a lista Buffer.Sorted := true; // Apaga a lista inicial Origem.Clear; // Para montar a lista ordenada completa, devemos pegar de cada linha da lista // ordenada o indice e adicionar na lista completa for i := 0 to (Buffer.Count - 1) do Origem.Add(TempList[RetornaIndice(Buffer.Strings[i])]); // Salvamos a lista completa ordenada no arquivo Origem.SaveToFile(Arquivo); finally FreeAndNil(Origem); FreeAndNil(Buffer); FreeAndNil(TempList); end; end;
Rjun
Mais Posts
03/03/2006
Kitsystem
Vc tera que importar para um banco de dados ou um listbox e ordenar ou crar uma função com record para tratar o arquivo texto
03/03/2006
Edilcimar
03/03/2006
Fabiano Góes
Será que você ou alguem poderia me dar um exemplo de como fazer isso com matriz ???
03/03/2006
Rjun
procedure OrdenarArquivoTexto(Arquivo: string); // Retorna os caracteres que devem ser ordenados function RetornaLinha(Linha: string) : string; begin result := Copy(Linha, 7, 7) + Copy(Linha, 2, 4) + Copy(Linha, 15, 3) + Copy(Linha, 18, 4); end; // Retorna o indice da linha ordenada function RetornaIndice(Linha: string) : integer; var Posicao, Restante: integer; begin Posicao := Pos(´*´, Linha); Restante := Length(Linha) - Posicao; result := StrToInt(Copy(Linha, Posicao + 1, Restante)); end; var Origem: TStringList; // Objeto que irá conter a lista ordenada Buffer: TStringList; // Objeto temporário que irá ordernar a lista i: integer; begin Origem := TStringList.Create; Buffer := TStringList.Create; try Origem.LoadFromFile(Arquivo); // Monta cada linha para ser ordenada e acrescenta o caracter ´*´ mais // o indice da linha for i := 0 to (Origem.Count - 1) do Buffer.Add(RetornaLinha(Origem.Strings[i]) + ´*´ + IntToStr(i)); // Ordena a lista Buffer.Sorted := true; // Apaga a lista inicial Origem.Clear; // Para montar a lista ordenada completa, devemos pegar de cada linha da lista // ordenada o indice e adicionar na lista completa for i := 0 to (Buffer.Count - 1) do begin ShowMessage(Buffer.Strings[i]); Origem.Add(Buffer[RetornaIndice(Buffer.Strings[i])]); end; // Salvamos a lista completa ordenada no arquivo Origem.SaveToFile(Arquivo); finally FreeAndNil(Origem); FreeAndNil(Buffer); end; end;
03/03/2006
Aroldo Zanela
Minha sugestão seria algo parecido com a do RJun (usando TStringList). Só por curiosidade - Você está implementando um sistema para classificadora de cheques? (ABC Bull, NCR, Etc)
03/03/2006
Fabiano Góes
sim estou implementando um sistema para classificadora de cheques,
o sistema já esta gerando tabela para a Bull(Recognition) e agora estou tentando gerar para a NCR.
Você poderia me dar um codigo exemplo de como ordenar esses arquivo com TStringList ????
Grato....
03/03/2006
Fabiano Góes
Desculpe a minha iguinorancia.
o seu codigo funciona, porem ele não mantem o mesmo layout, ou seja:
o arquivo original:
000001011758900330108117000000015980 000001011802410330108203000000017605 000001100024501043013201000000007600 000001101386311510112112000000005000 000001254456853410553116000000003000
o seu codigo gera assim:
371379300693412962937000000014429*1793 381071427433410140145000000016000*9999 122140535063991212056000000020617*9416 103356900031041634698000000024200*12663 400045702161510084571000000008446*3687 342003304403410146332000000018045*4836
o original layout é de 36 posições ele apenas deveria ser reordenadoe manter as mesmas 36 posições.
o seu codigo tirando o *Indice fica com 33 posições.
Desculpe, mais esta confuso pra mim tambem, não sei se estou conseguindo me expressar.
03/03/2006
Fabiano Góes
CHEQUE[01, 06] + CONTA[07, 08] + BANCO[15, 03] + AGENCIA[18, 04] + PASSADA[22, 01] + ESCANINHO[23, 02] + VALOR[25, 12]
Apenas com a ordenação diferente
(CONTA, CHEQUE, BANCO, AGENCIA)
Só que:
a CONTA - que é de 08 deve ser ordenado pelos 07 primeiros caracter
o CHEQUE - que é de 06 deve ser ordenado pelos ultimos 04 caracter
BANCO - os 03
agencia - os 04
03/03/2006
Fabiano Góes
:D
Exatamente o que eu precisava !!!!!!!!
Valeu cara, você é craque mesmo heimmmm, parabens !!!
Quando eu tiver ao menos um pouco do seu conhecimento espero poder ajudar outras pessoas aqui no forum também
Grato.....
Até mais !!!!
Clique aqui para fazer login e interagir na Comunidade :)