Retirar caratere "/" do conteudo da variavel

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

guanabara
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 03 Mar 2013 17:33
Localização: Aracatuba-SP

Retirar caratere "/" do conteudo da variavel

Mensagem 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

Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Retirar caratere "/" do conteudo da variavel

Mensagem 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.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
guanabara
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 03 Mar 2013 17:33
Localização: Aracatuba-SP

Retirar caratere "/" do conteudo da variavel

Mensagem 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
Paulo_CPV
Usuário Nível 3
Usuário Nível 3
Mensagens: 178
Registrado em: 07 Mar 2013 10:27
Localização: Jacarei/SP

Retirar caratere "/" do conteudo da variavel

Mensagem 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
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Retirar caratere "/" do conteudo da variavel

Mensagem 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.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
guanabara
Usuário Nível 1
Usuário Nível 1
Mensagens: 49
Registrado em: 03 Mar 2013 17:33
Localização: Aracatuba-SP

Retirar caratere "/" do conteudo da variavel

Mensagem 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... :|<
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

Retirar caratere "/" do conteudo da variavel

Mensagem 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!
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Retirar caratere "/" do conteudo da variavel

Mensagem 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
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
carlaoonline
Usuário Nível 3
Usuário Nível 3
Mensagens: 190
Registrado em: 24 Ago 2014 22:38
Localização: Porto Alegre-RS

Retirar caratere "/" do conteudo da variavel

Mensagem por carlaoonline »

Boa tarde!

Pegando o embalo...

Código: Selecionar todos

...
if nLen > 0 .and. Right(cString,1)=","
...
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Retirar caratere "/" do conteudo da variavel

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

Retirar caratere "/" do conteudo da variavel

Mensagem 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!
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Retirar caratere "/" do conteudo da variavel

Mensagem 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
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
deividdjs
Usuário Nível 3
Usuário Nível 3
Mensagens: 377
Registrado em: 19 Set 2006 09:39
Localização: Foz do Iguaçu / Pr

Retirar caratere "/" do conteudo da variavel

Mensagem 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.
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Retirar caratere "/" do conteudo da variavel

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Retirar caratere "/" do conteudo da variavel

Mensagem 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.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder