Converter ARRAY para STRING

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

rcb2002
Usuário Nível 2
Usuário Nível 2
Mensagens: 58
Registrado em: 19 Jan 2010 23:16
Localização: Salvador

Converter ARRAY para STRING

Mensagem por rcb2002 »

Olá pessoal!

Existe alguma forma (usandoMiniGUI Xtended) de converter um vetor aBinary com 25 bits (zeros e uns mesmo) em uma String, pra depois poder guardar num campo char de uma tabela qualquer... Sem ser usando FOR...NEXT?!

Muito Obrigado mais uma vez!

Ricardo César
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Converter ARRAY para STRING

Mensagem por asimoes »

Você já tem a rotina com o vetor pronta?
Tem como postar pra gente analisar?

O harbour possui funções de conversão:

L2bin() -> Converts a numeric value to a signed long binary integer (4 bytes).
I2Bin() -> Converts a numeric value to a signed short binary integer (2 bytes).
W2bin() -> Converts a numeric value to an unsigned short binary integer (2 bytes).
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
rcb2002
Usuário Nível 2
Usuário Nível 2
Mensagens: 58
Registrado em: 19 Jan 2010 23:16
Localização: Salvador

Converter ARRAY para STRING

Mensagem por rcb2002 »

Algo tipo assim... (é o que eu NÃO queria ter - mas o que está funcionando agora).

Código: Selecionar todos

FOR n = 1 TO 25
       cBinary += ALLTRIM( STR(aBinary[n]) )
NEXT
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Converter ARRAY para STRING

Mensagem por Claudio Soto »

En Harbour existe :

HB_VALTOSTR() /* converts any data type to STR Value */
HB_VALTOEXP() /* converts any data type to STR Expression */
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Converter ARRAY para STRING

Mensagem por asimoes »

Sem o uso de For..Next

AEval( aBinary, {|x| cBinary += HB_NTOS(x) } )
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Converter ARRAY para STRING

Mensagem por JoséQuintas »

A solução do Claudio Soto é mais interessante, porque vale pra qualquer coisa.

Código: Selecionar todos

hb_ValToExp( a ) == hb_ValToExp( b )
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/
rcb2002
Usuário Nível 2
Usuário Nível 2
Mensagens: 58
Registrado em: 19 Jan 2010 23:16
Localização: Salvador

Converter ARRAY para STRING

Mensagem por rcb2002 »

Certo, compreendi. Mas como disse antes, só uso a MiniGUI Extended: essas funções que começam com HB_ funcionam também aqui (pensei que fossem só pra o Harbour)? Se funcionar, tem como indicar um exemplo dentro da minha realidade? Pq só agora me dei conta de que o código que postei ali em cima funciona em tese: na prática, não to conseguindo concatenar elementos de um vetor (e números, ainda por cima) como se fossem string... Travei aqui. A situação é mais ou menos a seguinte:

Imagina 10 tipos de sinais que podem sair por 10 portas diferentes: eu preciso montar uma matriz (10x10, no caso). Então eu tenho:

Código: Selecionar todos

dbHUM
Porta			Data			Hora			tipoSinal
1			11/07/2016	13:15:28		3
2			08/07/2016	13:15:28		9
4			05/07/2016	13:15:28		7
7			29/07/2016	13:15:28		6
3			17/07/2016	13:15:28		1
1			13/07/2016	13:15:28		1
4			12/07/2016	13:15:28		8
2			12/07/2016	13:15:28		2
O resultado desse trecho seria algo assim:

Código: Selecionar todos

Porta				Sinais
1				1010000000
2				0100000010
3				1000000000
4				0000001100
5				0000000000
6				0000000000
7				0000010000
8				0000000000
9				0000000000
10				0000000000
A solução que eu encontrei foi a seguinte - que me deixou na mão por causa da conversão vetor/string (dbHUM indexado por PORTA):

Código: Selecionar todos

			WHILE .....
				cBinary  := ""; AFILL( aBinary ,0 )
				DO WHILE ! dbHUM->(Eof()) .AND. (dbHUM->Porta) == cPorta
					aBinary[ dbHUM->TIPO ] := 1
					dbHUM->(DBSkip())
				ENDDO
				FOR n = 1 TO 25
					cBinary += aBinary[n]               //              -----> ISSO AQUI DÁ ERRO (com ou sem STR(), não funciona)!
				NEXT
				dbBIN->( DBAppend() )
				dbBIN->Porta	:= cPorta
				dbBIN->Sinais	:= cBinary
			ENDDO
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Converter ARRAY para STRING

Mensagem por asimoes »

Qual é o erro que dá?
Erro no vetor?
Tem como mostrar a mensagem de erro?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Converter ARRAY para STRING

Mensagem por asimoes »

Esse array tem 25 elementos?
Tentou isolar o problema em um programa de teste harbour console?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
rcb2002
Usuário Nível 2
Usuário Nível 2
Mensagens: 58
Registrado em: 19 Jan 2010 23:16
Localização: Salvador

Converter ARRAY para STRING

Mensagem por rcb2002 »

Eis o erro...:

Código: Selecionar todos

Application: \Jobs\MiniGUI\Signals\main.exe
Date: 15.08.2016 Time: 16:49:02
Time from start: 0 days 0 hours 0 mins 22 secs
Error BASE/1081 Argument error: +

Called from BUILDBINARY(679) 
Called from FILLBASE(638) 
Called from (b)MAIN(61) 
Called from _DOCONTROLEVENTPROCEDURE(1678) 
Called from EVENTS(1597) 
Called from DOMESSAGELOOP(0) 
Called from _ACTIVATEWINDOW(1395) 
Called from MAIN(40) 
R: Parece que não posso concatenar uma array[n]
R: Sim, o do exemplo só tem 10 elementos mas o real tem 25!
R: Infelizmente não sei usar o harbour console. Na verdade, não uso o harbour, uso a miniGUI. ´o)
rcb2002
Usuário Nível 2
Usuário Nível 2
Mensagens: 58
Registrado em: 19 Jan 2010 23:16
Localização: Salvador

Converter ARRAY para STRING

Mensagem por rcb2002 »

Bom... testei com o HB_VALTOEXP(). O resultado vem separado por vírgulas, entre chaves, mas acho q dá pra eu dar um jeito. Quintas, Simões, Claudio: Muito obrigado pelo apoio. Só fiquei me perguntando como é que essa demanda seria resolvida na época do "Clippão brabo" em DOS, com ? pra escrever em tela? A gente sempre achava uma saída com ele. Alguém certamente já deve ter se visto nessa situação... rs

Saudações!
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Converter ARRAY para STRING

Mensagem por Toledo »

Amigo, estou achando estranho esta linha:

Código: Selecionar todos

aBinary[ dbHUM->TIPO ] := 1
Qual o conteúdo de dbHUM->TIPO???

Mostre como está declarando (criando) a array aBinary.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Converter ARRAY para STRING

Mensagem por JoséQuintas »

Na época do Clipper... seria complicado.
Não sei se Type() serviria, mas recursividade seria útil.

Código: Selecionar todos

Compara( a, b )

FUNCTION ComparaArray( a, b )

   IF Type( "a" ) <> Type( "b" )
      RETURN .F.
   ENDIF
   IF Type( "a" ) ==  "A"
      IF Len( a ) != Len( b )
        RETURN .F.
      ENDIF
   ELSE
       FOR nCont = 1 TO Len( a )
         IF .NOT. Compara( a[ 1 ], b[ 1 ]    
            RETURN .F.
       ENDIF
      NEXT
   ENDIF
   RETURN .T.
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
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Converter ARRAY para STRING

Mensagem por asimoes »

Boa Toledo,

Qual é o tipo de dbHUM->TIPO ? se for caracter pode ser o erro
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Converter ARRAY para STRING

Mensagem por JoséQuintas »

Não deu tempo de corrigir....rs

Código: Selecionar todos

Compara( a, b )

FUNCTION ComparaArray( a, b )

 IF Type( "a" ) <> Type( "b" )
   RETURN .F.
 ENDIF
 IF Type( "a" ) == "A"
   IF Len( a ) != Len( b )
    RETURN .F.
   ENDIF
   FOR nCont = 1 TO Len( a )
    IF .NOT. Compara( a[ 1 ], b[ 1 ]  
      RETURN .F.
   ENDIF
   NEXT
 ELSE
   RETURN a == b
 ENDIF
 RETURN .T.
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