Remover Espaço em branco

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

JUDIVAN CONTABIL
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 20 Mai 2011 07:42
Localização: IMACULADA-PB

Remover Espaço em branco

Mensagem por JUDIVAN CONTABIL »

Ola pessoal,

Gataria de ajuda para remover espaços em branco tanto na direita quanto na esquerta, uso o clipper 5.2

Faço assim: mas nao esta removendo.

VNome:=Alltrim(razao)

Agradece

Judivan
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Remover Espaço em branco

Mensagem por Maligno »

Sendo a variável do tipo caractere, para remover os espaços em branco à direita e à esquerda usa-se a função AllTrim() mesmo. Tem que funcionar. Se você utilizar o debugger, verá que logo após o uso dessa função a variável é ajustada.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Remover Espaço em branco

Mensagem por Jairo Maia »

Olá Judivan,

Salvo se vc estiver usando o HARD CARRIAGE RETURN como caracter 141. Se for isso, o AllTrim, não entende os espaços do final como tal. Se não for isso, o Maligno já disse tudo.

Considerando que seja isso, faça assim:

Código: Selecionar todos

VNome:=Alltrim(MemoTran(razao))
MemoTran( cExpr, cHard-Fix, cSoft-Fix )
MemoTran sem a definição dos parametros cHard-Fix e cSoft-Fix, retorna a expressão sem os carateres de Final de linha e retorno de carro. Se vc precisar somar esta linha a outra, deve acrescentar os controles:

Código: Selecionar todos

VNome+Chr(13)+Chr(10)
ou
Vnome+Chr(141)+Chr(10)
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
JUDIVAN CONTABIL
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 20 Mai 2011 07:42
Localização: IMACULADA-PB

Remover Espaço em branco

Mensagem por JUDIVAN CONTABIL »

Ola Jairo Maia
Fiz assim:
VNome:=Alltrim(MemoTran(razao))
Mas nao funcionou.

Judivan
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Remover Espaço em branco

Mensagem por Jairo Maia »

Olá Judivan,

Então vc tem caracteres que está tomando como espaço e não são. Existem caracteres que podem parecer espaço mas não são espaços. P.ex. o caracter 255.

Sem usar AllTrim, MemoTran, ou qualquer outra função, faça o teste com o exmplo abaixo. Coloque a função Testa_String no seu projeto, e chama a verificação:

Código: Selecionar todos

Testa_String( razao )

FuncTion Testa_String( cStr )
Local i, nCtr
Cls
For i = 1 To Len( cStr )
 nCtr := Asc( Uppe( SubsT( cStr, i, 1 ) ) )
 If nCtr # 32 .And. ( nCtr < 65 .Or. nCtr > 90 ) 
  Alert( "Caracter invalido => " + Str( nCtr ) )
 Endi
Next
Return
Se a janela Alert aparecer, o caracter é inválido.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
JUDIVAN CONTABIL
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 20 Mai 2011 07:42
Localização: IMACULADA-PB

Remover Espaço em branco

Mensagem por JUDIVAN CONTABIL »

Olá

deu caracter invalida, como corrigir.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Remover Espaço em branco

Mensagem por Jairo Maia »

Olá Judivan,

Estou considerando que não existe acentuação, levando em conta um tópico que vc pedia para remover caracteres especiais. Estou também levando em conta que essa variavel tenha o conteúdo de campo. Se a idéia for salvar em algum arquivo ASCII, não em banco de dados, vc precisa acrescentar os caracteres de controle.

Tente assim, e veja se vai funcionar:

Código: Selecionar todos

FuncTion Testa_String( cStr )
Local i, nCtr, cStrFix := Uppe(cStr)
Cls
For i = 1 To Len( cStr )
 nCtr := Asc( Uppe( SubsT( cStr, i, 1 ) ) )
 If nCtr # 32 .And. ( nCtr < 65 .Or. nCtr > 90 ) 
   cStrFix := StrTran( cStrFix, Chr( nCtr ) )
 Endi
Next
Return AllTrim( cStrFix )
Post se der resultado. Se não der resultado, forneça mais informações, p.ex., quais caractres acusou como inválido.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Remover Espaço em branco (DE UM MEMO)

Mensagem por Maligno »

Ah, sendo memo a história é outra. Quando for postar a dúvida, por favor, não se esqueça de dar os "detalhes" que fazem a diferença na análise. O colega Jairo está certo. Sendo um memo, o procedimento não será efetuado com um simples AllTrim().
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
JUDIVAN CONTABIL
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 20 Mai 2011 07:42
Localização: IMACULADA-PB

Remover Espaço em branco

Mensagem por JUDIVAN CONTABIL »

Desculpe, nao deu certo ainda
estou usando os dados abaixo:

Código: Selecionar todos

*****************************************************************
SELECT CONFIG
 vSETA1     :="|"
 vREG       :="0000"
 vSETA2     :="|"
 vCOD_VER   :=config->COD_VER
 vSETA3     :="|"
 vCOD_FIN   :=config->COD_FIN
 vSETA4     :="|"
 vDT_INI    :=LimpaStr(DTOC(vDataI))
 vSETA5     :="|"
 vDT_FIN    :=LimpaStr(DTOC(VdataF))
 vSETA6     :="|"
 vNOME      :=Testa_String(Substr(config->Razao,1,40))
 vSETA7     :="|"
 vCNPJ      :=STRZERO(Val(LimpaStr(CGC)),14)
 vSETA8     :="|"
 vCPF       :="0"
 vSETA9     :="|"
 vUF        :=config->UF
 vSETA10    :="|"
 *vIE        :=Alltrim(STR(Val(LimpaStr(Config->IE)),14))
 vIE        :=Testa_String(IE)

 vSETA11    :="|"
 vCOD_MUN   :=config->COD_MUNI
 vSETA12    :="|"
 vIM        :="0"
 vSETA13    :="|"
 vSUFRAMA   :="0"
 vSETA14    :="|"
 vIND_PERFIL:=config->IND_PERFIL
 vSETA15    :="|"
 vIND_ATIV  :=config->IND_ATIV
 vSETA16    :="|"


SELECT REG0000
IF LASTREC()=0
 APPEND BLANK

REPL SETA1 WITH vSETA1,;
     REG WITH vREG,;
     SETA2 WITH vSETA2,;
     COD_VER WITH vCOD_VER,;
     SETA3 WITH vSETA3,;
     COD_FIN WITH vCOD_FIN,;
     SETA4 WITH vSETA4,;
     DT_INI WITH vDT_INI,;
     SETA5 WITH vSETA5,;
     DT_FIN WITH vDT_FIN,;
     SETA6 WITH vSETA6,;
     NOME WITH vNOME,;
     SETA7 WITH vSETA7,;
     CNPJ WITH vCNPJ,;
     SETA8 WITH vSETA8,;
     CPF WITH vCPF,;
     SETA9 WITH vSETA9,;
     UF WITH vUF,;
     SETA10 WITH vSETA10,;
     IE WITH vIE,;
     SETA11 WITH vSETA11,;
     COD_MUN WITH vCOD_MUN,;
     SETA12 WITH vSETA12,;
     IM WITH vIM,;
     SETA13 WITH vSETA13,;
     SUFRAMA WITH vSUFRAMA,;
     SETA14 WITH vSETA14,;
     IND_PERFIL WITH vIND_PERFIL,;
     SETA15 WITH vSETA15,;
     IND_ATIV WITH vIND_ATIV,;
     SETA16 WITH vSETA16
ENDIF
********************
onde cria o seguinte arquivo

|0000|201|0|01052011|31052011|ADRIANA ACIOLE RODRIGUES                       |12222481000169|0                 |PB|              |20354  |0         |0        |A|1|

so que este aruivo tem que ficar sem os espaços, ou seja:
|0000|201|0|01052011|31052011|ADRIANA ACIOLE RODRIGUES|12222481000169|0|PB| |20354|0|0|A|1|
Desculpe

e agradeço mais uma vez

Judivan
Editado pela última vez por Maligno em 24 Jun 2011 17:53, em um total de 2 vezes.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Remover Espaço em branco (DE UM MEMO)

Mensagem por Jairo Maia »

Olá Maligno,
Pois é... Não está me parecendo que ele está extraindo o campo "razão" de um campo memo. Não entendi então pq não funcionou o ultimo exemplo.

Olá Judivan,
Da minha parte, vou pedir para vc anexar os arquivos CONFIG e REG0000 com alguns registros para podermos verificar o que está ocorrendo.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Remover Espaço em branco (DE UM MEMO)

Mensagem por Jairo Maia »

Judivan,

Observando melhor seu post, surgiu outra dúvida.
O resultado que vc está obtendo é exatamente este?:

Código: Selecionar todos

|0000|201|0|01052011|31052011|ADRIANA ACIOLE RODRIGUES |12222481000169|0 |PB| |20354 |0 |0 |A|1|
Ou seja, o problema é apenas um espaço depois de Razao? Pq se este é o resultado obtido, e como razão está sendo carregado com 40 caracteres, então se o problema for esse, verifique se quanto vc está montando a variavel: vSETA7 :="|", está realmente assim, ou em se em sua função não está assim " |", ou seja com um espaço antes. Assim como as demais que está chegando com espaço adicional. Pode ser nos "|" que eles estão colocados.

Se tiver correto, então como disse no post anterior, somente vendo seus arquivos para entender.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Remover Espaço em branco (DE UM MEMO)

Mensagem por Maligno »

Mas é memo ou não é????
Agora não está parecendo mesmo. Alterei o título de novo. :[

Ademais, na razão social, há uma função chamada Testa_String() que não deve limpar piçiroca nenhuma. Até porque há um SubStr(,,40). Se for pra eliminar os espaços INTERNOS não tem Alltrim() que funcione mesmo. A única solução é alterar a string ENQUANTO ela é formada (aquele bloco inicial), e não depois que a caca já estiver feita.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
JUDIVAN CONTABIL
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 20 Mai 2011 07:42
Localização: IMACULADA-PB

Remover Espaço em branco

Mensagem por JUDIVAN CONTABIL »

Mesmo retirando o SubStr(,,40) o Alltrim() nao funciona:

o arquivo CONFIG

Código: Selecionar todos

*****************************************************************
SELECT CONFIG

 vSETA1     :="|"
 vREG       :="0000"
 vSETA2     :="|"
 vCOD_VER   :=config->COD_VER
 vSETA3     :="|"
 vCOD_FIN   :=config->COD_FIN
 vSETA4     :="|"
 vDT_INI    :=LimpaStr(DTOC(vDataI))
 vSETA5     :="|"
 vDT_FIN    :=LimpaStr(DTOC(VdataF))
 vSETA6     :="|"
 vNOME      :=Alltrim(config->Razao)
 vSETA7     :="|"
 vCNPJ      :=STRZERO(Val(LimpaStr(CGC)),14)
 vSETA8     :="|"
 vCPF       :="0"
 vSETA9     :="|"
 vUF        :=config->UF
 vSETA10    :="|"
 vIE        :=Alltrim(Config->IE)
 vSETA11    :="|"
 vCOD_MUN   :=config->COD_MUNI
 vSETA12    :="|"
 vIM        :="0"
 vSETA13    :="|"
 vSUFRAMA   :="0"
 vSETA14    :="|"
 vIND_PERFIL:=config->IND_PERFIL
 vSETA15    :="|"
 vIND_ATIV  :=config->IND_ATIV
 vSETA16    :="|"

que cria do arquivo REG0000

SELECT REG0000
IF LASTREC()=0
 APPEND BLANK

REPL SETA1 WITH vSETA1,;
     REG WITH vREG,;
     SETA2 WITH vSETA2,;
     COD_VER WITH vCOD_VER,;
     SETA3 WITH vSETA3,;
     COD_FIN WITH vCOD_FIN,;
     SETA4 WITH vSETA4,;
     DT_INI WITH vDT_INI,;
     SETA5 WITH vSETA5,;
     DT_FIN WITH vDT_FIN,;
     SETA6 WITH vSETA6,;
     NOME WITH vNOME,;
     SETA7 WITH vSETA7,;
     CNPJ WITH vCNPJ,;
     SETA8 WITH vSETA8,;
     CPF WITH vCPF,;
     SETA9 WITH vSETA9,;
     UF WITH vUF,;
     SETA10 WITH vSETA10,;
     IE WITH vIE,;
     SETA11 WITH vSETA11,;
     COD_MUN WITH vCOD_MUN,;
     SETA12 WITH vSETA12,;
     IM WITH vIM,;
     SETA13 WITH vSETA13,;
     SUFRAMA WITH vSUFRAMA,;
     SETA14 WITH vSETA14,;
     IND_PERFIL WITH vIND_PERFIL,;
     SETA15 WITH vSETA15,;
     IND_ATIV WITH vIND_ATIV,;
     SETA16 WITH vSETA16
ENDIF
********************
Criando o Arquivo TXT
|0000|201|0|01052011|31052011|ADRIANA ACIOLE RODRIGUES->space(35)usado (29)remover(6)por exemplo     |12222481000169|0 ->aqui espaço para remover         |PB|161726070->aqui espaço para remover     |20354->aqui espaço para remover  |0         |0        |A|1|

pra ficar assim:
|0000|201|0|01052011|31052011|ADRIANA ACIOLE RODRIGUES|12222481000169|0|PB|161726070|20354|0|0|A|1|
Editado pela última vez por Maligno em 24 Jun 2011 19:50, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Remover Espaço em branco

Mensagem por Pablo César »

Criando o Arquivo TXT
|0000|201|0|01052011|31052011|ADRIANA ACIOLE RODRIGUES->space(35)usado (29)remover(6)por exemplo |12222481000169|0 ->aqui espaço para remover |PB|161726070->aqui espaço para remover |20354->aqui espaço para remover |0 |0 |A|1|

pra ficar assim:
|0000|201|0|01052011|31052011|ADRIANA ACIOLE RODRIGUES|12222481000169|0|PB|161726070|20354|0|0|A|1|
Ahhh mas pudera... remover espaços nas extremidades sim não no meio. A utilização do alltrim() como os colegas bem indicaram, deve ser usado no momento em que é feita a concatenação e não depois.

Exemplo:
"|0000|201|0|01052011|31052011|"+alltrim(nome)+"|12222481000169|0|PB|161726070|20354|0|0|A|1|"

Se aind não funcionar, é porque nesse nome ou razão tem algum caracter que não é espaço. talvez um chr(255), daí pode utilizar a função charrem() da CA-Tools para removê-lo.

Você também pode fazer a sua propri função que apenas aceita a-z, A-Z e 0-9 e o resto desprezar.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Remover Espaço em branco

Mensagem por Maligno »

Funções como charrem() não funcionarão corretamente, pois na linha de texto pode haver nomes com espaços intermediários que não podem ser removidos. O ideal é tratar isso, como eu disse, na geração da linha. Não depois dela criada.

PS: Judivan, por favor, não deixe de postar código fonte entre tags de indentação de código. Facilita a leitura por parte dos colegas que tentam ajudá-lo. É a segunda vez que ajusto por você.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Responder