sidneyps 0 Denunciar post Postado Março 18, 2005 Eu recebo um arquivo TXT de meus clientes, importo elas para meu BD e as consisto. No campo OBSERVACAO as vezes vem observações do cliente que não são desejáveis e o que tenho que fazer é excluir ou alterá-las. Tá muito difícil abrir o arquivo e editar cada linha, pois as vezes o aquivo contém mais de 7.000 registros.O que eu preciso é dá um while no DB e toda vez que no campo OBSERVACAO tiver a observação indesejável o programa procura o registro exato no TXT e apagar ou edita a linha respectiva de observação.O que eu coloquei (para não mudar a estrutura do DB) no início de cada observação indesejável a letra R (de retirar) ou E (de editar), assim no while ele abre o aquivo recebido e apaga a observação.Mas as perguntas são:1)Ao localizar a linha que contém a referênia (CONTA), como excluir as palavras no espaço de observação ou alterar?Estrutura do DBLOCALLIVROCONTAOBSERVACAOEstrutura do arquivo TXT84419 8002001 nada foi encontrado neste prontuario 4545458884419 8003001 registro informado correto, manter contato 44444555Para entender o arquivo TXT:a linha:84419 8002001 nada foi encontrado neste prontuario 45454588o numero 84419 pertence ao campo LOCALo numero 80 pertence ao campo LIVROo numero 02001 pertence ao campo CONTAdepois vem a frase "nada foi encontrado neste prontuario" que pertence ao campo OBSERVACAOo número 45454588 deve ser desconsiderado.O procedimento que uso é este só que ele está retirando toda a linha e não apenas o espaço para observação que está na posição copy(arq,28,32).arq := TStringList.Create;If OpenDialog1.Execute thenarq.LoadFromFile(OpenDialog1.FileName);RZ.first;while not RZ.eof do beginIf (copy(RZOBSERV.value,1,1) = 'R') or (copy(RZOBSERV.value,1,1) = 'E') then beginfor i:= 0 to arq.count-1 do beginif (pos(RZconta.value, arq) > 0) then begins:= copy(RZOBSERV.Value,1,1);If s = 'R' then copy(arq) := ' 'else If s = 'E' then arq :=RZOBSERV.Value;end;end;end;RZ.next;end;arq.SaveToFile('c:\windows\desktop\fdia61.alt');arq.free;ShowMessage('Procedimento concluído, arquivo salvo!');end; Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Março 21, 2005 você quer apenas não gravar no bd ou editar o .txt tambem ? Compartilhar este post Link para o post Compartilhar em outros sites
sidneyps 0 Denunciar post Postado Março 21, 2005 você quer apenas não gravar no bd ou editar o .txt tambem ? <{POST_SNAPBACK}> RESPOSTA: Amigo, obrigado pela ajuda. Eu não altero o BD e sim o arquivo txt. Quando eu dou um while no DB, é visto todo o campo OBSERV: {If (copy(RZOBSERV.value,1,1) = 'R') or (copy(RZOBSERV.value,1,1) = 'E') then begin} Se caso tiver na primeira posição a Letra 'R' , ele localiza a CONTA: {if (pos(RZconta.value, arq) > 0) then begin} e tira do arquivo TXT na coluna 28, 32 espaços. {If s = 'R' then copy(arq) := ' '} o certo deveria ser If s = 'R' then copy(arq[1],28,32) := ' ' mas assim não funciona. você pode me ajudar? Obrigado Sidney Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Março 21, 2005 uma ideia TStringList ... procedure TForm1.Button1Click(Sender: TObject); var ts : TStringList; i : integer; begin ts := TStringList.Create; Screen.Cursor := crHourGlass; with ts do try LoadFromFile('C:\Trans\lixo.txt'); for i:=0 to (TS.Count - 1) do Strings := StringReplace(Strings,'MOTTA','QWERT',[rfReplaceAll,rfIgnoreCase]); SaveToFile('C:\Trans\lixo.txt'); finally Screen.Cursor := crDefault; Free; end; end; fez para um arquivo de 93 colunas 30000 em menos de 3 seg. feito de D5 rodou num Pt4 Compartilhar este post Link para o post Compartilhar em outros sites