Lectura De Cadenas


Objetivo: Lectura De Cadenas
Que tal, ando con un problema que me trae loco y creo que es demasiado simple, estoy leyendo archivos .dat que contienen 1's y 0's, los guardo en un string, necesito leer uno a uno los caracteres de la cadena para determinar si es 1 y realizar "x" accion, pero no encuentro nada, hay funciones para buscar, separar, etc, solo quiero recorrer uno a uno los caracteres en C lo hacía fácil con un for, aquí no puedo

Tengo por ejemplo esto en mi buffer "00011111,00000101,00000101,00011111"
lo guardo en grupos de 8 en otras cadenas (bytes), y luego necesito determinar las posiciones que están activas (1's)

Espero me puedan ayudar, gracias.

Perfil MP  
Objetivo: Re: Lectura De Cadenas
Hola Erik:

Por ejemplo...

Public Sub Main()

Dim buffer As String
Dim sbytes As New String[]
Dim un_byte As String
Dim n As Integer

buffer = "00011111,00000101,00000101,00011111"
sbytes = Split(buffer, ",")
For Each un_byte In sbytes
For n = 1 To Len(un_byte)
If Mid$(un_byte, n, 1) = "1" Then
Print "Tenemos un 1!"
Else
Print "Tenemos un 0!"
Endif
Next
Next

End


No puedo usar For each con cadenas.

Saludos

Objetivo: Re: Lectura De Cadenas
Pregunto: ¿no sería mucho más rápido y efectivo usar un fichero binario en lugar de uno de texto?

Usar ficheros binarios con variables de tipo Byte y Byte[] es mucho más correcto para un caso como éste.

Saludos

Perfil MP  
Objetivo: Re: Lectura De Cadenas
Shell escribió: [Ver mensaje]
Hola Erik:

Por ejemplo...

Public Sub Main()

Dim buffer As String
Dim sbytes As New String[]
Dim un_byte As String
Dim n As Integer

buffer = "00011111,00000101,00000101,00011111"
sbytes = Split(buffer, ",")
For Each un_byte In sbytes
For n = 1 To Len(un_byte)
If Mid$(un_byte, n, 1) = "1" Then
Print "Tenemos un 1!"
Else
Print "Tenemos un 0!"
Endif
Next
Next

End


No puedo usar For each con cadenas.

Saludos


Genial, muchas gracias, me ha servido, en cuanto a los archivos binarios nunca los he ocupado, de echo pensaba trabajar en hexadecimal y pensé guardar los archivos así para evitar conversiones, como sea sigo avanzando, muchas gracias de nuevo

Perfil MP  
Objetivo: Re: Lectura De Cadenas
Propondría, si tu prefieres el uso de una variable de cadena, una intemedia solución:
Public Sub Main()

Dim buffer As String = "00011111,00000101,00000101,00011111"
Dim bb As Byte[]
Dim s As Short

bb = New Byte[Len(buffer)]

bb = Byte[].FromString(buffer)

For s = 0 To bb.Max
If bb[s] = 49 Then Print Chr(bb[s])
Next

End

última edición por vuott el Domingo, 06 Abril 2014, 23:35; editado 2 veces
Perfil MP  
Objetivo: Re: Lectura De Cadenas
Vuott:

No conocía el método estático "FromString" de los array dinámicos.

Lo que no me gusta es como sale luego en el editor, que no parece como un comando, un método en este caso.
Aunque salga en la lista desplegable, no ha salido como en el listado del mensaje (con otro color, quiero decir).
La sentencia completa esta toda en color negro.

En cuanto a si se puede usar cualquier tamaño de cadena a la hora de convertirlo en un array, es posible o tiene limites ?.
Encontré esto:

Citar:

Si el string es demasiado largo para rellenar el array, se perderá el sobrante de dicho string. En otras palabras, el tamaño del array no se modifica por este método.


http://gambasdoc.org/help/comp/gb/byte%5b%5d/fromstring?es&v3

(No ha salido bien la dirección por los dos corchetes. Voy a comentárselo a Jesús.

Ademas, no aparece un start o comienzo en la instrucción.

Saludos

Objetivo: Re: Lectura De Cadenas
Shell escribió: [Ver mensaje]
En cuanto a si se puede usar cualquier tamaño de cadena a la hora de convertirlo en un array, es posible o tiene limites ?.

Hola Shell
lo que puedo decir, en base a mi experiencia , es que no tiene teoricamente limites.
Probemos, asì, este codigo, donde vamos a cargar - por ejemplo - un file de tipo Wav muy grande (hago el experimento con un file de tamaño 40141420 byte):
Public Sub Main()

Dim b As Byte[]
Dim s As String

s = File.Load("/direccion/del/archivo.wav")

b = New Byte[Len(s)] ' o si tu prefieres: b = New Byte[Stat("/direccion/del/archivo.wav").Size]

b = Byte[].FromString(s)

Print b.Count

End

al terminar en console veo el número exacto del tamaño del mi archivo wav.

última edición por vuott el Lunes, 07 Abril 2014, 15:05; editado 3 veces
Perfil MP  
Objetivo: Re: Lectura De Cadenas
Muy bueno vuott, pero no me gusta usar cadenas para ficheros binarios. Quizás sea mejor (o más ortodoxo) usar métodos binarios como .Read y lectura de streams:

Public Sub Main()

Dim f As File
Dim b As Byte[]
Dim filepath As String = User.Home &/ "file.type"

f = Open filepath For Read

b = New Byte[](Stat(filepath).Size)
b.Read(f)

Print b.Count

End


Hace exactamente lo mismo que tu código

Saludos

Perfil MP  
Objetivo: Re: Lectura De Cadenas
jguardon escribió: [Ver mensaje]
Muy bueno vuott, pero no me gusta usar cadenas para ficheros binarios.


Esta bien.
En efecto yo he dicho a el, si seguía prefiriendo el uso de las cadenas....

saludosss

Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.1032s (PHP: -9% SQL: 109%)
Consultas SQL: 25 - Debug off - GZIP Activado