Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

Borrar este aviso
El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

[SOLUCIONADO]  ¿Como reemplazo \n por \t dentro de una cadena?
#1

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?
#2

Una solución puede ser esta:

GAMBAS
  1. Public Sub Main()
  2.  
  3.   Dim miCadena As String = "Nombre\nApellidos\n"
  4.  
  5.   Mid(miCadena, Len(miCadena), 1) = gb.Tab
  6.  
  7.   Print miCadena & "abcdefg"
  8.  



...o si prefieres:
GAMBAS
  1. Public Sub Main()
  2.  
  3.   Dim miCadena As Byte[]
  4.  
  5.   miCadena = Byte[].FromString("Nombre\nApellidos\n")
  6.  
  7.   miCadena[miCadena.Max] = 9
  8.  
  9.   Print miCadena.ToString() & "abcdefg"
  10.  



"Los horizontes perdidos nunca regresan. " (F. Battiato)
#3

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 Sad
#4

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)
#5

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
#6

Alternativamente

GAMBAS
  1. Public Sub Form_Open()
  2.  
  3.   Dim miCadena As String = "Nombre\nApellidos\n"
  4.  
  5.   miCadena = Left(miCadena, -1) & gb.Tab
  6.  
  7.   Print miCadena & "abcdefg"
  8.  


#7

(16-08-2020, 11:49)cogier escribió:  
GAMBAS
  1. Left(miCadena, -1)


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)
#8

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
  1. Public Sub Main()
  2.  
  3.   Dim miCadena As String = "Nombre\nApellidos\n"
  4.  
  5.   miCadena = miCadena[0, -1] & gb.Tab
  6.  
  7.   Print miCadena & "abcdefg"
  8.  



"Los horizontes perdidos nunca regresan. " (F. Battiato)
#9

(16-08-2020, 11:49)cogier escribió:  Alternativamente

GAMBAS
  1. Public Sub Form_Open()
  2.  
  3.   Dim miCadena As String = "Nombre\nApellidos\n"
  4.  
  5.   miCadena = Left(miCadena, -1) & gb.Tab
  6.  
  7.   Print miCadena & "abcdefg"
  8.  


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
  1. Public Sub Main()
  2.  
  3.   Dim miCadena As String = "Nombre\nApellidos\n"
  4.  
  5.   miCadena = miCadena[0, -1] & gb.Tab
  6.  
  7.   Print miCadena & "abcdefg"
  8.  


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? Smile

De verdad no, no lo pillo. Es como un array pero no lo pillo.
#10

(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
  1. Public Sub Form_Open()
  2.  
  3.   Dim miCadena As String = "gambafeliz123"
  4.  
  5.   miCadena = Left(miCadena, -1)
  6.   Print miCadena
  7.   miCadena = Left(miCadena, -1)
  8.   Print miCadena
  9.   miCadena = Left(miCadena, -1)
  10.   Print miCadena
  11.  
  12.   miCadena = miCadena & " cogier"
  13.  
  14.   Print miCadena
  15.  




Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)