Retirar caratere "/" do conteudo da variavel

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

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á!
JoséQuintas escreveu:Errado, ou inseguro.
Já que quer fazer assim, então faça direito.
Apesar da desnecessária grosseria na resposta, você está correto na afirmação. O erro está no código da função que postei.
deividdjs escreveu:cStr = 8292,8293,8294,8295,8296,
quero eliminar somente a ultima virgula ','
De acordo com o que o OP mostrou, e assumindo que o último carácter é sempre uma vírgula, bastaria fazer

Código: Selecionar todos

cStr := Left( AllTrim( cString ), ( Len( AllTrim( cString ) ) - 1 ) )
Imagino que o OP tenha carregado esta string a partir de um array ou lendo alguma tabela:

Código: Selecionar todos

LOCAL aArray, cString, e

aArray  := { "8292", "8293", "8294", "8295", "8296" }
cString := ""

For Each e In aArray
   cString += e + ","
Next
Neste caso, o correto é não adicionar esta última vírgula, para não ter que removê-la depois...

Código: Selecionar todos

LOCAL aArray, cString, e

aArray  := { "8292", "8293", "8294", "8295", "8296" }
cString := ""

For Each e In aArray
   cString += If( Empty( cString, "", "," ) + e
Next
[]´s
Alexandre Santos (AlxSts)
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 »

concordo plenamente .. essa é uma função onde quando cancelo uma nota fiscal e quero tirar o numero dela dessa string.. realmente eu coloco a virgura para servir de scopo na hora de eliminar a factura ...
"JoséQuintas"]Neste caso, o correto é não adicionar esta última vírgula, para não ter que removê-la depois...
Expandir visualizacaoVer codigo
1 LOCAL aArray, cString, e
2  
3 aArray  := { "8292", "8293", "8294", "8295", "8296" }
4 cString := ""
5  
6 For Each e In aArray
7    cString += If( Empty( cString, "", "," ) + e
8 Next
Aí acabo fazendo assim ... sei que não é a melhor maneira de fazer porém foi a que consegui fazer funcionar .. aceito sugestões

Código: Selecionar todos


c_newnota := alltrim(ELIMINA_STRING(ALLTRIM(CC_NOTA)+",",ALLTRIM(TIRA_ZEROS(c_factura))+","))


FUNCTION ELIMINA_STRING(cStr,c_Eliminar)

   local cStrNew := "", i , cDigito := "", cUltdigito := ""

   For i := 1 TO LEN(c_Eliminar)
       cStrNew := StrTran(cStr, c_eliminar,""[i])
		 
		 cDigito := SUBSTR( c_Eliminar , i , 1 )

		 IF cDigito == "," 
		    cStrNew := StrTran(cStr, c_eliminar,""[i])
		 ENDIF   
  		 cStr := (cStrNew)
	Next
	
//	cStrNew := Left( AllTrim( cStr ), ( Len( AllTrim( cStr ) ) - 1 ) )

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

Return( cStr )

Abs!
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 »

Corre o risco de eliminar errado.
Supondo que a lista tenha "123,1123,2123" e vai eliminar a fatura "123", vai eliminar coisa errada.
Se não dá pra trabalhar com array, talvez mais prático/seguro acrescentar vírgulas antes de processar e depois remover.

Código: Selecionar todos

FUNCTION EliminaNumero( cLista, cNota )

cLista := "," + cLista + ","
cNota := "," + cNota + ","
cLista := StrTran( cLista, cNota, "," )
cLista := Substr( cLista, 2, Len( cLista ) - 2 )

RETURN cLista
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 »

Entendi! Não coloquei vírgula na frente .. tem razão! Eu até havia colocado... mais dava um problema na hora de eliminar... vou provar!
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
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 »

ficou perfeito e enxuto ... obrigado amigos!!
"deividdjs"]Expandir visualizacaoVer codigo
1 FUNCTION EliminaNumero( cLista, cNota )
2  
3 cLista := "," + cLista + ","
4 cNota := "," + cNota + ","
5 cLista := StrTran( cLista, cNota, "," )
6 cLista := Substr( cLista, 2, Len( cLista ) - 2 )
7  
8 RETURN cLista
9  
Forte abraço!
Windows 11 + Harbour 3.2 + MINGW64 gcc 14.1.0 + Visual Lib + GTWVG + LETODBF WINDOWNS/LINUX
Responder