| 
	
		|  Autor | Tema: cadenas de caracteres Visual Basic  (Leído 7,070 veces) |  
	| 
			| 
					
						| 01munrra 
								
								 Desconectado 
								Mensajes: 282
								
								   | 
 
Saludos! tengo el siguiente codigo:         Dim oracion As String = "Hola Mundo Como estas?"  'Trim(TextBox_oracion.Text())        Dim i As Integer = 1        Dim posicion As Integer        Dim palabra As String         Do            posicion = InStr(i, oracion, " ")            If posicion > 0 Then                palabra = Mid(oracion, i, posicion - i)                ListBox_separar.Items.Add(cambiar_palabra(palabra))                posicion = posicion + 1                i = posicion            End If        Loop Until posicion = 0 
 y quiero que me separe las palabras y me las imprima una por una, pero me imprime esto: HolaMundo Como 
 no me esta imprimiendo la palabra estas , donde tendre mi error?.... gracias!
 
 |  
						| 
								|  |  
								| « Última modificación:  7 Octubre 2015, 06:08 am por 01munrra » |  En línea | 
 
 |  |  |  | 
			| 
					
						| Lekim 
								
								 Desconectado 
								Mensajes: 268
								
								   | 
 
 No entiendo muy bien que es lo que quiere hacer. Además hay lo que parece un Array que no defines cambiar_palabra().  Ten en cuenta que al usarListBox_separar.Items.Add  se crea un nuevo Item en el ListBox  cada vez que añade un elemento y por eso se te muestra así: Puedes usar una Variable string para añadir las palabras y luego meterlas en el ListBox: Public Class Form1     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click        Dim oracion As String = "Hola Mundo Como estas?"  'Trim(TextBox_oracion.Text())        Dim i As Integer = 1        Dim posicion As Integer        Dim palabra As String        Dim NuevaFrase As String = Nothing        Do            posicion = InStr(i, oracion, Convert.ToChar(Keys.Space))            If posicion > 0 Then                palabra = Mid(oracion, i, posicion - i)                NuevaFrase += palabra                posicion += 1                i = posicion            End If        Loop Until posicion = 0        ListBox1.Items.Add(NuevaFrase)    End SubEnd Class
 Aunque tu código no parece estar bien ya que cuando se acaban los "" el bucle no puede continuar y se queda en: "HolaMundoComo" Te recomiendo que uses un Array y la función Split . Creo que este es el código que buscas :     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click        Dim Cadena As String = "Hola Mundo Como estas?"        Dim Array() As String = Cadena.Split(Convert.ToChar(Keys.Space))         Dim NuevaCadena As String = Nothing        For I As Integer = 0 To Array.Count - 1            NuevaCadena += Array(I)        Next        ListBox1.Items.Add(NuevaCadena)    End Sub
 De todos modos, he realizado varios códigos más, uno saca las palabras distintas a "" y vuelve a generar la frase (en btnNormal ) y el otro código hace lo mismo pero coloca las palabras en orden aleatorio (btnAleatorio).  Esta vez, he creado otra variable Lista, para meter cada palabra, para luego ordenarlas o desordenarlas, poner espacios o carácteres entre ellas, etc.No añadas ningún control, ni botones, ni ListBox, tan solo crea un nuevo proyecto Windows Form y copia y pega este código. Luego ejecuta el programa. Los controles se crean desde el Evento Load.
 
 Option Explicit OnOption Strict OnPublic Class Form1     Dim lstLista1 As ListBox = New ListBox 'Nuevo ListBox    Dim lstLista2 As ListBox = New ListBox 'Nuevo ListBox    Dim btnNormal As Button = New Button 'Nuevo Button    Dim btnAleatorio As Button = New Button 'Nuevo Button    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load        With Me            .Controls.Add(lstLista1)            .Controls.Add(lstLista2)            .Controls.Add(btnNormal)            .Controls.Add(btnAleatorio)            .Size = New System.Drawing.Size(445, 200)            .Text = "Demo"        End With          lstLista1.Location = New Point(10, 10)        lstLista1.Width = 200         lstLista2.Location = New Point(lstLista1.Left + lstLista1.Width + 10, 10)        lstLista2.Width = 200         With btnNormal            .Size = New System.Drawing.Size(150, 23)            .Location = New Point(CInt((lstLista1.Width / 2) - (btnNormal.Width / 2) + lstLista1.Left), lstLista1.Height + lstLista1.Top + 10)            .Text = "Frase Normal"        End With         With btnAleatorio            .Size = New System.Drawing.Size(150, 23)            .Location = New Point(CInt((lstLista2.Width / 2) - (btnAleatorio.Width / 2) + lstLista2.Left), lstLista2.Height + lstLista2.Top + 10)            .Text = "Frase desordenada"        End With         AddHandler btnNormal.Click, AddressOf btnNormal_Click        AddHandler btnAleatorio.Click, AddressOf btnAleatorio_Click    End Sub     Private Sub btnNormal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)        Dim IndexItem As Integer = 0        Dim Cadena As String = "Hola    Mundo Como estas?" & ControlChars.CrLf & "Estoy bien"        Cadena = Cadena.Replace(ControlChars.CrLf, Convert.ToChar(Keys.Space))        Dim Array() As String = Cadena.Split(Convert.ToChar(Keys.Space))  'Crea un Item en el array por cada palabra de la Cadena {"Hola","","que","","tal"...}        Dim Lista As New List(Of String)         For I As Integer = 0 To Array.Length - 1             Lista.Add(Array(I))        Next         Dim NuevaCadena As String = Nothing 'String para la nueva cadena        For Each Palabra As String In Lista            NuevaCadena += Palabra & Convert.ToChar(Keys.Space)        Next         lstLista1.Items.Clear()        lstLista1.Items.Add(DBNull.Value)        lstLista1.Items(IndexItem) = NuevaCadena    End Sub     Private Sub btnAleatorio_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)        Dim IndexItem As Integer = 0        Dim Cadena As String = "Hola Mundo    Como estas?" & ControlChars.CrLf & "Estoy bien"        Cadena = Cadena.Replace(ControlChars.CrLf, Convert.ToChar(Keys.Space))        Dim Array() As String = Cadena.Split(Convert.ToChar(Keys.Space))  'Crea un Item en el array por cada palabra de la Cadena {"Hola","","que","","tal"...}        Dim Lista As New List(Of String) 'Lista para las palabras          For I As Integer = 0 To Array.Length - 1 Then            Lista.Add(Array(I))         Next          Dim NumAleatorio As Integer        Dim Rand As New Random 'El equivalenta a Rnd() de VB (no necesita es uso Randomize())        Dim NuevaCadena As String = Nothing 'String para la nueva cadena         Do            NumAleatorio = Rand.Next(0, Lista.Count)            'Obtiene un número aleatorio entre 0 y el número de elementos de la lista            NuevaCadena += CStr(Lista(NumAleatorio).ToString & Convert.ToChar(Keys.Space))            'Elimina el elemento de de la lista con índice = NumAleatorio (para evitar repetir palabras)            Lista.RemoveAt(NumAleatorio)            My.Application.DoEvents()        Loop Until Lista.Count = 0         lstLista2.Items.Clear()        lstLista2.Items.Add(DBNull.Value)        lstLista2.Items(IndexItem) = NuevaCadena    End Sub     Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize        Me.StartPosition = FormStartPosition.CenterScreen    End SubEnd Class 
 Quiero comentar que en .NET aunque se pueden usar algunos miembros de Microsoft.VisualBasic, así como Split, IntStr, Mid, char,  etc. VB.Net tiene unos miembros y clases propias para realizar estas funciones. Como exprogramadores de VB6 (yo a veces lo uso para según que cosas), nuestra mente, a la hora de procesar una idea y pasarla a código de programación le cuesta abandonar la lógica de VB, y aunque pasemos a VB.NET no podemos evitar darle ese toque VB. Mientras que los que comienzan directamente a programar a .NET, ven incluso absurdo, innecesario y rebuscado un código en .NET con la lógica VB. Yo he leído PDFs y libros en el que se usa indistintamente elementos de VB como de .NET, pero hay gente a la que no le gusta. Incluso en MSDN muchas veces en sus ejemplos de código hay elementos de VB. Personalmente no veo ningún problema en usarlos, pero es bueno también saber lo nuevo en .NET porque en muchos casos se reduce notablemente el volumen de código. Ocurre igual con los que empezaron con C y se pasaron a C++ o C#. Algunos cambios --VB--> Ubound(Array)   --VB.NET--> Array.Count--VB--> Char(código)     --VB.NET-->  convert.ToChar(código)
 --VB--> Mid(Cadena, Start, Lenght)    --VB.NET--> Cadena.Substring(Start, Length)
 --VB--> UCase(Cadena) --VB.NET-->  Cadena.ToUpper
 
Puedes encontrar algunas equivalencias entre VB y VB.NET aquí.http://en.wikibooks.org/wiki/Visual_Basic_.NET/Visual_Basic_6_to_.NET_Function_Equivalents
 
 |  
						| 
								|  |  
								| « Última modificación:  8 Octubre 2015, 11:47 am por Lekim » |  En línea | 
 
 |  |  |  | 
			| 
					
						| Flamer 
								       
								
								 Desconectado 
								Mensajes: 1.071
								
								 
								crack, crack y mas crack...
								
								
								
								
								
								     | 
 
Aqui te dejo un code haber si te entiendo Dim frase, matrix() As StringDim i As Integer frase = "Hola Mundo Hacker Soy Flamer"matrix = Split(frase, " ")For i = 0 To UBound(matrix)   MsgBox tr(i)Next  
 Saludos y dime si te sirbio |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| Lekim 
								
								 Desconectado 
								Mensajes: 268
								
								   | 
 
Aqui te dejo un code haber si te entiendo
 Hola Flamer, Si te fijas aquí el compi ha puesto un código para  VB.NET, luego supongo que busca VB.NET. A simple vista parece  de VB porque usa miembros de VB, pero es .NET Si me permites lo paso .NET, de todos modos es exacto al que he puesto yo, solo que en lugar de usar el Listbox has puesto un MessageBox y está en VB.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click     Dim frase As String = "Hola Mundo Hacker Soy Flamer"        Dim matrix() As String = frase.Split(Convert.ToChar(Keys.Space))         Dim NuevaFrase As String = Nothing        For I as integer = 0 To matrix.Length - 1            MessageBox.Show(matrix(I))        Next    End Sub
 Saludos |  
						| 
								|  |  
								| « Última modificación:  8 Octubre 2015, 11:31 am por Lekim » |  En línea | 
 
 |  |  |  | 
			| 
					
						| Flamer 
								       
								
								 Desconectado 
								Mensajes: 1.071
								
								 
								crack, crack y mas crack...
								
								
								
								
								
								     | 
 
hola Lekim ok no hay problema, es que siempre ando con la cabeza para otros lados y no leo y ni me fijo en nada jajajaja
 Saludos Flamer
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| Lekim 
								
								 Desconectado 
								Mensajes: 268
								
								   | 
 
hola Lekim ok no hay problema, es que siempre ando con la cabeza para otros lados y no leo y ni me fijo en nada jajajaja
 Saludos Flamer
 
 Bueno, de todos modos no has puesto nada incompatible con VB.NET, ya que Split , UBound , o MsgBox , se puede seguir usando en .NET.  Tu forma de ponerlo iría también perfecto en .NET, solo que te has trabado con el teclado y has puesto tr(i) en lugar de matrix(i)    |  
						| 
								|  |  
								| « Última modificación:  8 Octubre 2015, 11:51 am por Lekim » |  En línea | 
 
 |  |  |  | 
			| 
					
						| Flamer 
								       
								
								 Desconectado 
								Mensajes: 1.071
								
								 
								crack, crack y mas crack...
								
								
								
								
								
								     | 
 
jajajaj si es que había hecho un programa ala carrera y ala hora de cambiar el nombre a las variables se me olvido cambiarle el nombre 
 saludos
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| 01munrra 
								
								 Desconectado 
								Mensajes: 282
								
								   | 
 
el problema es el siguiente:
 tengo la siguiente oracion: "Hola Mundo como estas?"
 y el problema me pide que saque las palabras usando cadena de caracteres,
 es decir, me imprima algo haci:
 "Palabra1 = Hola"
 "Palabra2 = Mundo"
 "Palabra3 = como"
 "Palabra4 = estas?"
 
 para este caso, tengo que usar las funciones(InStr() y Mid()),  y no puedo usar nada de vectores, matrices ya que se vuelve simple el ejercicio,  me piden que usen las funciones que les indique atras,....
 
 gtacias por su atencion!
 |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| 01munrra 
								
								 Desconectado 
								Mensajes: 282
								
								   | 
 
 No entiendo muy bien que es lo que quiere hacer. Además hay lo que parece un Array que no defines cambiar_palabra(). cambiar_palabra(palabra)
 , es una funcion que cambia letras de mayuscula a minuscula y viceversa, pero eso no viene al caso.... esa funcion funciona bien. |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| Lekim 
								
								 Desconectado 
								Mensajes: 268
								
								   | 
 
Hola. A ver si esto le parece bien al profesor/a:[CÓDIGO VB.NET CON FUNCIONES DE VB] [EL MISMO CÓDIGO CON FUNCIONES PROPIAS DE VB.NET]    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click        Dim Pos As Integer = 0        Dim Palabra As String = Nothing        Dim Cadena As String = "Hola mundo ¿Cómo estás?"        Dim Contador As Integer        Do            Contador = Contador + 1            Pos = InStr(1, Cadena, " ", vbTextCompare) 'Busca la posición del primer " "            If Pos > 0 Then 'Pos > 0 Esto es así cuando se ha encontrado un espacio " "                Palabra = Mid(Cadena, 1, Pos - 1) 'Obtiene la palabra                Cadena = Replace(Cadena, Palabra & " ", "") 'Elimina de la cadena la palabra encontrada y el espacio " "            Else 'Ya no quedan espacios " "                Palabra = Cadena 'Mete en 'Palabra lo que queda en cadena tal cual            End If            ListBox1.Items.Add("Palabra" & Contador & ": " & Palabra)        Loop Until Pos = 0    End Sub 
      Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click        Dim Pos As Integer = 0        Dim Palabra As String = Nothing        Dim Cadena As String = "Hola mundo ¿Cómo estás?"        Dim Contador As Integer        Do            Contador = Contador + 1            Pos = Cadena.IndexOf(" ")            If Pos > -1 Then                Palabra = Cadena.Substring(0, Pos)                Cadena = Cadena.Replace(Palabra & " ", "")            Else                Palabra = Cadena            End If            ListBox1.Items.Add("Palabra" & Contador & ": " & Palabra)        Loop Until Pos = -1     End Sub  
 [Y POS SI LAS MOSQUIS....    TAMBIÉN EN VB] Private Sub Command1_Click()        Dim Pos As Integer        Dim Palabra As String        Dim Cadena As String        Dim Contador As Integer         Cadena = "Hola mundo ¿Cómo estás?"  Do        Contador = Contador + 1        Pos = InStr(1, Cadena, " ", vbTextCompare)        If Pos > 0 Then        Palabra = Mid(Cadena, 1, Pos - 1)        Cadena = Replace(Cadena, Palabra & " ", "")        Else        Palabra = Cadena        End If        List1.AddItem "Palabra" & Contador & ":" & Palabra  Loop Until Pos = 0End Sub 
 |  
						| 
								|  |  
								| « Última modificación:  9 Octubre 2015, 15:37 pm por Lekim » |  En línea | 
 
 |  |  |  |  |  
 
	
 
 
				
					
						| Mensajes similares |  
						|  | Asunto | Iniciado por | Respuestas | Vistas | Último mensaje |  
						|   |   | Eliminar los 3 primeros caracteres de un textbox en visual basic Programación Visual Basic
 | ELGRANSOLRAC | 4 | 12,792 |  16 Agosto 2005, 00:21 am por .pUnÏsHEr.
 |  
						|   |   | [Tuto MegaBasic ^^] Agregar Cadenas Al Registro Desde Visual Basic 6 Programación Visual Basic
 | Petro_Boca | 0 | 1,814 |  21 Agosto 2010, 02:44 am por Petro_Boca
 |  
						|   |   | Cadenas de caracteres
							« 1 2 » Programación C/C++
 | Angel Zero | 10 | 9,852 |  4 Junio 2011, 18:38 pm por Angel Zero
 |  
						|   |   | Cadenas de caracteres Programación C/C++
 | carmelina | 2 | 2,704 |  7 Mayo 2012, 03:46 am por andres_5
 |  
						|   |   | Dividir string en cadenas (Visual Basic 6) Programación Visual Basic
 | GzaRC | 2 | 3,738 |  19 Diciembre 2019, 18:52 pm por GzaRC
 |    |