Cómo separar en múltiples líneas el contenido de un campo de texto.
Además de insertar a cada una de las mismas en un control.

Fecha: 13/May/2005 (Mayo 02 del 2005)
Autor: Jesús Mijares  jgmm81@hotmail.com (Comentarios, sugerencias etc.)

 


Si se quiere separar en múltiples líneas el contenido de un texto además poder insertar cada una de ellas en un control, se debe que tener un carácter como guía.

El carácter guía será la coma (,) utilizada generalmente en aplicaciones como Outlook Express para separar las cuentas de correo escritas en un solo campo de texto.

En este ejemplo se utilizara un ListBox y un ComboBox.
 

A continuación sigue código en Visual Basic:

Option Explicit

Private Sub Command1_Click()

Dim SearchString As String, SearchChar As String, MyPos As Integer
Dim LengthIndex As Integer, EditString As String, xInt As Integer
Dim A(9999) As String, i As Integer

 SearchString = Text1.Text     ' Cadena en la que se busca, el contenido es de "Text1.Text".

 SearchChar = Chr$(44) 'ó ","  ' Carácter a buscar ",".

 EditString = SearchString     ' Cadena a editar, la cual en el proceso
                               ' "Do While Not" será modificada con la
                               ' función "Right".

 'LengthIndex                  ' Longitud que indicará asta donde
                               ' debe ubicarse la función "Mid"
                               ' dentro de la cadena.

 'MyPos                        ' Devuelve la posición numérica de "SearchChar"
                               ' dentro de la cadena a intervenir "EditString"
                               ' en la función "InStr"

 'A(#)                         ' Matriz de caracteres con un rango de
                               ' de elementos(Alfa Numérico) del 0 al 9999.

 'xInt                         ' Se encargará de establecer el número
                               ' del elemento(Alfa Numérico) dentro de la Matriz.

 'i                            ' Será útil como índice del elemento(Alfa Númerico)
                               ' y así devolver el contenido establecido en la Matriz.

 Do While Not Len(EditString) = 0 ' Proceder Mientras el número de caracteres de "EditString" no sea 0(cero).

   MyPos = InStr(1, EditString, SearchChar, 1) ' La función "InStr" especifica la posición en "MyPos"(En Número)
                                               ' de la primera aparición de "SearchChar" en "EditString".

   LengthIndex = MyPos ' "LengthIndex" toma el valor resultante de "MyPos".

   xInt = xInt + 1 ' Según a las repeticiones en "Do While Not" a "xInt"
                   ' se le incrementará, el cual su valor será establecido
                   ' como el número de índice del elemento en la Matriz.

  Select Case LengthIndex 'Seleccionar el procedimiento a ejecutar según al valor de "LengthIndex".
   Case Is > 0 'En caso de que "LengthIndex" sea Mayor que 0(cero).

    A(xInt) = Mid(EditString, 1, LengthIndex - 1) ' La función "Mid" establecerá en la Matriz el resultado
                                                  ' de la lectura de los caracteres dentro de "EditString"
                                                  ' asta el punto deacuerdo a las instrucciones
                                                  ' de "LengthIndex" menos un valor del mismo.

    EditString = Right(EditString, Len(EditString) - LengthIndex) ' La función "Right" modifica el contenido de "EditString",
                                                                  ' lectura de derecha a izquierda asta dónde indique el valor de la
                                                                  ' resta de el número de caracteres de "EditString" con "LengthIndex".
   Case 0 ' En caso de que "LengthIndex" sea igual a 0(cero).

   ' Por lo general se llega hasta aquí cuando en "EditString"
   ' no existe el carácter a buscar "SearchChar".
   ' Se puede aplicar (EditString = "") ó (Exit Do) para salir de "Do While Not".
     A(xInt) = EditString

   'EditString = "" 'El procedimiento "Do While Not" termina.
    Exit Do 'Salir del procedimiento "Do While Not".
  End Select

   MyPos = 0 ' Devuelve "MyPos" a un punto inicial el cual es 0(cero).

  Loop 'Repite la secuencia.

  List1.Clear: Combo1.Clear ' Limpiar los controles "ListBox" y "ComboBox"

  ' Agregar el contenido de los ítems de la Matriz en los controles "ListBox" y "ComboBox".
  ' Puede usar la función "Trim$" y así eliminará los espacios que hay en la derecha e izquierda del ítem.

 If Option1.Value Then 'Mostrar ítems de menor a mayor.
  For i = 0 To xInt
   'If A(i) > "" Then List1.AddItem A(i): Combo1.AddItem A(i)
   If A(i) > "" Then List1.AddItem Trim$(A(i)): Combo1.AddItem Trim$(A(i))
  Next i
 ElseIf Option2.Value Then 'Mostrar ítems de mayor a menor ó en reversa.
  For i = xInt To 0 Step -1
   'If A(i) > "" Then List1.AddItem A(i): Combo1.AddItem A(i)
   If A(i) > "" Then List1.AddItem Trim$(A(i)): Combo1.AddItem Trim$(A(i))
  Next i
 End If

'---------------------------------

 If Combo1.ListCount > 0 Then Combo1.ListIndex = 0
  Label2.Caption = "Ítems en la lista: " & List1.ListCount
  Label3.Caption = "Ítems en el combo: " & Combo1.ListCount
End Sub

Private Sub Form_Load()
 Option1.Caption = "Mostrar de Izquierda a Derecha" & vbCrLf & "(Escritura estándar)"
 Option2.Caption = "Mostrar de Derecha a Izquierda" & vbCrLf & "(Escritura Árabe, Etc.)"
 Option1.Value = True
 List1.AddItem "List1"

'Especifica el contenido de Text1
 'Text1.Text = "Linea 1, Linea 2, Linea 3, Linea 4, Linea 5, Linea 6"

 Text1.Text = "correo1@yahoo.es, correo2@terra.com, correo3@hotmail.com, correo4@msn.com"
End Sub

Puedes modificar el texto a tu manera y probarlo en tiempo de ejecución, no olvides que la coma (,) representara el salto de línea.
 
Este código fuente puede ser útil en un proyecto de un programador aprendiz, intermedio o avanzado.

ir al índice

Fichero con el código de ejemplo: jgmm81_Separar_en_lineas_un_texto.zip - Tamaño 8KB