Como Ordenar Arquivo Texto ?
Tenho um arquivo texto de 36 posições sendo:
[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 !!!
[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
Curtidas 0
Melhor post
Rjun
03/03/2006
Você esta certo. Tem um erro no código mesmo. Crie mais uma StringList para guardar a lista trabalhada. Teste e veja se funciona.
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;
GOSTEI 1
Mais Respostas
Kitsystem
03/03/2006
Arquivo texto não tem indexação.
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
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
GOSTEI 0
Edilcimar
03/03/2006
tente jogar dentro de uma matriz, depois vc arruma a matriz do jeito que quiser
GOSTEI 0
Fabiano Góes
03/03/2006
Edilcimar,
Será que você ou alguem poderia me dar um exemplo de como fazer isso com matriz ???
Será que você ou alguem poderia me dar um exemplo de como fazer isso com matriz ???
GOSTEI 0
Rjun
03/03/2006
Eu não testei. Veja se funciona.
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;
GOSTEI 1
Aroldo Zanela
03/03/2006
Colega,
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)
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)
GOSTEI 0
Fabiano Góes
03/03/2006
Aroldo,
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....
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....
GOSTEI 0
Rjun
03/03/2006
O código que te passei não funcionou?
GOSTEI 0
Fabiano Góes
03/03/2006
RJun,
Desculpe a minha iguinorancia.
o seu codigo funciona, porem ele não mantem o mesmo layout, ou seja:
o arquivo original:
o seu codigo gera assim:
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.
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.
GOSTEI 0
Fabiano Góes
03/03/2006
Ah, deve manter tambem a seguencia de campo tipo:
Apenas com a ordenação diferente
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
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
GOSTEI 0
Fabiano Góes
03/03/2006
RJun,
: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 !!!!
: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 !!!!
GOSTEI 0