Páginas (2): 1 2   
gambafeliz   14-08-2020, 22:10
#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?
Última modificación: 15-08-2020, 09:10 por gambafeliz.
vuott   15-08-2020, 00:34
#2
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
Última modificación: 15-08-2020, 00:45 por vuott.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
gambafeliz   15-08-2020, 09:08
#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
vuott   15-08-2020, 16:27
#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[ ].
Última modificación: 15-08-2020, 16:32 por vuott.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
gambafeliz   15-08-2020, 21:07
#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
cogier   16-08-2020, 11:49
#6
Alternativamente

Código:
Public Sub Form_Open()

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

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

  Print miCadena & "abcdefg"

End
Última modificación: 16-08-2020, 11:53 por cogier.
vuott   16-08-2020, 14:43
#7
(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() !

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
vuott   17-08-2020, 00:40
#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".

Código:
Public Sub Main()

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

End
Última modificación: 17-08-2020, 00:41 por vuott.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
gambafeliz   17-08-2020, 18:07
#9
(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.
Última modificación: 17-08-2020, 18:11 por gambafeliz.
cogier   17-08-2020, 19:21
#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.

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
Páginas (2): 1 2   
  
Usuarios navegando en este tema: 6 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.