GARANTIR DESCONTO

Fórum Criar um .txt com informações de 2 arquivos distintos #431422

20/12/2012

0

Boa tarde,
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

William Calisto

Responder

Posts

20/12/2012

Pjrm1470

Você sabia que o TStringList abre arquivo de texto?
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.
Responder

Gostei + 0

20/12/2012

Pjrm1470

Esqueci de mencionar:
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).
Responder

Gostei + 0

20/12/2012

Claudia Nogueira

Tenta assim:

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;
Responder

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
Responder

Gostei + 0

20/12/2012

Pjrm1470

Faz assim... coloque como é o layout desses arquivos... tipo... pelo que estou vendo...
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)
posição | descrição
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.
Responder

Gostei + 0

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

Aceitar