![]() |
Como manipulo una cadena de caracteres en esta situacion???? Gente necesito auxilio !!! Resulta que obtengo una cadena de caracteres, desde un aparato, conectado a mi puerto com,y la meto en una variable string. luego, intento leer los datos de la cadena en una base de datos acces. El tema esta, en que la cadena que yo quiero evaluar debe tener 79 caracteres, en esos caracteres, desde la posicion 0 hasta el final, yo voy recorriendo y tomando datos, segun la aparicion de espacios en blanco. Mi problema es que el aparato, me envia las cadenas, muy irregularmente osea me manda aveces una cadena de 240 o mas caracteres, ( osea, varias de las cadenas de 79 en una sola ) o bien, me envia otras veces, cadenas de 40 caracteres, osea casi la mitad de los datos contenidos en la de 79. entonces como puedo hacer, para unificar la cadena y poder sacar los datos? |
La verdad que no se entendí bien la explicación. Si lo que pasa es que los datos pueden variar de longitud pero siempre están separados por un espacio podés usar la función split, por ejemplo: Dim datos() as String datos = split(cadenadecaracteres, " ") |
Gracias por tu ayuda... mira te explico mas graficamente... yo necesito hacer lo siguiente cadena: 1111 22222 33333 44444 55555 variable1= 1111 variable2=2222 etc... pero que pasa cuando la cadena viene asi... 3333 44444 55555 11111 2222 3333 44444 555 555 1111 2222 3333 44444 5555 1111 22222 33333 4444 ............. Claro que los valores de la cadena no son tan ovios... eso de que sean numeros constantes es solo para el ejemplo. Queda mas claro ? El asunto es .. como identifico, sin ver la cadena, las multiples cadenas internas, desde su inicio, hasta su fin... por mas que vengan desparejas, o truncas... |
Si en la cadena no hay una palabra o número que identifique que empieza o termina una subcadena, lo veo difícil. Para poder identificar cuándo termina una subcadena y empieza otra es necesario tener algún caracter o algo que distinga esa división. |
me parece q solo es cuestion de trabajar con una especie de buffers para ir almacenando los datos faltantes. |
Foo creo que le pegaste en el clavo Lo que hice fue reducir el bufer de flujo de entrada del puerto com, y entonces, la cadena que entra es mas chica ahora... Luego, voy almacenando los datos hasta en una string hasta que llega a tener un length de 79 que es lo que necesito Hay un cracter que es constante que es una S.. pero siempre viene en distintas posiciones... Ahora el tema es que todo viene en una sola linea, pero la cadena sigue viniendo trunca y si empiezo a almacena en el string desde la s en adelante, pierdo la mitad de la cadena anteiror cuando inicia la escucha del puerto ( suponiendo que la primera escucha sea de la mitad de una cadena digamos...) |
lo que te decia era crear ese buffer en la parte que lees los datos. void CapturarEntrada() { String entrada = ""; String buffer = ""; while (true) { entrada = LeerEntrada() for(int i = 0; i < entrada.Length; i++) { if (buffer.length == tamañodelbuffer || entrada[i] == "S") { // hacer una llamada asincrona o delegar la tarea a una "hebra" // con el parametro buffer buffer = ""; } buffer = buffer + entrada[i]; } } } |
si, eso es una solucion, el unico problema es que no puedo usar unn for, por que los datos, vienen con un evento que se produce cuando hay una entrada en puerto com... y codificando ese evento, es donde yo tomo lo que viene por el puerto pero con esto que me decis, voy a probar de hacer la pregunta, sin el for... o sea simplemente un if |
igual no veo el problema, el codigo que puse era algo referencial nada mas porque no pones un poco de codigo? |
Gracias Foo Lo que me digiste, me ayudo... hice algo similar tomando como ciclo del bucle, la llamada al evento. No pongo el codigo, por que tiene muchos objetos que cree yo mismo... y tienen metodos propios... asi que te meteria mas en problemas... Te agadezco mucho... mi codigo ya funciona bien Gracis !!! a Todos |
| La zona horaria es GMT -6. Ahora son las 09:21. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.