Ejemplo Con Cadenas Y El Uso De Estas Como Arrays


Objetivo: 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

última edición por Shell el Lunes, 07 Enero 2019, 14:44; editado 1 vez
Objetivo: 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

Objetivo: 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

Perfil MP  
Objetivo: 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

última edición por Shell el Martes, 08 Enero 2019, 00:57; editado 2 veces
Objetivo: 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
Perfil MP  
Objetivo: 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

Objetivo: 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.

Perfil MP  
Objetivo: 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

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.4406s (PHP: -75% SQL: 175%)
Consultas SQL: 47 - Debug off - GZIP Activado