Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Ejemplo Con Cadenas Y El Uso De Estas Como Arrays
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Ejemplo Con Cadenas Y El Uso De Estas Como Arrays 
 
Buenas!.

Parece que con la nueva versión de gambas se puede usar las cadenas al igual que un array.
No tiene aun las características de Python, pero en parte algo de semejanza.
Propongo un ejemplo sencillo. Vamos a ver la diferencia entre los dos lenguajes.

Para el que no lo sepa, en Python se usa el termino "Inmutable", no se puede cambiar, no acepta asignación
Si tenemos en Python esta palabra:

palabra = "Hola"
No podemos hacer:

palabra[0] = "M"
Nos da el siguiente error:

Citar:

Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    palabra[0] = 'M'
TypeError: 'str' object does not support item assignment


Por su propiedad de inmutable.

Ahora bien. Vamos a Gambas.

Public Sub Main()
  
  Dim frase As String
  
  frase = "Hola"
  
  Print frase[0]
  
  'Error. No es una matriz
  frase[0] = "M"
  
End
 


En Python si quisiéramos lograrlo deberíamos usar el troceado. No es una sustitución naturalmente.
El indice de la primera letra es 0. Pasamos del indice 0 y concatenamos lo que queda con el carácter "M"

Print ('M' + frase[1:])
 


También podríamos formar una nueva palabra y asignarla a una variable.

Si lo hiciéramos en gambas. Usaríamos la "función" Mid.

Print "M" & Mid(frase, 2)
 


También podríamos crear una nueva cadena.

Aunque los indices en gambas como un array podamos usar palabra[0], las funciones necesitan del comienzo en el indice 1.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Lunes, 07 Enero 2019, 14:44; editado 1 vez 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo Con Cadenas Y El Uso De Estas Como Arrays 
 
Cuestión sobre las cadenas:

Si es que no lo he preguntado antes. En gambas nunca usamos indices negativos, ¿ verdad ?.
¿ Mid no aceptaba valores negativos ?.  

En caso de ir hacia atrás solemos usar Right, con valores positivos.

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: Ejemplo Con Cadenas Y El Uso De Estas Como Arrays 
 
https://lists.gambas-basic.org/pipe...ber/065515.html

https://gitlab.com/gambas/gambas/co...c8784d8e6b72481
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo Con Cadenas Y El Uso De Estas Como Arrays 
 
Gracias Vuott.

Acostumbrado a usar Mid, resulta algo raro.

' gambas module file

'https://lists.gambas-basic.org/pipermail/user/2018-September/065515.html

Const inicio As Integer = 1

Public Sub Main()
  
  Ejemplo2
  
End

Public Sub Ejemplo1() ''Usando Mid
  
  Dim frase As String
  
  frase = "Hola"
  Print "M" & Mid(frase, 2)
  
End

Public Sub Ejemplo2() ''Usando método equivalente
  
  Dim frase As String
  
  frase = "Hola"  
  
  Print "M" & frase[inicio, frase.len - inicio]  
  
End
 


Si este mismo código lo dejo más reducido tal como este:

Const inicio As Integer = 1
Const frase As String = "Hola"

Public Sub Main()
  
  Ejemplo1
  
End

Public Sub Ejemplo1() ''Usando Mid
  
  Print "M" & Mid(frase, 2)
  
End

Public Sub Ejemplo2() ''Usando metodo equivalente
  
  Print "M" & frase[inicio, frase.len - inicio]  
  
End
 


Ejemplo2 da error. Dice que frase es un identificador desconocido.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Martes, 08 Enero 2019, 00:57; editado 2 veces 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo Con Cadenas Y El Uso De Estas Como Arrays 
 
Shell escribió: [Ver mensaje]
... usar las cadenas al igual que un array.

Para comprender esto, hace falta volver a llamar la definición de cadena de carácteres en C:

" Una cadena en C es un array de caracteres de una dimensión (vector de caracteres) que termina con el carácter especial ‘\0’ (cero)  ".
 



 
última edición por vuott el Martes, 08 Enero 2019, 01:55; editado 1 vez 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo Con Cadenas Y El Uso De Estas Como Arrays 
 
Vuott:

Es que en "C" no existe un tipo predefinido para manipular cadenas. Aunque hay algunas funciones para su tratamiento.
Todas las cadenas en "C" terminan con el carácter "especial" '\0'. ¿ Especial ?.  

Así que si una cadena tiene una longitud "n" por el carácter especial '\0'  es n + 1.
Incluso en "C" cuando se declara un tipo cadena parece un array.

char nombre[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: Ejemplo Con Cadenas Y El Uso De Estas Como Arrays 
 
Shell escribió: [Ver mensaje]
Todas las cadenas en "C" terminan con el carácter "especial" '\0'. ¿ Especial ?

...es decir el valor 0x00 (en Gambas: &h00).


Shell escribió: [Ver mensaje]
Así que si una cadena tiene una longitud "n" por el carácter especial '\0'  es n + 1.

Eh sì.


Shell escribió: [Ver mensaje]
Incluso en "C" cuando se declara un tipo cadena parece un array.

De facto las cadenas en C son array que - pero - deben terminar por cero.
De esta manera las funciones de C, capaces de leer una "cadena", pueden saber donde termina la cadena.... un valor antes del primer cero que se encuentra en la cadena.
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Ejemplo Con Cadenas Y El Uso De Estas Como Arrays 
 
Tambien la función String@( ), para dereferenciar una variable de tipo Puntero, funciona de misma manera:

Public Sub Main()

  Dim s As String = "abc\x00cde"
  Dim p As Pointer
  
  p = VarPtr(s)
  
  Print String@(p)

End

 



 
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 Mostrar Arrays Dentro De Otro Arrays Shell General 9 Domingo, 07 Diciembre 2014, 20:30 Ver último mensaje
Shell
No hay nuevos mensajes Como Optimizar Estas Lineas? v3ctor General 2 Jueves, 02 Julio 2015, 23:01 Ver último mensaje
PabloGener
No hay nuevos mensajes ¿ Existe Una Propiedad Como "index&q... Shell General 6 Domingo, 23 Septiembre 2018, 13:12 Ver último mensaje
shordi
No hay nuevos mensajes Existe Algo Como Var_dump De Php Para Obse... gambafeliz General 22 Lunes, 15 Julio 2019, 13:06 Ver último mensaje
gambafeliz
 

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