Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Lectura De Cadenas
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
Erik Gasca - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 



 
Erik Gasca - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Conversion De Cadenas zepjau General 2 Jueves, 07 Julio 2011, 19:38 Ver último mensaje
zepjau
No hay nuevos mensajes Cadenas Largas Shell General 0 Viernes, 19 Julio 2013, 10:50 Ver último mensaje
Shell
No hay nuevos mensajes ¿ Existe La Interpolación De Cadenas En ... Shell General 2 Viernes, 19 Julio 2013, 11:33 Ver último mensaje
Shell
No hay nuevos mensajes Usar Constantes En Vez De Cadenas Shell General 5 Martes, 13 Diciembre 2016, 01:35 Ver último mensaje
tincho
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron