Mensajes: 466
Temas: 111
Gracias Recibidas: 17 en 16 posts
Gracias Dadas: 101
Registro en: Jul 2020
14-08-2020, 22:10
(Última modificación: 15-08-2020, 09:10 por
gambafeliz.)
Hola
Tengo una cadena (String) que esta formada así:
miCadena = "Nombre\nApellidos\n"
Y quiero poner esto:
miCadena = "Nombre\nApellidos\t"
Quiero sustituir "nueva línea" por "tabulador"
¿Me ayudan?
Mensajes: 340
Temas: 25
Gracias Recibidas: 89 en 69 posts
Gracias Dadas: 11
Registro en: Jul 2020
15-08-2020, 00:34
(Última modificación: 15-08-2020, 00:45 por
vuott.)
Una solución puede ser esta:
GAMBAS
Mid(miCadena,
Len(miCadena
),
1) = gb.
Tab
Print miCadena
& "abcdefg"
...o si prefieres:
GAMBAS
miCadena
= Byte[].
FromString("Nombre\nApellidos\n")
miCadena
[miCadena.
Max] = 9
Print miCadena.
ToString() & "abcdefg"
"Los horizontes perdidos nunca regresan. " (F. Battiato, La stagione dell'amore, 1983)
"Las ondas nunca regresan. " (Genesis: Ripples - A trick of the tail, 1976)
Mensajes: 466
Temas: 111
Gracias Recibidas: 17 en 16 posts
Gracias Dadas: 101
Registro en: Jul 2020
Gracias, vuott
Sinceramente yo intentaba sustraer \n con las funciones de cadena y siempre siempre sustraía "Apellidos" en "Apellid" y no sabia como resolverlo.
Pero ahora que veo tus propuestas de código, me quedo, aunque parece simple para mi es guau.
Quiero decirte que veo tus propuestas y sinceramente no las entiendo, aunque comprendo las funciones que propones pero no consigo entender el código en su mecánica.
No llego
Mensajes: 340
Temas: 25
Gracias Recibidas: 89 en 69 posts
Gracias Dadas: 11
Registro en: Jul 2020
15-08-2020, 16:27
(Última modificación: 15-08-2020, 16:32 por
vuott.)
El tu propósito es reemplazar el último carácter (de \n a \t) de la cadena considerada.
En mi primera solución traté de utilizar una función-cadena que permitiera sustituir el último carácter.
He identificado esta función en Mid().
La función Mid() no es sólo de lectura, sino también de escritura.
En esta segunda capacidad, la función Mid() puede sustituir uno o más caracteres, que se le asignan, en la posición indicada en el segundo parámetro por un número de caracteres a sustituir indicado en el tercer parámetro.
En general, Mid() es útil para escribir dentro de una cadena, sustituyendo uno o más caracteres existentes.
Además, en mi ejemplo yo asigno a la función Mid() la constante de Gambas que se refiere al carácter de tabulación.
Por supuesto, una cadena de caracteres no es más que una secuencia de bytes, cada uno con su propio valor.
También el carácter escape de tabulación en el código ASCII corresponde a un valor, más precisamente al valor &h09 (en C: 0x09).
Por lo tanto, sólo hace falta que cambiar el último byte (el del carácter originario \n, que tiene valor &h0A) al valor &h09.
Es lo que hice fácilmente usando un array de tipo byte[ ].
"Los horizontes perdidos nunca regresan. " (F. Battiato, La stagione dell'amore, 1983)
"Las ondas nunca regresan. " (Genesis: Ripples - A trick of the tail, 1976)
Mensajes: 466
Temas: 111
Gracias Recibidas: 17 en 16 posts
Gracias Dadas: 101
Registro en: Jul 2020
Gracias, vuott, Super Bien explicado. Tras repasar la lógica de tu código me dí cuenta que lo que yo no sabia era que la Función MID era de escritura, al fin y al cabo es lo que tu has ejecutado. Recordé que esto mismo ya me lo contó Shell en el pasado pero se me olvidó y nunca tuve en cuenta que MID me resolvería el problema. Yo lo usaba mal para este ejemplo e intentaba eliminar los dos últimos caracteres y nunca lo lograba por que no solo quitaba 2 caracteres de la palabra sino que no desquitaba \n por no usar la Constante (gb.xxx)
En fin, muchas gracias y un tema muy educativo por tu parte. +10
Mensajes: 147
Temas: 2
Gracias Recibidas: 107 en 70 posts
Gracias Dadas: 8
Registro en: Jul 2020
16-08-2020, 11:49
(Última modificación: 16-08-2020, 11:53 por
cogier.)
Alternativamente
GAMBAS
miCadena
= Left(miCadena,
-1) & gb.
Tab
Print miCadena
& "abcdefg"
Mensajes: 340
Temas: 25
Gracias Recibidas: 89 en 69 posts
Gracias Dadas: 11
Registro en: Jul 2020
(16-08-2020, 11:49)cogier escribió:
Bravo cogier.
Muy interesante el uso del valor negativo en el segundo argumento de la función Left() !
"Los horizontes perdidos nunca regresan. " (F. Battiato, La stagione dell'amore, 1983)
"Las ondas nunca regresan. " (Genesis: Ripples - A trick of the tail, 1976)
Mensajes: 340
Temas: 25
Gracias Recibidas: 89 en 69 posts
Gracias Dadas: 11
Registro en: Jul 2020
17-08-2020, 00:40
(Última modificación: 17-08-2020, 00:41 por
vuott.)
Bueno,
retomando la idea de
cogier del número negativo, tambien podemos disfrutar de la capacidad de la variable de tipo
String como si fuera un po' parecido a un Objeto "array".
GAMBAS
miCadena = miCadena[0, -1] & gb.Tab
Print miCadena
& "abcdefg"
"Los horizontes perdidos nunca regresan. " (F. Battiato, La stagione dell'amore, 1983)
"Las ondas nunca regresan. " (Genesis: Ripples - A trick of the tail, 1976)
Mensajes: 466
Temas: 111
Gracias Recibidas: 17 en 16 posts
Gracias Dadas: 101
Registro en: Jul 2020
17-08-2020, 18:07
(Última modificación: 17-08-2020, 18:11 por
gambafeliz.)
(16-08-2020, 11:49)cogier escribió: Alternativamente
GAMBAS
miCadena
= Left(miCadena,
-1) & gb.
Tab
Print miCadena
& "abcdefg"
Gracias cogier
La pregunta es para el primero que me quiera contestar, vale?
Entiendo que Left -1 lo que hace es restar "\n" como si de un caracter se tratara y después con "& gb.Tab" es el sustituto de "\n"
¿Es así verdad?
(17-08-2020, 00:40)vuott escribió: Bueno,
retomando la idea de cogier del número negativo, tambien podemos disfrutar de la capacidad de la variable de tipo String como si fuera un po' parecido a un Objeto "array".
GAMBAS
miCadena = miCadena[0, -1] & gb.Tab
Print miCadena
& "abcdefg"
Mira vuott mu chulo tu código pero entre tu y cogier me vais a rayar el coco, pero bueno que coones es este último código, ¿te diviertes a costa mia?
De verdad no, no lo pillo. Es como un array pero no lo pillo.
Mensajes: 147
Temas: 2
Gracias Recibidas: 107 en 70 posts
Gracias Dadas: 8
Registro en: Jul 2020
(17-08-2020, 18:07)gambafeliz escribió: Gracias cogier
La pregunta es para el primero que me quiera contestar, vale?
Entiendo que Left -1 lo que hace es restar "\n" como si de un caracter se tratara y después con "& gb.Tab" es el sustituto de "\n"
¿Es así verdad?
Casi correcto. El código elimina la "\n" y luego añade la "gb.Tab". No hay sustitución.
Intenta con este código.
GAMBAS
miCadena
= Left(miCadena,
-1) miCadena
= Left(miCadena,
-1) miCadena
= Left(miCadena,
-1)
miCadena = miCadena & " cogier"