https://foro.gambas-es.org/viewtopic.php?f=1&t=12
-----------------------------------
soplo
Domingo, 13 Septiembre 2009, 18:51

Manipulación De Strings
-----------------------------------
[size=14][color=darkgreen]Conjuntos de caracteres[/color][/size]
Al contrario que en C, en gambas los string empiezan por la posición 1.
En  gambas se utiliza para las strings el juego de caracteres UTF-8  lo que hace que muchas órdenes genéricas de string no funcionen correctamente (cuando intervienen códigos ascii extendidos).

Para resolver esto existe la clase string que tiene las mismas órdenes, pero preparadas para trabajar con UTF-8.

Así por ejemplo
print len("bebé") = 5 (porque en  UTF8 los caracteres extendidos tienen dos bytes)
print string.len("bebé") = 4 (porque al utiliza r UTF-8 se entiende que la é tiene dos bytes en vez de uno

[size=14][color=darkgreen]Strings vacíos[/color][/size]
if string="" then          if len(string)=0 then
if string<>"" then       if len(string)>0 then

Pero en Gambas esto es mas sencillo
if string th en  ====> no está  vacía
if not string th en  ==> está vacía

[size=14][color=darkgreen]Comandos para manipulación de strings[/color][/size]

[color=darkred]len[/color]
Devuelve la longitud de un  string
[code linenumbers=false]longitud=len(string)[/code]

[color=darkred]Upper  Ucase Lower Lcase[/color]
Upper y Ucase son sinónimos y convierten una string a mayúsculas
Lower y lcase son sinónimos y convierten  una  string a minúsculas.
Estos comandos no funcionan con UTF-8

[color=darkred]Trim ltrim rtrim[/color]
Quita espacios en la string.
ltrim ====> quita los espacios a la izquierda hasta el primer caracter no espacio
rtrim ====> quita los espacios a la  derecha hasta el primer caracter no espacio
trim ====> quita los espacios a la  izquierda y a la  derecha

[color=darkred]left, mid, right[/color]
Aquí hay serias diferencias con VB

x=left(string,4) ====> extrae los cuatro primeros caracteres por la izquierda
x=left(string) ====> extrae el primer caracter de la izquierda
x=left(string,-5) ====> Si el número de caracteres es negativo entonces indica el número de caracteres a no extraer
left("pepito grillo".-7)="pepito")
x=mid(string,inicio,longitud) ====> extrae a partir de inicio los caracteres especificados en longitud
x=mid(string,inicio) ====> extrae todo desde la posicion inicio
x=mid(string,inicio,-longitud) ====> si la longitud es negativa entonces indica la cantidad de caracteres partiendo de la derecha a no extraer
mid("pepito grillo",2,-7)="epito"
x=right(string,4) ====> extrae los cuatro primeros caracteres de la derecha
x=right(string) ====> extrae el primer caracter de la derecha
x=right(string,-5) ====> Si el número de caracteres es negativo entonces indica el número de caracteres a no extraer
right("pepito grillo",-7)="grillo"

[color=darkred]space[/color]
crea  un string con X espacios
string="Perico" & spaces(10) ====> "Perico          "

[color=darkred]replace[/color]
reemplaza  ca da ocurrencia de la plantilla por lo indicado
stringa =replace(strin gb,plantilla ,reemplazo)
stringa =replace("abcdef","bc","xx") ====> stringa="axxdef"

[color=darkred]string[/color]
devuelve un string con X  veces la  cadena propuesta
cadena=string(10,".") ====> cadena=".........."

[color=darkred]instr rinstr[/color]
devuelve la posición  de la primera ocurrencia de su bstring en  la cadena
rinstr igual pero por la  derecha
posicion=instr("0123456789","23") ====> posición = 3
posicion=rinstr("0123456789","23") ====> posición = 6

[color=darkred]split[/color]
divide una string en varias separadas por un separador indicado.

[code linenumbers=false]dim array as string[]
array=split(string,"|")
[/code]

[color=darkred]asc chr[/color]
¡Ojo! Gambas funciona con  UTF-8. Los caracteres del ascii extendido (por encima del 128) no funcionarán  bien.
asc(x) devuelve el código ascii de X
chr(x) devuelve el ca racter que corresponde al código ascii X

[color=darkred]Bin[/color]
Devuelve un string que es la  conversión al binario de un valor
x=bin(y) ====> x = valor binario de y

[color=darkred]hex[/color]
Devuelve un string qu e es la  conversión al hexadecimal de un valor
x=hex(y) ====> x = valor hexadecimal de y

[color=darkred]str$ val[/color]
str convierte un valor numérico a string
val convierte un string en un valor numérico respetando las especificaciones del país de fecha s y números

[color=darkred]SConv[/color]
Convierte una expresión  UTF-8 al juego de caracteres del sistema

[color=darkred]Dconv[/color]
Convierte una expresión  del juego de caracteres del sistema a  UTF-8

[color=darkred]Conv[/color]
Convierte una expresión  de un  sistema de caracteres a otro

[color=darkred]format[/color]
formatea  un valor con un determinado formato.
Los formatos predefinidos son :
gb.GeneralNumber ====> escribe con doce dígitos decimales. Si el número es muy grande o muy pequeño lo
convierte a formato científico.
gb.fixed ====> equivale a "0.00 "
gb.percent ====> equivale a  "###%"
gb.generaldate ====> escribe la fecha solo si tien e info de fecha . Escribe la hora solo si tiene in fo de h ora.
gb.longdate ====> fecha larga
gb.mediumda te ====> fecha  media
gb.shortdate ====> fecha corta
gb.longtime ====> h ora larga
gb.mediumtime ====> hora media
gb.shorttime ====> h ora corta
gb.currency ====> usa el símbolo de mon eda na ciona l
gb.interna ciona l ====> usa el símbolo internacional de moneda

[color=darkgreen][size=14]Operadores[/size][/color]

[color=darkred]Concatenar strings[/color]
string3=string1 & string2
string1 &=string2    ====> string1 = string 1 & string2

[color=darkred]Búsqueda de subcadenas[/color]
string like plantilla

[color=darkred]Comparación de cadenas[/color]
[code linenumbers=false]string <> string ====> true si son distintas
string1 < string2 ====> true si string1 es mas corta que string2
string1 <= string2 ====> true si string1 es menor o igual que string2
[/code]


