Página 1 de 2

Retirar caratere "/" do conteudo da variavel

Enviado: 23 Mar 2014 16:01
por guanabara
Boa tarde, tenho o codigo abaixo de faz pesquisas em um banco de dados Firebird cujo o resultado é exportado para um arquivo .CSV, o nome do arquivo é formado automaticamente conforme o nome da cidade, aí que ta o problema, no banco de dados tem muitos erros nos nomes das cidades e tem cidades que tem no nome caracteres especiais tipo "/" e o windows nao aceita como nome de arquivo dai ta dando erro, alguem poderia me ajudar ?

Código: Selecionar todos

*------------------------------------------------------------------------------*
*                          FUNCAO EXPORTACAO
*------------------------------------------------------------------------------* 

Function Exportar()

PUBLIC nRecCountC := 0
PUBLIC cPastaArq  := GetCurrentFolder() + "\ARQUIVOS", cPastaSgf := GetCurrentFolder()

 MAIN.StatusBar.Item(1) := ' Aguarde...... Exportando ' + AllTrim(Str(nRecCountB)) + ' Registros para diversos arquivos conforme o nome do municipio' 
 WAIT WINDOW "Aguarde..... Exportando " + AllTrim(Str(nRecCountB)) + ' Registros... Podendo Demorar...' NOWAIT

  
  DIRMAKE(cPastaArq)
  SET DEFAULT TO "&cPastaArq"
  SET DEVICE TO PRINTER

cMu := ''


*SET PRINTER TO (cMu + ".CSV")     	


Try
 ret1:=FDB:Execute(csql)
Catch e
 Error Connection FDB
 Return
End

if !ret1:eof()

  do while !ret1:eof()
   
       nRecCountC++
       
     _nb1:=ret1:fields["NB"]:VALUE
     _nm1:=ret1:fields["NM"]:VALUE
     _cpf1:=ret1:fields["CPFOK"]:VALUE
     _vl1:=ret1:fields["VL"]:VALUE
     _ns1:=ret1:fields["NS"]:VALUE
     _mu1:=ret1:fields["MU"]:VALUE
     _uf1:=ret1:fields["UF"]:VALUE
     _lg1:=ret1:fields["LG"]:VALUE
     _br1:=ret1:fields["BR"]:VALUE
     _cp1:=ret1:fields["CEP"]:VALUE
     _ddd1:=ret1:fields["DDD"]:VALUE
     _tel1:=ret1:fields["NU_TELEFON"]:VALUE
     _esp1:=ret1:fields["ESP"]:VALUE
     _dib1:=ret1:fields["DIB"]:VALUE
     _ddb1:=ret1:fields["DDB"]:VALUE
     

IF Empty ( _NB1  ) ; _NB1 := ' ' ; ENDIF
IF Empty ( _NM1  ) ; _NM1 := ' ' ; ENDIF
IF Empty ( _CPF1 ) ; _CPF1 := ' ' ; ENDIF
IF Empty ( _VL1  ) ; _VL1 := ' ' ; ENDIF
IF Empty ( _NS1  ) ; _NS1 := ' ' ; ENDIF
IF Empty ( _MU1  ) ; _MU1 := ' ' ; ENDIF
IF Empty ( _UF1  ) ; _UF1 := ' ' ; ENDIF
IF Empty ( _LG1  ) ; _LG1 := ' ' ; ENDIF
IF Empty ( _BR1  ) ; _BR1 := ' ' ; ENDIF
IF Empty ( _CP1  ) ; _CP1 := ' ' ; ENDIF
IF Empty ( _DDD1 ) ; _DDD1 := ' ' ; ENDIF
IF Empty ( _TEL1 ) ; _TEL1 := ' ' ; ENDIF
IF Empty ( _ESP1 ) ; _ESP1 := ' ' ; ENDIF
IF Empty ( _DIB1 ) ; _DIB1 := ' ' ; ENDIF
IF Empty ( _DDB1 ) ; _DDB1 := ' ' ; ENDIF     
     
     
If cMu <> ALLTRIM(_MU1) + ' - ' + ALLTRIM(_UF1)
    cMu  := ALLTRIM(_MU1) + ' - ' + ALLTRIM(_UF1)     
    SET PRINTER TO (cMu + ".CSV")     	
    ExportMenu()
Endif 
        
@ PROW() ,000 SAY CHR(34) + _NB1 + CHR(34) + ';' ;
               + CHR(34) + _NM1 + CHR(34) + ';'  ;       
               + CHR(34) + _CPF1 + CHR(34) + ';'  ; 
               + CHR(34) + _VL1 + CHR(34) + ';'  ; 
               + CHR(34) + _NS1 + CHR(34) + ';'  ; 
               + CHR(34) + _MU1 + CHR(34) + ';'  ; 
               + CHR(34) + _UF1 + CHR(34) + ';'  ; 
               + CHR(34) + _LG1 + CHR(34) + ';'  ; 
               + CHR(34) + _BR1 + CHR(34) + ';'  ; 
               + CHR(34) + _CP1 + CHR(34) + ';'  ; 
               + CHR(34) + _DDD1 + CHR(34) + ';'  ; 
               + CHR(34) + _TEL1 + CHR(34) + ';'  ; 
               + CHR(34) + _ESP1 + CHR(34) + ';'  ; 
               + CHR(34) + DTOC(_DIB1) + CHR(34) + ';'  ; 
               + CHR(34) + DTOC(_DDB1) + CHR(34) + ';'

@ PROW()+1,000 SAY ""                           

ret1:movenext()
   
If cMu <> ALLTRIM(_MU1) + ' - ' + ALLTRIM(_UF1)    	
         SET PRINTER TO
         cMu := ""
Endif    
  
   
   enddo
endif


SET PRINTER TO
SET DEFAULT TO "&cPastaSgf"

   WAIT CLEAR
  MAIN.StatusBar.Item(1) := AllTrim(Str(nRecCountC)) + ' - Registros Exportados com sucesso para diversos arquivos conforme o nome do Municipio. Para consulta-los clique no Botao "Pasta".'
   MsgInfo( AllTrim(Str(nRecCountC)) + ' - Registros Exportados com sucesso para diversos arquivos conforme o nome do Municipio. Para consulta-los clique no Botao "Pasta".', [Registros Exportados])


return


*------------------------------------------------------------------------------*
*                          FUNCAO MENU DA EXPORTACAO
*------------------------------------------------------------------------------* 

Function ExportMenu()


@ PROW()  ,000  SAY          CHR(34) + "BENEFICIO"          + CHR(34) + ";" ;
                          + CHR(34) + "NOME"              + CHR(34) + ";" ;
                          + CHR(34) + "CPF"               + CHR(34) + ";" ;
                          + CHR(34) + "VALOR"             + CHR(34) + ";" ;
                          + CHR(34) + "DATA NASC"         + CHR(34) + ";" ;
                          + CHR(34) + "MUNICIPIO"          + CHR(34) + ";" ;
                          + CHR(34) + "UF"               + CHR(34) + ";" ;
                          + CHR(34) + "ENDERECO"          + CHR(34) + ";" ;
                          + CHR(34) + "BAIRRO"            + CHR(34) + ";" ;
                          + CHR(34) + "CEP"              + CHR(34) + ";" ;
                          + CHR(34) + "DDD"              + CHR(34) + ";" ;
                          + CHR(34) + "TELEFONE"          + CHR(34) + ";" ;
                          + CHR(34) + "ESP"              + CHR(34) + ";" ;                              
                          + CHR(34) + "DIB"              + CHR(34) + ";" ;
                          + CHR(34) + "DDB"              + CHR(34)
     
@ PROW()+1,000 SAY ""


Return


Retirar caratere "/" do conteudo da variavel

Enviado: 23 Mar 2014 16:46
por Hasse
Boa tarde Guanabara.

Você já experimentou usar a função STRTRAN() ?
cVar : =STRTRAN( cVar, "/", "" )
Ela elimina todos os caracteres "/" do texto, ou pode substituir por outro.

Retirar caratere "/" do conteudo da variavel

Enviado: 23 Mar 2014 17:00
por guanabara
Hasse, a cho que é o que preciso, demora uns 20 minutos pra rodar o banco de dados inteiro, vamos ver se resolve.... :D

Retirar caratere "/" do conteudo da variavel

Enviado: 23 Mar 2014 18:59
por Paulo_CPV
Boa noite!

Tente a função CharRem(), eu acho que resolve, pois eu estava necessitando o mesmo que você e achei está função aqui no Forum.

Código: Selecionar todos

CharRem('. / -',variavel) -> Aqui eu tiro os caracteres "." , "/" e "-"
Espero que eu tenha te ajudado.

Abraços,

Paulo - Jacareí/SP

Retirar caratere "/" do conteudo da variavel

Enviado: 23 Mar 2014 21:09
por Hasse
Boa noite Guanabara.

Eu faria isto em tempo real, ou seja, a cada variável lida, passe o STRTRAN ou a outra função ( CharRem() ) sugerida pelo colega Paulo. Esta última, se você tiver mais de um caracter a ser removido. Caso em alguma variável não exista o caracter a ser removido, nada acontecerá. Não haverá qualquer prejuízo na integridade da variável.

Lembrando que a função Char() não substitui. Só remove.

Retirar caratere "/" do conteudo da variavel

Enviado: 24 Mar 2014 23:33
por guanabara
Obrigado Paulo, ainda nao rodei a funcao CharRem(), é mais uma que aprendi, rodei a funcao STRTRAN em todas as colunas do meu banco e ficou show, valeu Hasse voces mandaram muito bem... :|<

Retirar caratere "/" do conteudo da variavel

Enviado: 06 Out 2022 16:14
por deividdjs
boa tarde Prezados .. como eu faço pra eliminar o ultimo caracter de uma variavel que neste caso é uma virgura ....

Estou tentando assim ... porem sem sucesso !!

no campo é mais ou menos assim

cStr = 8292,8293,8294,8295,8296,

quero eliminar somente a ultima virgula ','

Código: Selecionar todos

	cLen2 := LEN(cStr)
//	cUltdigito := SUBSTR( cStr ,cLen2,1 )
	
	cStrNew := CharRem( ',' , SUBSTR( cStr ,cLen2,1 ))

tentei assim tbm :

Código: Selecionar todos

   

cUltdigito := SUBSTR( cStr ,cLen2,1 )

IF cUltdigito == "," 
      cStrNew := StrTran(cUltdigito , "," ,"")
   ENDIF   
   cStr := (cStrNew)

Abs!

Retirar caratere "/" do conteudo da variavel

Enviado: 06 Out 2022 16:31
por alxsts
Olá!

Código: Selecionar todos

PROCEDURE Teste()

   CLS

   // com uma função...
   ? RemoveLastChar( "8292,8293,8294,8295,8296," )

   // ou de forma direta...
   ? Substr( "8292,8293,8294,8295,8296,", 1, Len( "8292,8293,8294,8295,8296," ) - 1 )
RETURN
//------------------------------------------------------------

FUNCTION RemoveLastChar( cString )

   LOCAL nLen, cRet := ""

   hb_DefaultValue( cString, "" )

   nLen := Len( Alltrim( cString ) )

   If nLen  > 0
      cRet := Substr( cString, 1, ( nLen - 1 ) )
   Endif

RETURN cRet

Retirar caratere "/" do conteudo da variavel

Enviado: 06 Out 2022 17:07
por carlaoonline
Boa tarde!

Pegando o embalo...

Código: Selecionar todos

...
if nLen > 0 .and. Right(cString,1)=","
...

Retirar caratere "/" do conteudo da variavel

Enviado: 06 Out 2022 19:42
por Itamar M. Lins Jr.
Ola!

Código: Selecionar todos

LOCAL cString := "8292,8293,8294,8295,8296,"
? Substr( cString, 1, rat(',',cString) )
Saudações,
Itamar M. Lins Jr.

Retirar caratere "/" do conteudo da variavel

Enviado: 06 Out 2022 21:28
por deividdjs
Excelente amigos ... vcs são fera! resolvido!!

Código: Selecionar todos


	nLen := Len( Alltrim( cStr ) )
	
   If nLen  > 0 .and. Right(cStr,1)=","
      cStrNew := Substr( cStr, 1, ( nLen - 1 ) )
   Endif

Muito obrigado.
forte Abraço!

Retirar caratere "/" do conteudo da variavel

Enviado: 07 Out 2022 05:37
por JoséQuintas
Errado, ou inseguro.
Já que quer fazer assim, então faça direito.
Do jeito que fez, parece certo, mas o resultado pode ser imprevisível, já que AllTrim() remove espaço dos dois lados da string.
Melhor primeiro ajustar a string, antes de fazer o processo.

Código: Selecionar todos

cString := AllTrim( cString )
IF Len( cString ) > 0 .AND. Right( cString, 1 ) == ","
   cString := Substr( cString, 1, Len( cString ) - 1 )
ENDIF

Retirar caratere "/" do conteudo da variavel

Enviado: 07 Out 2022 08:35
por deividdjs

"JoséQuintas"]Errado, ou inseguro.
Já que quer fazer assim, então faça direito.
Do jeito que fez, parece certo, mas o resultado pode ser imprevisível, já que AllTrim() remove espaço dos dois lados da string.
Melhor primeiro ajustar a string, antes de fazer o processo.
modificado !!

Obrigado.

Retirar caratere "/" do conteudo da variavel

Enviado: 07 Out 2022 09:29
por Itamar M. Lins Jr.
Olá!
então faça direito. AllTrim()
rat() não precisa de alltrim() mais simples.
E a ultima virgula pode vim um numero. "blabla,bla,bla,123,12"
Vai falhar se não usar rat() se deseja cortar o que vem depois da virgula.

Saudações,
Itamar M. Lins Jr.

Retirar caratere "/" do conteudo da variavel

Enviado: 07 Out 2022 10:33
por JoséQuintas
Itamar M. Lins Jr. escreveu:Vai falhar se não usar rat() se deseja cortar o que vem depois da virgula.
Mas o que vém depois da vírgula pode ser outro número, e cortar deixaria com um número a menos.
Se a intenção é só cortar a última vírgula, quando o último caractere for vírgula, do outro jeito melhor.