none
Leer Textbox por lineas RRS feed

  • Pregunta

  • Buen día!

    Tengo una aplicación en .Net que muestra varios enlaces en un Textbox, un enlace por linea, como los siguientes:

    http://pastebin.com/download.php?i=2KqH0mtQ
    http://pastebin.com/download.php?i=EBmACkb8
    http://pastebin.com/download.php?i=Vnu0wKCW

    Entonces me gustaría poder leer linea por linea del Textbox para que en cada vuelta se asigne esa linea leída como enlace para descargar el archivo, y así se repita asta la ultima linea del Textbox.

    Aquí tengo un código que según Yo, debería funcionar, pero no.

    Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click
            Dim tArray() As String 'Declaro un array
            tArray = Split(TextBox1.Text, vbCrLf) 'Almaceno en el array lo que hay en cada salto de linea
            Do 'Empiezo el bucle
                For i = LBound(tArray) To UBound(tArray)
                    System.IO.Directory.CreateDirectory(Environment.ExpandEnvironmentVariables("%appdata%\txt\"))
                    WC.DownloadFileAsync(New Uri(i), (Environment.ExpandEnvironmentVariables("%appdata%\txt\" & (i) & ".txt")))
                    Threading.Thread.Sleep(2000)
                Next i
            Loop
        End Sub

    Espero que me ayuden con mi problema.

    Gracias de antemano.

    viernes, 14 de marzo de 2014 22:58

Respuestas

  • "Heberon" escribió:

    > Tengo una aplicación en .Net que muestra varios enlaces
    > en un Textbox, un enlace por linea, como los siguientes:
    >
    > http://pastebin.com/download.php?i=2KqH0mtQ
    > http://pastebin.com/download.php?i=EBmACkb8
    > http://pastebin.com/download.php?i=Vnu0wKC

    Es decir, que se trata de un control TextBox multilínea, donde cada línea finaliza en el carácter de nueva línea (el valor de la propiedad Environment.NewLine).

    > Entonces me gustaría poder leer linea por linea del Textbox ...
    >
    >  Dim tArray() As String 'Declaro un array
    >  tArray = Split(TextBox1.Text, vbCrLf) 'Almaceno en el array lo que hay en cada salto de linea

    Para obtener el array, tan solo tienes que leer el valor de la propiedad Lines del control TextBox multilínea.

    > ... para que en cada vuelta se asigne esa linea leída como
    > enlace para descargar el archivo, y así se repita asta la
    > ultima linea del Textbox.
    >
    > Aquí tengo un código que según Yo, debería funcionar, pero no.
    >
    > WC.DownloadFileAsync(New Uri(i), (Environment.ExpandEnvironmentVariables("%appdata%\txt\" & (i) & ".txt")))

    Si la variable WC referencia a un objeto System.Net.WebClient, desde luego es imposible que ese código funcione, porque al objeto Uri que estás creando, le estás pasando el valor Integer de la variable de iteración i del bucle For ... Next que estás utilizando para recorrer el array de líneas del control TextBox, cuando al constructor del objeto Uri le tienes que pasar el identificador URI que contiene la dirección completa del archivo que deseas descargar.

    Mejor será que ejecutes el código como indico a continuación:

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' Añadimos al control TextBox las siguientes líneas. ' TextBox1.AppendText("http://pastebin.com/download.php?i=2KqH0mtQ" & Environment.NewLine) TextBox1.AppendText("http://pastebin.com/download.php?i=EBmACkb8" & Environment.NewLine) TextBox1.AppendText("http://pastebin.com/download.php?i=Vnu0wKC") End Sub Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click ' Obtenemos una matriz con las líneas existentes ' en el control TextBox. ' Dim lineas As String() = TextBox1.Lines() Dim WC As System.Net.WebClient = Nothing Try ' Obtenemos el directorio de datos de la aplicación ' para el usuario móvil actual. ' Dim appData As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) ' Si procede, creamos el directorio 'txt'. ' Dim path As String = IO.Path.Combine(appData, "txt") Dim di As IO.DirectoryInfo = IO.Directory.CreateDirectory(path) ' Creamos la nueva instancia del objeto. ' WC = New System.Net.WebClient() ' Conforme recorremos el array de lineas ' vamos descargando los archivos. ' For Each linea As String In lineas ' Creamos el Uri con la dirección del archivo. ' Dim uri As New Uri(linea) ' Nos quedamos solamente con el nombre del archivo que se desea descargar ' Dim fileName As String = IO.Path.GetFileName(uri.AbsolutePath) ' Construimos la ruta completa donde se va a guardar el ' archivo, previo cambio de la extensión del archivo. ' fileName = IO.Path.Combine(di.FullName, IO.Path.ChangeExtension(fileName, "txt")) ' Descargamos el archivo. ' WC.DownloadFileAsync(uri, fileName) ' Suspendemos el subproceso durante 2 segundos ' Threading.Thread.Sleep(2000) Next Catch ex As Exception ' Se ha producido un error MessageBox.Show(ex.Message) Finally ' Destruimos el objeto WebClient
    If (Not (WC Is Nothing)) Then WC.Dispose()
    End If
    WC = Nothing End Try End Sub


    Si todo ha ido bien, se te habrán descargado los tres archivos a la carpeta txt del directorio de datos de la aplicación correspondiente al usuario móvil actual, es decir, a la carpeta Roaming de la cuenta del usuario que haya iniciado la sesión en Windows:

        C:\Users\Cuenta Usuario\AppData\Roaming\txt

    Suponiendo que en la unidad C esté instalado el sistema operativo.

    Un saludo


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.



    sábado, 15 de marzo de 2014 16:15
    Moderador

Todas las respuestas

  • "Heberon" escribió:

    > Tengo una aplicación en .Net que muestra varios enlaces
    > en un Textbox, un enlace por linea, como los siguientes:
    >
    > http://pastebin.com/download.php?i=2KqH0mtQ
    > http://pastebin.com/download.php?i=EBmACkb8
    > http://pastebin.com/download.php?i=Vnu0wKC

    Es decir, que se trata de un control TextBox multilínea, donde cada línea finaliza en el carácter de nueva línea (el valor de la propiedad Environment.NewLine).

    > Entonces me gustaría poder leer linea por linea del Textbox ...
    >
    >  Dim tArray() As String 'Declaro un array
    >  tArray = Split(TextBox1.Text, vbCrLf) 'Almaceno en el array lo que hay en cada salto de linea

    Para obtener el array, tan solo tienes que leer el valor de la propiedad Lines del control TextBox multilínea.

    > ... para que en cada vuelta se asigne esa linea leída como
    > enlace para descargar el archivo, y así se repita asta la
    > ultima linea del Textbox.
    >
    > Aquí tengo un código que según Yo, debería funcionar, pero no.
    >
    > WC.DownloadFileAsync(New Uri(i), (Environment.ExpandEnvironmentVariables("%appdata%\txt\" & (i) & ".txt")))

    Si la variable WC referencia a un objeto System.Net.WebClient, desde luego es imposible que ese código funcione, porque al objeto Uri que estás creando, le estás pasando el valor Integer de la variable de iteración i del bucle For ... Next que estás utilizando para recorrer el array de líneas del control TextBox, cuando al constructor del objeto Uri le tienes que pasar el identificador URI que contiene la dirección completa del archivo que deseas descargar.

    Mejor será que ejecutes el código como indico a continuación:

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load ' Añadimos al control TextBox las siguientes líneas. ' TextBox1.AppendText("http://pastebin.com/download.php?i=2KqH0mtQ" & Environment.NewLine) TextBox1.AppendText("http://pastebin.com/download.php?i=EBmACkb8" & Environment.NewLine) TextBox1.AppendText("http://pastebin.com/download.php?i=Vnu0wKC") End Sub Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click ' Obtenemos una matriz con las líneas existentes ' en el control TextBox. ' Dim lineas As String() = TextBox1.Lines() Dim WC As System.Net.WebClient = Nothing Try ' Obtenemos el directorio de datos de la aplicación ' para el usuario móvil actual. ' Dim appData As String = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) ' Si procede, creamos el directorio 'txt'. ' Dim path As String = IO.Path.Combine(appData, "txt") Dim di As IO.DirectoryInfo = IO.Directory.CreateDirectory(path) ' Creamos la nueva instancia del objeto. ' WC = New System.Net.WebClient() ' Conforme recorremos el array de lineas ' vamos descargando los archivos. ' For Each linea As String In lineas ' Creamos el Uri con la dirección del archivo. ' Dim uri As New Uri(linea) ' Nos quedamos solamente con el nombre del archivo que se desea descargar ' Dim fileName As String = IO.Path.GetFileName(uri.AbsolutePath) ' Construimos la ruta completa donde se va a guardar el ' archivo, previo cambio de la extensión del archivo. ' fileName = IO.Path.Combine(di.FullName, IO.Path.ChangeExtension(fileName, "txt")) ' Descargamos el archivo. ' WC.DownloadFileAsync(uri, fileName) ' Suspendemos el subproceso durante 2 segundos ' Threading.Thread.Sleep(2000) Next Catch ex As Exception ' Se ha producido un error MessageBox.Show(ex.Message) Finally ' Destruimos el objeto WebClient
    If (Not (WC Is Nothing)) Then WC.Dispose()
    End If
    WC = Nothing End Try End Sub


    Si todo ha ido bien, se te habrán descargado los tres archivos a la carpeta txt del directorio de datos de la aplicación correspondiente al usuario móvil actual, es decir, a la carpeta Roaming de la cuenta del usuario que haya iniciado la sesión en Windows:

        C:\Users\Cuenta Usuario\AppData\Roaming\txt

    Suponiendo que en la unidad C esté instalado el sistema operativo.

    Un saludo


    Enrique Martínez Montejo
            [MS MVP - VB]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.



    sábado, 15 de marzo de 2014 16:15
    Moderador
  • Buen día!

    El código funciona muy bien, incluso ahora que recuerdo, usted me a ayudado en ocasiones anteriores, y siempre proporciona ejemplos muy funcionales, ademas de tomarse el tiempo para explicar cada parte del código, eso es un gran gesto. 

    Gracias!!

    sábado, 15 de marzo de 2014 21:22