Fórum Criar um .txt com informações de 2 arquivos distintos #431422
20/12/2012
0
Tenho uma duvida, queria saber se tem uma maneira de pegar 2 arquivos txt comparar uma posição especifica de cada linha e criar outro, sendo que o arquivo maior no qual sera a base para comparar ira criar uma condição, quando não for encontrar o valor ira acrescer somente o numero 2 na linha debaixo, e continuara com o looping que ira comparar o primeiro com o segundo se tiver o mesmo valor ira acrescentar tal linha embaixo ... fica mais fácil com exemplo
ex:
Arq1.txt
1 pedro roberto 1234 rua carlos
1 Jose lauro 0034 rua antonio
1 carlos moreira 5200 rua antonieta
Arq2.txt
2 pedreiro 0034 trabalhando
2 mecanico 5200 desligado
---------------------------------------
O progrma deveria gerar algo parecido com isso
Arq.3
1 pedro roberto 1234 rua carlos
2
1 Jose lauro 0034 rua antonio
2 pedreiro 0034 trabalhando
1 carlos moreira 5200 rua antonieta
2 mecanico 5200 desligado
Sei como buscar uma string no texto porem ano sei como abrir 2 arquivo e fazer uma comparação por linha.
Alguém pode me ajudar!
William Calisto
Curtir tópico
+ 0Posts
20/12/2012
Pjrm1470
Crie uma variavel do tipo e de o comando "LoadFromFile()".
Cada item do string list será uma linha do seu arquivo. Agora validação com relação a valores entre as linhas ai já é uma validação muito bem elaborada que teras de fazer com as funções "Pos", "Copy", "ReplaceStr" (uses StrUtils, SysUtils).
Qualquer duvida basta perguntar que explico. e se não compreendeu tento usar outras palavras.
Abraço.
Gostei + 0
20/12/2012
Pjrm1470
no seu caso... criaria 3 TStringList.
- 1 para o primeiro arquivo
- 1 para o segundo arquivo
- e mais 1 pra a construção do ultimo.
Dica: Trabalhe de forma simples. Dos trabalhos mais simples surgem os mais bonitos e complexos (varia, rsrs).
Gostei + 0
20/12/2012
Claudia Nogueira
procedure TForm1.BitBtn1Click(Sender: TObject);
Var
arquivo1, arquivo2 : TStringList;
i, j : Integer;
sLinha : String;
bInsere : Boolean;
begin
try
arquivo1 := TStringList.Create;
arquivo2 := TStringList.Create;
arquivo1.LoadFromFile('c:\arq1.txt');
arquivo2.LoadFromFile('c:\arq2.txt');
for i := 0 to arquivo2.Count - 1 do
arquivo1.Add(arquivo2[i]);
arquivo2.Clear;
//Para excluir os repetidos
for i := 0 to arquivo1.Count - 1 do
begin
sLinha := arquivo1[i];
bInsere := True;
for j := 0 to arquivo2.Count - 1 do
begin
if sLinha = arquivo2[j] then
begin
bInsere := False;
Break;
end;
end;
if bInsere then
arquivo2.Add(sLinha);
end;
arquivo2.SaveToFile('c:\arq3.txt');
finally
arquivo1.Free;
arquivo2.Free;
end;
end;
Gostei + 0
20/12/2012
William Calisto
PJRM1470 ,
Olha já usei alguma coisa mais o que não to conseguindo no momento é vamos dizer transformar a logica em algo concreto ( script), tipo assim :
procedure TForm1.BitBtn1Click(Sender: TObject); var slEntrada1,slEntrada2,slSaida: TStringList; i, j : Integer; slEntrada1 := TStringList.Create; slEntrada2 := TStringList.Create; slSaida := TStringList.Create; slEntrada1.LoadFromFile (opendialog1.FileName); slEntrada2.LoadFromFile (opendialog2.FileName); slSaida.Add(EmptyStr); for i := 0 to slEntrada.Count - 1 do if Copy(slEntrada1[i],14,4) = Copy(slEntrada2[i],14,4) then slSaida.add( // Copia linha do "slEntrada1" vai para linha debaixo e copia linha do "slEntrada2" e pula para linha debaixo ) else if Copy(slEntrada1[i],14,4) <>Copy(slEntrada2[i],14,4) then slSaida.add( // Copia linha do "slEntrada1" vai para linha debaixo e acrecenta o valor "2" e pula para linha debaixo ) if slSaida[0] = EmptyStr then slSaida.Delete(0); FreeAndNil( slEntrada1 ); FreeAndNil( slEntrada2 ); FreeAndNil( slSaida ); Close; end;
Algo mais ou menos assim, deve estar tudo errado mais é so para monstrar mais ou menos o que eu quero.
Mas se puder explicar de outra maneira, ai quem sabe nao consigo ver alguma saida ^^
Claudiadnh.
É quase isso que eu quero porem tenho que comparar o campo tipo ID que fica na posição 14,4 de um arquivo e comparar com o outro, os que não tiver o ID do segundo arquivo só vai acrescentar a Linha do arquivo 1 e abaixo uma linha somente com a inicial 2.
É que as vezes a logica nao sai por falta de algum componente que nao sei ... sei la rsrs
Gostei + 0
20/12/2012
Pjrm1470
Arquivo 1:
[nome] [sobrenome] [numero] [endereço]
Arquivo 2:
[nome] [numero] [outro]
Isso facilita programar a lógica da leitura da posição que você quer... em banco (BB, Caixa, Santander, etc...) eles usam posição para demarcar o que será... tipo:
Layout de cobrança (apenas um exemplar a grosso modo, você consegue um exemplar desse na internet ou ligando pra algum banco ou indo no site deles)
1-3 | codigo
4-31 | nome
32-40 | telefone
Assim vc pode sabe que da posição inicial até a final vc tem um certo registro.
Como é o layout de seus arquivos!?
Obs.: Alguns estão começando a usar xml para substituir os txt.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)