+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 9 su 9

Discussione: VB 2010 difficoltà lettura dati da pagina web

  1. #1
    Francesco53 non è in linea Novello
    Post
    48

    VB 2010 difficoltà lettura dati da pagina web

    Un saluto a tutto il Forum, ho la seguente difficoltà:
    prelevo dal web una pagina contenete dei dati e creo un file di testo.
    Tramite un text editor rilevo la prima riga da cui iniziano i dati che mi servono,
    tramite il seguente codice escludo tutte le righe precedenti i dati.

    codice:
    Sub LeggiWeb1()
            Dim percorso As String = Directory.GetCurrentDirectory()
            Dim nomeFile As String = "\datiweb.txt"
            Dim nomeFile1 As String = "\dati.txt"
            Dim Sr As New StreamReader(System.Environment.GetFolderPath(Environment.SpecialFolder.MyComputer) & percorso & nomeFile)
            Dim Sw As New StreamWriter(System.Environment.GetFolderPath(Environment.SpecialFolder.MyComputer) & percorso & nomeFile1)
            Dim contarighe As Integer = 1
            Dim Line As String = Sr.ReadLine
            numrig = 0
            Do While Not Line Is Nothing
                contarighe = contarighe + 1
                If contarighe < 300 Then GoTo Line1 ‘inizio dati utili
                If Line = vbCrLf Then GoTo Line2
                If Line = " " Then GoTo line3
                If Line <> "" Then
                    numrig = numrig + 1
                    Sw.WriteLine(Line)
                End If
    line1:
                Line = Sr.ReadLine
    line2:
            Loop
    line3:
            Sr.Close()
            Sw.Close()
            My.Computer.FileSystem.DeleteFile(percorso & nomeFile) 'Cancella il file
    End Sub
    Il problema che riscontro è che purtroppo, a volte, con l’aggiornamento cambia la riga di riferimento dell’inizio dati, per cui devo rileggere col text editor la nuova riga e cambiare nel codice il riferimento.
    L’inizio dei dati è preceduto da una stringa ben precisa “InizioDati”, la mia richiesta di aiuto è la seguente:
    si può escludere dalla scrittura dei dati tutte le righe precedenti la stringa “InizioDati” e dalla riga
    successiva iniziare a scrivere il file di testo?
    Ringrazio chi può aiutarmi a risolvere la difficoltà.
    Francesco

  2. #2
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    15,192
    Blogs
    5
    si può escludere dalla scrittura dei dati tutte le righe precedenti la stringa “InizioDati” e dalla riga
    successiva iniziare a scrivere il file di testo?
    Quel codice pieno di goto è poco leggibile ... (diciamo pure illeggibile ...).
    Quindi è particolarmente difficile darti una risposta che tu possa "calare" in quelle righe di programma.

    Comunque è sicuramente fattibile ...

    ... quando leggi attendi che si presenti il dato di cui parli e attiva una variabile booleana mettendola a true
    ... scrivi le linee solo se quella variabile è true
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  3. #3
    Francesco53 non è in linea Novello
    Post
    48
    Grazie Antonio per l'aiuto ho risolto come da te indicato.
    Francesco

  4. #4
    Sgrubak non è in linea Novello
    Luogo
    Torrazza Piemonte
    Post
    26
    Una curiosità: Non ti da i valori sbagliati se trova il carattere vbCrLf entro la riga 300?

  5. #5
    Francesco53 non è in linea Novello
    Post
    48
    Ciao sgrubak errori non li da, perchè se guardi il codice che è sicuramente molto empirico fatto da un autodidatta,
    con la riga :
    If Line = vbCrLf Then GoTo Line2
    line2:
    Loop
    la esclude dalla lettura.
    francesco

  6. #6
    Sgrubak non è in linea Novello
    Luogo
    Torrazza Piemonte
    Post
    26
    Si l'ho visto. Ma salta il ReadLine quindi non cambia mai il valore della variabile Line. Il ragionamento che faccio è che continua ad incrementarti contarighe senza realmente spostarsi nello StreamReader. Finalizzando: il contatore incrementa al valore impostato, ma tu non ti sposti e dopo ricominci a leggere e tutto riparte. Se il carattere è alla seconda riga, cicla 288 volte l'incremento ma restando sulla riga 2 della variabile sr e poi ricomincia a leggere dalla riga 3... Sbaglio?

    P.S: Per fare la stessa cosa senza il GoTo, basta che trasformi il codice in If Line = vbCrLf Then Continue Do. La keyword GoTo è sconsigliata da MSDN ed a quanto dice il mio libro, è stata mantenuta in funzione solo per retrocompatibilità. :-) Sono un neofita autodidatta come te.

  7. #7
    Francesco53 non è in linea Novello
    Post
    48
    Ciao Sgrubak, ti ringrazio per le ulteriori indicazioni insegnatemi.
    Per quanto riguarda il contatore, una volta trovato l'inizio dei dati:
    codice:
    Dim leggi As Boolean = False
               Do While Not Line Is Nothing
                If Line = "InizioDati" Then
                    leggi = True
                    GoTo line1
                End If
    non mi serve in quanto prima utilizzato per escludere tutte le righe precedenti.
    Adesso cercherò di utilizzare le tue nuove indicazioni per evitare il GoTo.
    Grazie dell'aiuto che mi hai dato.
    FRancesco

  8. #8
    L'avatar di Eleatico
    Eleatico non è in linea Novello
    Post
    10
    Mi sembra che il tuo prolema sia qullo di leggere un file, eliminare le righe fino alla stringa 'InizioDati" e riscrivere in un nuovo file le righe restanti.
    Se così fosse puoi anche inserire il file in una stringa, cercare la ricorrenza 'InizioDati' e scrivere la stringa a partire dalla riga dopo la ricorrenza nel nuovo file
    codice:
    dim b as string= IO.File.ReadAllText(nomeFile) 'insrisce il file in b
    dim kk as integer=instr(b,"InizioDati")+len("InizioDati")+2 'determini l'inizio della nuova riga in b
    System.IO.File.WriteAllText(nomeFile1, Mid(b, kk )) 'scrivi il file a partire dalla riga successiva a 'InizioDati'

  9. #9
    Francesco53 non è in linea Novello
    Post
    48
    Grazie Eleatico, proverò anche il tuo consiglio.
    Francesco

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi