Página 1 de 2

Remover Espaço em branco

Enviado: 24 Jun 2011 10:29
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

Remover Espaço em branco

Enviado: 24 Jun 2011 10:43
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.

Remover Espaço em branco

Enviado: 24 Jun 2011 11:23
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)

Remover Espaço em branco

Enviado: 24 Jun 2011 13:13
por JUDIVAN CONTABIL
Ola Jairo Maia
Fiz assim:
VNome:=Alltrim(MemoTran(razao))
Mas nao funcionou.

Judivan

Remover Espaço em branco

Enviado: 24 Jun 2011 14:13
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.

Remover Espaço em branco

Enviado: 24 Jun 2011 14:51
por JUDIVAN CONTABIL
Olá

deu caracter invalida, como corrigir.

Remover Espaço em branco

Enviado: 24 Jun 2011 15:37
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.

Remover Espaço em branco (DE UM MEMO)

Enviado: 24 Jun 2011 15:56
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().

Remover Espaço em branco

Enviado: 24 Jun 2011 16:04
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

Remover Espaço em branco (DE UM MEMO)

Enviado: 24 Jun 2011 16:37
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.

Remover Espaço em branco (DE UM MEMO)

Enviado: 24 Jun 2011 17:14
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.

Remover Espaço em branco (DE UM MEMO)

Enviado: 24 Jun 2011 17:52
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.

Remover Espaço em branco

Enviado: 24 Jun 2011 18:14
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|

Remover Espaço em branco

Enviado: 24 Jun 2011 19:15
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.

Remover Espaço em branco

Enviado: 24 Jun 2011 19:47
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ê.