ajustar texto no listbox delphi

Delphi

29/10/2013

Pessoal bom dia, estou tentando ajustar um texto no listbox, tenho uma rotina que integra a consulta do SPC e me traz o resultado no listbox, porem esta vindo da seguinte forma:

CONSULTA SCPC INTEGRADO
S
OLICITANTE 52184622 - SP-SCP/S.O.S CONECTIVIDADE NO
ME CONSULTA MIX GESTCO DOC
UMENTOS CPF************ RG0000222222222 PARA
METROS BC000 AG0000 CC000000 CH00000000 QT00
----------
-- S C P C ---------------------------------- N A D A C O N S T A
------------
CONSULTAS ANTERIORES --------------------- N A D A C O N S T A
------------ D
EVOLUCOES INFORMADAS P/ CCF ------------- N A D A C O N S T A

------------ CONSULTAS ANTERIORES --------------------- N A D A C O N S T A
--
---------- SINTESE CADASTRAL ----------------------------------------------
NOME
ANDRE LUIZ UCELLA DOCUM
ENTO CPF*********** T.ELEITOR 0000000000000
NASCIME
NTO 14/12/1987
NOME MAE
ANA ROSA FERREIRA UCELLA

INFORMACOES CONFIDENCIAIS SAO PAULO 28/10/2013 171858 TCP0000
NADA CONSTA - CONSULTA 00000


E TERIA QUE SAIR ASSIM :

CONSULTA SCPC INTEGRADO
SOLICITANTE 52184622 - SP-SCP/S.O.S CONECTIVIDADE
NOME CONSULTA MIX GESTCO
DOCUMENTOS CPF00000000000 RG0000222222222
PARAMETROS BC000 AG0000 CC000000 CH00000000 QT00

------------ S C P C ---------------------------------- N A D A C O N S T A

------------ CONSULTAS ANTERIORES --------------------- N A D A C O N S T A

------------ DEVOLUCOES INFORMADAS P/ CCF ------------- N A D A C O N S T A

------------ CONSULTAS ANTERIORES --------------------- N A D A C O N S T A

------------ SINTESE CADASTRAL ----------------------------------------------

NOME ANDRE LUIZ UCELLA
DOCUMENTO CPF00000000000 T.ELEITOR 0000000000000
NASCIMENTO 14/12/1987
NOME MAE ANA ROSA FERREIRA UCELLA

INFORMACOES CONFIDENCIAIS SAO PAULO 28/10/2013 171858 TCP9999
NADA CONSTA - CONSULTA 13181

alguem sabe como ajustar este texto ? lembrando que nem sempre sera as mesmas informações no listbox.
Andre Ucella

Andre Ucella

Curtidas 0

Respostas

Marcos Oliveira

Marcos Oliveira

29/10/2013

André, se o texto vier mesmo do jeito que você colocou, será complicado formatar, porque algumas palavras estão quebradas.
Como é que você recebe esse retorno? Via arquivo texto?

Att,

Marcos
GOSTEI 0
Andre Ucella

Andre Ucella

29/10/2013

posso receber em um arquivo .txt ou direto no listbox da seguinte forma:

Procedure para receber as informações e conexão com a SCPC

procedure TForm4.EnviaCSR10(Requisicao : String);
var
Texto01, Texto02, Texto03, Texto04, Texto05, Texto06: String;
Texto07, Texto08, Texto09, Texto10, Texto11, Texto12: String;
CodigoRet, ResultCons, Resposta: String;
QtdeTextos: Integer;
NovaReq: Boolean;
begin
{Envia a Consulta e trata a resposta}
try
CodigoRet := '';
ResultCons := '';
IdTCPClient:=TIdTCPClient.Create(nil);


IdTCPClient.Host := '187.11.182.170';
IdTCPClient.Port := 5020;
IdTCPClient.Connect(10000); {Timeout de 10 segundos}

repeat
NovaReq := False;

{Tenta enviar a string do layout para o servidor de aplicação...}
IdTCPClient.Write(Requisicao);

{Espera o retorno da resposta do servidor}
Resposta := IdTCPClient.CurrentReadBuffer;


{Verifica se o servidor retornou alguma resposta vazia}
if Trim(Resposta) = '' then
raise Exception.Create('O servidor retornou uma resposta inesperada.');

{Pega o retorno da resposta}
CodigoRet := Copy(Resposta, 40, 1);

{Texto da Resposta}
Texto01 := Copy(TrocaCaracterEspecial(Resposta, True), 049, 79);
Texto02 := Copy(TrocaCaracterEspecial(Resposta, True), 128, 79);
Texto03 := Copy(TrocaCaracterEspecial(Resposta, True), 207, 79);
Texto04 := Copy(TrocaCaracterEspecial(Resposta, True), 286, 79);
Texto05 := Copy(TrocaCaracterEspecial(Resposta, True), 365, 79);
Texto06 := Copy(TrocaCaracterEspecial(Resposta, True), 444, 79);
Texto07 := Copy(TrocaCaracterEspecial(Resposta, True), 523, 79);
Texto08 := Copy(TrocaCaracterEspecial(Resposta, True), 602, 79);
Texto09 := Copy(TrocaCaracterEspecial(Resposta, True), 681, 79);
Texto10 := Copy(TrocaCaracterEspecial(Resposta, True), 760, 79);
Texto11 := Copy(TrocaCaracterEspecial(Resposta, True), 839, 79);
Texto12 := Copy(TrocaCaracterEspecial(Resposta, True), 918, 79);

{Verifica se houve erro}
if CodigoRet = '9' then
lst1.Items.Add(Texto01)
else
begin
{Quantidade de textos preenchidos}
QtdeTextos := StrToInt(Copy(Resposta, 47, 2));

{Verifica o resultado da consulta}
ResultCons := Copy(Resposta, 41, 1);

{Número da consulta ---> virá apenas quando nada consta}
//lblNumero.Caption := Copy(Resposta, 42, 5);

{Verifica se a transmissão foi concluida}
if QtdeTextos >= 01 then lst1.Items.Add(Texto01);
if QtdeTextos >= 02 then lst1.Items.Add(Texto02);
if QtdeTextos >= 03 then lst1.Items.Add(Texto03);
if QtdeTextos >= 04 then lst1.Items.Add(Texto04);
if QtdeTextos >= 05 then lst1.Items.Add(Texto05);
if QtdeTextos >= 06 then lst1.Items.Add(Texto06);
if QtdeTextos >= 07 then lst1.Items.Add(Texto07);
if QtdeTextos >= 08 then lst1.Items.Add(Texto08);
if QtdeTextos >= 09 then lst1.Items.Add(Texto09);
if QtdeTextos >= 10 then lst1.Items.Add(Texto10);
if QtdeTextos >= 11 then lst1.Items.Add(Texto11);
if QtdeTextos = 12 then lst1.Items.Add(Texto12);

{Verifica se a existem dados para serem transmitidos}
if CodigoRet = '1' then
begin
NovaReq := True;
Requisicao := #13;
end;
end;

until NovaReq = False;

if ResultCons = '0' then lbl5.Caption := 'Nada Consta'
else
if ResultCons = '1' then lbl5.Caption := 'Nada Consta com Passagem'
else
if ResultCons = '2' then lbl5.Caption := 'Constam Informações';

finally
IdTCPClient.Disconnect;
RespostaLiteral:= StrToPChar(Resposta);
end;
end;

EVENTO DO BOTAO DE CONSULTA, onde realiza a consulta e alimenta as informações.

procedure TForm4.btn1Click(Sender: TObject);
var
StrEnvio: String;
begin
{Monta a string de envio padrão para uma consulta integrada}
StrEnvio := Completa( 6, 'D', 'CSR10') +
Completa( 2, 'D', '09') +
Completa(15, 'D', '') +
Completa( 8, 'E', edt1.Text, '0') +
Completa( 8, 'D', edt2.Text) +
Completa( 8, 'D', 'CIN') +
Completa(20, 'D', 'CPF'+edt3.Text) +
Completa(20, 'D', 'RG222222222') +
Completa(20, 'D', '') +
Completa(50, 'D', 'CONSULTA MIX GESTÃO') +
Completa( 8, 'D', '00000000') +
Completa( 8, 'D', FormatDateTime('ddmmyyyy', Date)) +
{Informações do cheque via digitação}
Completa( 3, 'E', '', '0') +
Completa( 5, 'E', '', '0') +
Completa(15, 'E', '', '0') +
Completa( 1, 'E', '', '0') +
Completa( 8, 'E', '', '0') +
Completa( 1, 'E', '', '0') +
{---------------------------------------}
Completa( 1, 'E', '', '0') +
Completa( 2, 'D', 'XX') +
Completa(11, 'E', FloatToStr((10.55 * 100)), '0') +
Completa(50, 'D', '') +
Completa( 4, 'E', '', '0') +
Completa( 9, 'E', '', '0') +
Completa( 8, 'E', '', '0') +
Completa( 1, 'D', '') +
Completa( 8, 'E', '', '0') +
Completa( 1, 'E', 'C');


try
lst1.Items.BeginUpdate;
lst1.Clear;
EnviaCSR10(StrEnvio);
finally
lst1.Items.EndUpdate;
end;
end;
GOSTEI 0
Andre Ucella

Andre Ucella

29/10/2013

Eu consegui pegar todo o texto e jogar em uma linha só, teria algum método agora para contar a quantidade de caracteres e quebrar a linha depois da quantidade estabelecida, e ir repetindo o processo até o texto acabar ?
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

29/10/2013

Mas você tem no retorno a quantidade de caracteres por linha?
GOSTEI 0
Andre Ucella

Andre Ucella

29/10/2013

sim são 79 caracteres por linha
GOSTEI 0
Marcos Oliveira

Marcos Oliveira

29/10/2013

André,

Fiz o código abaixo, levando em consideração que o texto esteja tudo em uma linha só.
Caso precise, é só adaptar às suas necessidades.

var
   i, Contador: Integer;
   s, Texto: String;
begin
     Texto := 'TEXTO A SER MANIPULADO...';
     s := '';

     Contador := 0;
     for i := 1 to Length(Texto) do
     begin
          if Contador = 79 then
          begin
               ListBox1.Items.Append(s);  // Aqui é adicionado a string no ListBox.
               s := '';
               Contador := 1;
          end
          else
              Inc(Contador);

          s := s + Copy(Texto,i,1);
     end;
end;


Att,

Marcos

GOSTEI 0
POSTAR