PDA

Ver la versión completa : separar una estringa



jorge de italia
17/03/2009, 14:07
Hola, a todos quisiera, eliminar los primeros 5 caracteres, estoy leyendo del puerto rs232 en un text box esto:
SE14N00001111 y SE24N00001110 la primera stringa representa el valor digital y el segundo el valor analogico, estos dos valores me los escribe uno debajo del otro (aclaro el text box es multilinias) y estos datos se refrescan cada 80ms osea que en pocos segundos tengo miles de lineas, la idea es separar estos datos asi: en un text box 00001111 y en el otro text box asi: 00001110. Sin SE14N e SE24N., Aqui mando un ejemplo para descriminar los dos datos solo que me da un error de sintaxis alguien me puede ayudar gracias, El otro problema es como hacer para transformar el valor hexadecimal que me da la stringa analogica del text box en un valor decimal de 0 a 10, agracias anticipadamente.

Private Sub Text1_Change()
Dim texto() As String = split(text1.text, vbcrlf) (AQUI ME DA ERROR DE SINTAXIS Y NO LOGRO ENTENDER POR QUE)


for each S AS string in texto
If Mid(S, 0, 5) = "SE14N" Then 'Es digital y los coloco en el textbox2
textbox2.Text = textbox2.Text + vbCrLf + Mid(S, 5, Len(S) - 5)
Else
'no lo es, y lo coloco en el textbox3
textbox3.Text = textbox3.Text + vbCrLf + Mid(S, 5, Len(S) - 5)
End If
Next
End Sub

Arielo
17/03/2009, 16:04
Hola, Jorge, bienvenido...

El error puede deberse a que estás utilizando Dim(), por lo que no podés asignarle valor a esa variable en ese momento. Tendrías que asignarle el valor más adelante. Por ejemplo:


Dim texto() As String
texto() = Split(Text1.Text, vbCrLf)Y, más abajo también tendrías un error parecido cuando le agregas el "As String" luego de "For Each S". Deberías quitarlo.
Además, el Mid() no puede comenzar en el caracter cero de una cadena, pues éste no existe. Justamente por esto, también deberás cambiar el "5" del comienzo de extracción de cadena, por un "6", de lo contrario, te quedará la "N" en la cadena final. Debes cambiar "Mid(s, 0, 5)" por "Mid(s, 1, 6)"


For Each s In texto
If Mid(s, 1, 5) = "SE14N" Then
Text2.Text = Text2.Text + vbCrLf + Mid(s, 6, Len(s) - 5)
Else
Text3.Text = Text3.Text + vbCrLf + Mid(s, 6, Len(s) - 5)
End If
NextSi querés ser más prolijo, deberías declarar la variable "S" al principio, junto con "Texto". Esta variable debe ser de tipo Variant:


Dim S as Variant
Dim texto() As String
texto() = Split(Text1.Text, vbCrLf)Para convertir de hexa a decimal, lo que hay que hacer es recorrer el número hexadecimal empezando desde la derecha, dígito a dígito, y multiplicarlo por 16 elevado a un índice, igual a la posición de ese dígito, empezando desde cero. O sea, el dígito de la derecha, habrá que multiplicarlo por 16 elevado a la 0 potencia. El segundo, por 16 elevado a la 1 potencia. El tercero, por 16 elevado a la 2 potencia. Y así sucesivamente...

Por ejemplo, para convertir 8A7 a decimal:

7 x (16 ^ 0) = 7
10 x (16 ^ 1) = 160 (*)
8 X (16 ^ 2) = 2048

Luego se suman todos los resultados, y el equivalente decimal a 7A8 hexadecimal resulta ser: 7+160+2048 = 2215

El código te lo dejo a vos ;) ...
Ahora, tengo una duda: ¿Estás seguro que el valor analógico es hexadecimal? ¿No es binario?



(*) Recordar que en hexa: A=10, B=11, C=12, D=13, E=14, F=15

Mariscal
18/03/2009, 11:43
...Arielo.
¿que es una estringa?
:neutral:

Arielo
18/03/2009, 11:47
... yo lo entendí como que se refería a "string", y como al parecer Jorge es de Italia, pues... será la "italianización" de la palabreja en inglés...

Mariscal
18/03/2009, 11:55
...de la calle Italia será :)
El pueblo sigue sin entender que es en términos informáticos...:neutral:

Arielo
18/03/2009, 11:59
Ah, perdón...

Un "String" es simplemente una cadena de caracteres.

En VisualBasic, se llama así a un tipo de variables, que almacena tanto letras como números. Por ejemplo, una variable que guarde el nombre y apellido de un cliente, deberá ser de tipo "string".

Mariscal
18/03/2009, 12:05
...gracias Arielo.

-deberían agradecerme que insisto para que el Moderador nos explique en lenguaje claro sobre los avatares y secretos informáticos-
:)