Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

orc

[RESOLVIDO]Digito Verificador em uma TStringList

Recommended Posts

Bom Dia , Tenho um problema aqui preciso de uma dica pois tenho que jogar um arquivo txt dentro de uma stringlist e sair procurando inicialmente onde na primeira coluna possuo um digito verificador que inicia um texto que tenho que copiar e este texto tem várias linhas o qual tem um digito verificador de fim do texto , gostaria de uma ajuda dos amigos para resolver este problema Grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas o que deseja fazer ? Copiar somente o que estiver entre este "digito verificador" ?

isso mesmo copiar somente o que esta dentro deste digito verificador

Compartilhar este post


Link para o post
Compartilhar em outros sites

Montei um pequeno exemplo, usando TRichEdit, que já tem funções de busca, algo como:

 

procedure TForm1.BitBtn1Click(Sender: TObject);var	posIni, posFim: integer;	function Pedaco(str: string; posIni, posfim: integer):string;	var		s: string;		x: integer;	begin	s:='';	for x:=posIni to posFim do		begin		if length(str) >= x then			s:=s + str[x];		end;	Pedaco:=Trim(s);	end;beginposIni:=RichEdit1.FindText('/*',0,length(RichEdit1.Text),[]) + 3; //Adiciona mais 3 para não pegar o /*posFim:=RichEdit1.FindText('*/',0,length(RichEdit1.Text),[]);ShowMessage(Pedaco(RichEdit1.Text,posIni,posFim));end;

No caso precisaria somente colocar e seta o texto para o RichEdit...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Montei um pequeno exemplo, usando TRichEdit, que já tem funções de busca, algo como:

procedure TForm1.BitBtn1Click(Sender: TObject);var	posIni, posFim: integer;	function Pedaco(str: string; posIni, posfim: integer):string;	var		s: string;		x: integer;	begin	s:='';	for x:=posIni to posFim do		begin		if length(str) >= x then			s:=s + str[x];		end;	Pedaco:=Trim(s);	end;beginposIni:=RichEdit1.FindText('/*',0,length(RichEdit1.Text),[]) + 3; //Adiciona mais 3 para não pegar o /*posFim:=RichEdit1.FindText('*/',0,length(RichEdit1.Text),[]);ShowMessage(Pedaco(RichEdit1.Text,posIni,posFim));end;
No caso precisaria somente colocar e seta o texto para o RichEdit...
Não funciou não o texto que verifico é esse ó o digito verificador são as '@@@@' ==================================================##200761270000375#### data da publicação: 27/08/2007 página: 0112nome pesquisado : caixa economica federaljudiciário i - parte iijustiça federal 1ª vara coordenadoria - são joão da boa vista EXPEDIENTE Nº 1481@@@@2007.61.27.000037-5 . BENEDITA LEOPOLDINO VICENTE (ADV. SP096266 JOAO ANTONIO BRUNIALTI E ADV. SP168977 VANDERLEI VEDOVATTO) X CAIXA ECONOMICA FEDERAL - CEF (ADV. SP206542 ANA LUIZA ZANINI MACIEL) Isso posto, com fulcro no artigo 269, I do Codigo de Pro- cesso Civil, julgo parcialmente procedente o pedido para con- denar a Caixa Economica Federal a pagara diferenca apurada entre a correcao monetaria creditada no mes de junho de 1987 (LBC de 18,02%, acrescidos de juros mensais de 0,5%) e janeiro de 1989 (LFTN de 22,9710%, acrescido de juros contratuais de 0,5% ao mes) e aquela devidaem decorrencia do direito aqui reconhecido (referente aos IPC’s de 26,06% e 42,72%, respecti- vamente, acrescidos dos juros contratuais de 0,5% ao mes). Deve, ainda, incidir correcao monetaria a partir da data em que nao houve o credito integral do rendimento, nos termos do Pro- vimento n. 64 da Corregedoria da Justica Federal da 3ª Regiao, nos seguintes termos: a) de mar/86 a jan/89 - OTN (DL 2284/86), observando-se que os debitos anteriores a 16/jan/89 deverao ser multiplicados, neste mes, por 6,17. OBS: de abril/86 a fev/87 OTN “pro-rata”.B) janeiro de 1989 a fevereiro de 1991: utilizar o BTN, observando que o ultimo BTN correspondeu a 126,8621 (Lei nº 7730/89);c) marco de 1991 a dezembro de 1991: INPC;d) janeiro de 1992 a outubro de 2000: UFIR (Lei nº 8383/91);e) novembro de 2000 em diante: IPCA-E mensal. Nos meses de janeiro de 1989 e marco de 1990, devem ser utilizados o IPC integral de 42,72% e 84,32%, respectivamente, com exclusao dos indices oficiais deinflacao em tais meses. Juros de mora a taxa de 1% ao mes nos termos do artigo 406 do Codigo Civil c.c. o artigo 161, 1º do CTN. Condeno-a, ainda, ao pagamento de honorarios advocaticios, fixados em 10 % (dez por cento) sobre o valor da condenacao, atualizado, ante a sucumbencia minima da parte autora. Custas ex lege. P.R.I.@@@@

Compartilhar este post


Link para o post
Compartilhar em outros sites

Precisa somente mudar uma linha, ficando:

 

procedure TForm1.BitBtn1Click(Sender: TObject);var	posIni, posFim: integer;	function Pedaco(str: string; posIni, posfim: integer):string;	var		s: string;		x: integer;	begin	s:='';	for x:=posIni to posFim do		begin		if length(str) >= x then			s:=s + str[x];		end;	Pedaco:=Trim(s);	end;beginposIni:=RichEdit1.FindText('@@@@',0,length(RichEdit1.Text),[]) + 5;posFim:=RichEdit1.FindText('@@@@',posIni + 5,length(RichEdit1.Text),[]);ShowMessage(Pedaco(RichEdit1.Text,posIni,posFim));end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Orc,Você pode trazer tudo para um componente do Delphi e depois tratar o texto com a função StringReplace(<<string_a_ser_modificada>>, '@@@@', '', [rfReplaceAll]).Claro, estou imaginando que esse dígito verificador aparece SOMENTE no início e no fim do texto. :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Precisa somente mudar uma linha, ficando:

procedure TForm1.BitBtn1Click(Sender: TObject);var	posIni, posFim: integer;	function Pedaco(str: string; posIni, posfim: integer):string;	var		s: string;		x: integer;	begin	s:='';	for x:=posIni to posFim do		begin		if length(str) >= x then			s:=s + str[x];		end;	Pedaco:=Trim(s);	end;beginposIni:=RichEdit1.FindText('@@@@',0,length(RichEdit1.Text),[]) + 5;posFim:=RichEdit1.FindText('@@@@',posIni + 5,length(RichEdit1.Text),[]);ShowMessage(Pedaco(RichEdit1.Text,posIni,posFim));end;
Grande Marcio funfou redondinha totalmente agarantido Valeu por mais essa ajuda Fica com Deus

Compartilhar este post


Link para o post
Compartilhar em outros sites

só mais uma questão Marcionão tem como retirar as linhas en branco que ficam entre os digitos verificadores e deixar tudo como se estivesse em uma linha só pq eu tenho que pegar estes dados que estão entre os digitos verificadores e copialo para um arquivo onde os registros são 1 por linha Grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso você quer remover o "enter" certo ? Pois linhas em brancas no exemplo não teria, visto que entre as chaves '@@@@' tem somente texto...

olha esse exemplo, entre as chaves tem uma linha em branco==================================================##200763190027356#### data da publicação: 27/08/2007 página: 0221nome pesquisado : caixa economica federaljudiciário i - parte i@@@@tribunal regional .. federal da 3ª região juizado especial federal de lins 31ª subseção judiciária do estado de são paulo @@@ 2007.63.19.002735-6- BENICIA APARECIDA MAR- QUES (ADV.MARIANE DELAFIORI HIKIJI,OAB/SP 201.730) X CAIXA ECONOMICA FEDERAL - CEF: “Intime-se a parte autora para comprovar, no prazo de 10 (dez) dias, even- tual vinculo empregaticio posterior ao mes de abril/1977”.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas varre o arquivo ou o Rich enquanto carrega e remove, validando se for diferente de ''

eu carrego o arquivo dentro do rich ai vejo aonde estão os digitos verificadores e copio eles mais o problema é que tenho que colar este texto em um arquivo .txt que usa 1 linha pra cada registro, e quando passo essa linha que pego do rich edit para o arquivo de texto ele leva tb a formatação com a linha em branco a mais, eu queria retirar essa linha e deixar tudo em apenas uma linha

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, então pode-se criar uma procedure que varre o RichEdit e valida as linhas, removendo os espaços em branco e os "enter", algo como:

 

procedure TForm1.BitBtn1Click(Sender: TObject);var	posIni, posFim: integer;	function Pedaco(str: string; posIni, posfim: integer):string;	var		s: string;		x: integer;	begin	s:='';	for x:=posIni to posFim do		begin		if length(str) >= x then			s:=s + str[x];		end;	Pedaco:=Trim(s);	end;	procedure Remove;	var		x: integer;		temp: string;	begin	for x:=0 to RichEdit1.Lines.Count - 1 do		if RichEdit1.Lines.Strings[x] = '' then			RichEdit1.Lines.Delete(x);	temp:=RichEdit1.Text;	for x:=1 to Length(RichEdit1.Text) do		if (RichEdit1.Text[x] = #13) or (RichEdit1.Text[x] = #$D) or (RichEdit1.Text[x] = #$A) then			temp[x]:=' ';	RichEdit1.Text:=temp;	end;beginposIni:=RichEdit1.FindText('@@@@',0,length(RichEdit1.Text),[]) + 5;posFim:=RichEdit1.FindText('@@@@',posIni + 5,length(RichEdit1.Text),[]);RichEdit1.Text:=Pedaco(RichEdit1.Text,posIni,posFim);Remove();ShowMessage(RichEdit1.Text);end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, então pode-se criar uma procedure que varre o RichEdit e valida as linhas, removendo os espaços em branco e os "enter", algo como:

procedure TForm1.BitBtn1Click(Sender: TObject);var	posIni, posFim: integer;	function Pedaco(str: string; posIni, posfim: integer):string;	var		s: string;		x: integer;	begin	s:='';	for x:=posIni to posFim do		begin		if length(str) >= x then			s:=s + str[x];		end;	Pedaco:=Trim(s);	end;	procedure Remove;	var		x: integer;		temp: string;	begin	for x:=0 to RichEdit1.Lines.Count - 1 do		if RichEdit1.Lines.Strings[x] = '' then			RichEdit1.Lines.Delete(x);	temp:=RichEdit1.Text;	for x:=1 to Length(RichEdit1.Text) do		if (RichEdit1.Text[x] = #13) or (RichEdit1.Text[x] = #$D) or (RichEdit1.Text[x] = #$A) then			temp[x]:=' ';	RichEdit1.Text:=temp;	end;beginposIni:=RichEdit1.FindText('@@@@',0,length(RichEdit1.Text),[]) + 5;posFim:=RichEdit1.FindText('@@@@',posIni + 5,length(RichEdit1.Text),[]);RichEdit1.Text:=Pedaco(RichEdit1.Text,posIni,posFim);Remove();ShowMessage(RichEdit1.Text);end;
marcio você passa mal hein funfou redondinha Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.