elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  cadenas de caracteres Visual Basic
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: cadenas de caracteres Visual Basic  (Leído 3,050 veces)
01munrra

Desconectado Desconectado

Mensajes: 281



Ver Perfil
cadenas de caracteres Visual Basic
« en: 5 Octubre 2015, 14:03 »

Saludos!

tengo el siguiente codigo:

Código
  1.        Dim oracion As String = "Hola Mundo Como estas?"  'Trim(TextBox_oracion.Text())
  2.        Dim i As Integer = 1
  3.        Dim posicion As Integer
  4.        Dim palabra As String
  5.  
  6.        Do
  7.            posicion = InStr(i, oracion, " ")
  8.            If posicion > 0 Then
  9.                palabra = Mid(oracion, i, posicion - i)
  10.                ListBox_separar.Items.Add(cambiar_palabra(palabra))
  11.                posicion = posicion + 1
  12.                i = posicion
  13.            End If
  14.        Loop Until posicion = 0
  15.  
y quiero que me separe las palabras y me las imprima una por una, pero me imprime esto:
Código
  1. Hola
  2. Mundo
  3. Como
  4.  
no me esta imprimiendo la palabra estas, donde tendre mi error?....

gracias!


« Última modificación: 7 Octubre 2015, 06:08 por 01munrra » En línea

Lekim

Desconectado Desconectado

Mensajes: 268



Ver Perfil
Re: cadenas de caracteres Visual Basic
« Respuesta #1 en: 8 Octubre 2015, 03:27 »

 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 usar ListBox_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í:

Código:
Hola
Mundo
Como

Puedes usar una Variable string para añadir las palabras y luego meterlas en el ListBox:

Código
  1. Public Class Form1
  2.  
  3.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  4.        Dim oracion As String = "Hola Mundo Como estas?"  'Trim(TextBox_oracion.Text())
  5.        Dim i As Integer = 1
  6.        Dim posicion As Integer
  7.        Dim palabra As String
  8.        Dim NuevaFrase As String = Nothing
  9.        Do
  10.            posicion = InStr(i, oracion, Convert.ToChar(Keys.Space))
  11.            If posicion > 0 Then
  12.                palabra = Mid(oracion, i, posicion - i)
  13.                NuevaFrase += palabra
  14.                posicion += 1
  15.                i = posicion
  16.            End If
  17.        Loop Until posicion = 0
  18.        ListBox1.Items.Add(NuevaFrase)
  19.    End Sub
  20. End 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:

Código
  1.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.        Dim Cadena As String = "Hola Mundo Como estas?"
  3.        Dim Array() As String = Cadena.Split(Convert.ToChar(Keys.Space))
  4.        Dim NuevaCadena As String = Nothing
  5.        For I As Integer = 0 To Array.Count - 1
  6.            NuevaCadena += Array(I)
  7.        Next
  8.        ListBox1.Items.Add(NuevaCadena)
  9.    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.

Código
  1. Option Explicit On
  2. Option Strict On
  3. Public Class Form1
  4.  
  5.    Dim lstLista1 As ListBox = New ListBox 'Nuevo ListBox
  6.    Dim lstLista2 As ListBox = New ListBox 'Nuevo ListBox
  7.    Dim btnNormal As Button = New Button 'Nuevo Button
  8.    Dim btnAleatorio As Button = New Button 'Nuevo Button
  9.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  10.        With Me
  11.            .Controls.Add(lstLista1)
  12.            .Controls.Add(lstLista2)
  13.            .Controls.Add(btnNormal)
  14.            .Controls.Add(btnAleatorio)
  15.            .Size = New System.Drawing.Size(445, 200)
  16.            .Text = "Demo"
  17.        End With
  18.  
  19.  
  20.        lstLista1.Location = New Point(10, 10)
  21.        lstLista1.Width = 200
  22.  
  23.        lstLista2.Location = New Point(lstLista1.Left + lstLista1.Width + 10, 10)
  24.        lstLista2.Width = 200
  25.  
  26.        With btnNormal
  27.            .Size = New System.Drawing.Size(150, 23)
  28.            .Location = New Point(CInt((lstLista1.Width / 2) - (btnNormal.Width / 2) + lstLista1.Left), lstLista1.Height + lstLista1.Top + 10)
  29.            .Text = "Frase Normal"
  30.        End With
  31.  
  32.        With btnAleatorio
  33.            .Size = New System.Drawing.Size(150, 23)
  34.            .Location = New Point(CInt((lstLista2.Width / 2) - (btnAleatorio.Width / 2) + lstLista2.Left), lstLista2.Height + lstLista2.Top + 10)
  35.            .Text = "Frase desordenada"
  36.        End With
  37.  
  38.        AddHandler btnNormal.Click, AddressOf btnNormal_Click
  39.        AddHandler btnAleatorio.Click, AddressOf btnAleatorio_Click
  40.    End Sub
  41.  
  42.    Private Sub btnNormal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
  43.        Dim IndexItem As Integer = 0
  44.        Dim Cadena As String = "Hola    Mundo Como estas?" & ControlChars.CrLf & "Estoy bien"
  45.        Cadena = Cadena.Replace(ControlChars.CrLf, Convert.ToChar(Keys.Space))
  46.        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"...}
  47.        Dim Lista As New List(Of String)
  48.  
  49.        For I As Integer = 0 To Array.Length - 1
  50.             Lista.Add(Array(I))
  51.        Next
  52.  
  53.        Dim NuevaCadena As String = Nothing 'String para la nueva cadena
  54.        For Each Palabra As String In Lista
  55.            NuevaCadena += Palabra & Convert.ToChar(Keys.Space)
  56.        Next
  57.  
  58.        lstLista1.Items.Clear()
  59.        lstLista1.Items.Add(DBNull.Value)
  60.        lstLista1.Items(IndexItem) = NuevaCadena
  61.    End Sub
  62.  
  63.    Private Sub btnAleatorio_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
  64.        Dim IndexItem As Integer = 0
  65.        Dim Cadena As String = "Hola Mundo    Como estas?" & ControlChars.CrLf & "Estoy bien"
  66.        Cadena = Cadena.Replace(ControlChars.CrLf, Convert.ToChar(Keys.Space))
  67.        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"...}
  68.        Dim Lista As New List(Of String) 'Lista para las palabras
  69.  
  70.  
  71.        For I As Integer = 0 To Array.Length - 1 Then
  72.           Lista.Add(Array(I))
  73.        Next
  74.  
  75.  
  76.        Dim NumAleatorio As Integer
  77.        Dim Rand As New Random 'El equivalenta a Rnd() de VB (no necesita es uso Randomize())
  78.        Dim NuevaCadena As String = Nothing 'String para la nueva cadena
  79.        Do
  80.            NumAleatorio = Rand.Next(0, Lista.Count)
  81.            'Obtiene un número aleatorio entre 0 y el número de elementos de la lista
  82.            NuevaCadena += CStr(Lista(NumAleatorio).ToString & Convert.ToChar(Keys.Space))
  83.            'Elimina el elemento de de la lista con índice = NumAleatorio (para evitar repetir palabras)
  84.            Lista.RemoveAt(NumAleatorio)
  85.            My.Application.DoEvents()
  86.        Loop Until Lista.Count = 0
  87.  
  88.        lstLista2.Items.Clear()
  89.        lstLista2.Items.Add(DBNull.Value)
  90.        lstLista2.Items(IndexItem) = NuevaCadena
  91.    End Sub
  92.  
  93.    Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
  94.        Me.StartPosition = FormStartPosition.CenterScreen
  95.    End Sub
  96. End Class
  97.  




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
Código:
--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 por Lekim » En línea

Flamer


Desconectado Desconectado

Mensajes: 1.026


crack, crack y mas crack...


Ver Perfil WWW
Re: cadenas de caracteres Visual Basic
« Respuesta #2 en: 8 Octubre 2015, 04:05 »

Aqui te dejo un code haber si te entiendo

Código
  1. Dim frase, matrix() As String
  2. Dim i As Integer
  3.  
  4. frase = "Hola Mundo Hacker Soy Flamer"
  5. matrix = Split(frase, " ")
  6. For i = 0 To UBound(matrix)
  7.   MsgBox tr(i)
  8. Next
  9.  
  10.  

Saludos y dime si te sirbio
En línea

Lekim

Desconectado Desconectado

Mensajes: 268



Ver Perfil
Re: cadenas de caracteres Visual Basic
« Respuesta #3 en: 8 Octubre 2015, 04:20 »

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.


Código
  1.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.     Dim frase As String = "Hola Mundo Hacker Soy Flamer"
  3.        Dim matrix() As String = frase.Split(Convert.ToChar(Keys.Space))
  4.        Dim NuevaFrase As String = Nothing
  5.        For I as integer = 0 To matrix.Length - 1
  6.            MessageBox.Show(matrix(I))
  7.        Next
  8.    End Sub


Saludos
« Última modificación: 8 Octubre 2015, 11:31 por Lekim » En línea

Flamer


Desconectado Desconectado

Mensajes: 1.026


crack, crack y mas crack...


Ver Perfil WWW
Re: cadenas de caracteres Visual Basic
« Respuesta #4 en: 8 Octubre 2015, 05:16 »

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 Desconectado

Mensajes: 268



Ver Perfil
Re: cadenas de caracteres Visual Basic
« Respuesta #5 en: 8 Octubre 2015, 11:37 »

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 por Lekim » En línea

Flamer


Desconectado Desconectado

Mensajes: 1.026


crack, crack y mas crack...


Ver Perfil WWW
Re: cadenas de caracteres Visual Basic
« Respuesta #6 en: 8 Octubre 2015, 18:07 »

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 Desconectado

Mensajes: 281



Ver Perfil
Re: cadenas de caracteres Visual Basic
« Respuesta #7 en: 9 Octubre 2015, 05:03 »

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 Desconectado

Mensajes: 281



Ver Perfil
Re: cadenas de caracteres Visual Basic
« Respuesta #8 en: 9 Octubre 2015, 05:05 »

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 Desconectado

Mensajes: 268



Ver Perfil
Re: cadenas de caracteres Visual Basic
« Respuesta #9 en: 9 Octubre 2015, 15:22 »

Hola.
A ver si esto le parece bien al profesor/a:


[CÓDIGO VB.NET CON FUNCIONES DE VB]

Código
  1.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  2.        Dim Pos As Integer = 0
  3.        Dim Palabra As String = Nothing
  4.        Dim Cadena As String = "Hola mundo ¿Cómo estás?"
  5.        Dim Contador As Integer
  6.        Do
  7.            Contador = Contador + 1
  8.            Pos = InStr(1, Cadena, " ", vbTextCompare) 'Busca la posición del primer " "
  9.            If Pos > 0 Then 'Pos > 0 Esto es así cuando se ha encontrado un espacio " "
  10.                Palabra = Mid(Cadena, 1, Pos - 1) 'Obtiene la palabra
  11.                Cadena = Replace(Cadena, Palabra & " ", "") 'Elimina de la cadena la palabra encontrada y el espacio " "
  12.            Else 'Ya no quedan espacios " "
  13.                Palabra = Cadena 'Mete en 'Palabra lo que queda en cadena tal cual
  14.            End If
  15.            ListBox1.Items.Add("Palabra" & Contador & ": " & Palabra)
  16.        Loop Until Pos = 0
  17.    End Sub
  18.  



[EL MISMO CÓDIGO CON FUNCIONES PROPIAS DE VB.NET]

Código
  1.  
  2.    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  3.        Dim Pos As Integer = 0
  4.        Dim Palabra As String = Nothing
  5.        Dim Cadena As String = "Hola mundo ¿Cómo estás?"
  6.        Dim Contador As Integer
  7.        Do
  8.            Contador = Contador + 1
  9.            Pos = Cadena.IndexOf(" ")
  10.            If Pos > -1 Then
  11.                Palabra = Cadena.Substring(0, Pos)
  12.                Cadena = Cadena.Replace(Palabra & " ", "")
  13.            Else
  14.                Palabra = Cadena
  15.            End If
  16.            ListBox1.Items.Add("Palabra" & Contador & ": " & Palabra)
  17.        Loop Until Pos = -1
  18.  
  19.    End Sub
  20.  
  21.  


[Y POS SI LAS MOSQUIS.... :¬¬ TAMBIÉN EN VB]
Código
  1. Private Sub Command1_Click()
  2.        Dim Pos As Integer
  3.        Dim Palabra As String
  4.        Dim Cadena As String
  5.        Dim Contador As Integer
  6.  
  7.        Cadena = "Hola mundo ¿Cómo estás?"
  8.  Do
  9.        Contador = Contador + 1
  10.        Pos = InStr(1, Cadena, " ", vbTextCompare)
  11.        If Pos > 0 Then
  12.        Palabra = Mid(Cadena, 1, Pos - 1)
  13.        Cadena = Replace(Cadena, Palabra & " ", "")
  14.        Else
  15.        Palabra = Cadena
  16.        End If
  17.        List1.AddItem "Palabra" & Contador & ":" & Palabra
  18.  Loop Until Pos = 0
  19. End Sub
  20.  
« Última modificación: 9 Octubre 2015, 15:37 por Lekim » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines