Comunidad Gambas-es
[SOLUCIONADO] ¿Como reemplazo \n por \t dentro de una cadena? - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: General (https://gambas-es.org/forum-4.html)
+--- Tema: [SOLUCIONADO] ¿Como reemplazo \n por \t dentro de una cadena? (/thread-69.html)

Páginas: 1 2


¿Como reemplazo \n por \t dentro de una cadena? - gambafeliz - 14-08-2020

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?


RE: ¿Como reemplazo \n por \t dentro de una cadena? - vuott - 15-08-2020

Una solución puede ser esta:

Código:
Public Sub Main()

  Dim miCadena As String = "Nombre\nApellidos\n"
 
  Mid(miCadena, Len(miCadena), 1) = gb.Tab
 
  Print miCadena & "abcdefg"

End

...o si prefieres:
Código:
Public Sub Main()

  Dim miCadena As Byte[]
 
  miCadena = Byte[].FromString("Nombre\nApellidos\n")
 
  miCadena[miCadena.Max] = 9
 
  Print miCadena.ToString() & "abcdefg"

End



RE: ¿Como reemplazo \n por \t dentro de una cadena? - gambafeliz - 15-08-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 Sad


RE: ¿Como reemplazo \n por \t dentro de una cadena? - vuott - 15-08-2020

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[ ].


RE: ¿Como reemplazo \n por \t dentro de una cadena? - gambafeliz - 15-08-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


RE: ¿Como reemplazo \n por \t dentro de una cadena? - cogier - 16-08-2020

Alternativamente

Código:
Public Sub Form_Open()

  Dim miCadena As String = "Nombre\nApellidos\n"

  miCadena = Left(miCadena, -1) & gb.Tab

  Print miCadena & "abcdefg"

End



RE: ¿Como reemplazo \n por \t dentro de una cadena? - vuott - 16-08-2020

(16-08-2020, 11:49)cogier escribió: [code]

Bravo cogier.
Muy interesante el uso del valor negativo en el segundo argumento de la función Left() !


RE: ¿Como reemplazo \n por \t dentro de una cadena? - vuott - 17-08-2020

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".

Código:
Public Sub Main()

  Dim miCadena As String = "Nombre\nApellidos\n"
 
  miCadena = miCadena[0, -1] & gb.Tab
 
  Print miCadena & "abcdefg"

End



RE: ¿Como reemplazo \n por \t dentro de una cadena? - gambafeliz - 17-08-2020

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

Código:
Public Sub Form_Open()

  Dim miCadena As String = "Nombre\nApellidos\n"

  miCadena = Left(miCadena, -1) & gb.Tab

  Print miCadena & "abcdefg"

End

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".

Código:
Public Sub Main()

  Dim miCadena As String = "Nombre\nApellidos\n"
 
  miCadena = miCadena[0, -1] & gb.Tab
 
  Print miCadena & "abcdefg"

End

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.


RE: ¿Como reemplazo \n por \t dentro de una cadena? - cogier - 17-08-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.

Código:
Public Sub Form_Open()

  Dim miCadena As String = "gambafeliz123"

  miCadena = Left(miCadena, -1)
  Print miCadena
  miCadena = Left(miCadena, -1)
  Print miCadena
  miCadena = Left(miCadena, -1)
  Print miCadena

  miCadena = miCadena & " cogier"

  Print miCadena

End