Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 33
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2018
    Messaggi
    30

    Metodo alternativo a Do While.

    Buongiorno, avrei bisogno di un consiglio su questo problema:
    Ho diversi file di testo che contengono una serie di righe con dati delimitati da un separatore "\"
    Ho diverse Procedure che di volta in volta leggono una riga per volta e ne estraggono i dati che interessano.
    Per ognuna di queste Procedure ho utilizzato nella prima parte, il metodo Do While come riportato sotto.

    Dim Elenco As New System.IO.StreamReader(Percorso)
    Do While Elenco.Peek() <> -1
    Dim VarLine As String = Elenco.ReadLine()
    Dim VarLineData() As String = Split(VarLine, "\")
    For Cont = 0 To UBound(VarLineData)
    If Cont = "0" Then
    Data0 = VarLineData(Cont)
    ElseIf Cont = "1" Then
    Data1 = VarLineData(Cont)
    ElseIf Cont = "2" Then
    Data2 = VarLineData(Cont)
    End If
    Next

    Nella seconda parte ogni procedura esegue delle operazioni diverse a seconda della necessità, es:

    If Data0 = "x" Then
    esegue un'operazione
    ElseIf Data3 <> "y" Then
    esegue un'altra operazione
    .............
    End If
    Loop

    Il tutto funziona perfettamente, ma siccome le procedure sono 7 o 8, e se ne dovrebbero aggiungere altre,
    avrei bisogno che la prima parte fosse una sola routine richiamabile con un Call - Return, con il ciclo che si ferma
    ad ogni riga e, dopo il trattamento dei dati riparta da dove si era fermato.
    Ho tentato di interrompere il metodo Do While, ma credo che con questo metodo non sia possibile.
    Quale altra soluzione posso adottare?
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di patel
    Registrato dal
    Jan 2008
    Messaggi
    1,994
    non puoi interrompere il ciclo con Exit Do ? mostra il tuo tentativo

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non ho capito molto il problema che hai (che secondo me deriva dalla cattiva impostazione del codice), ma in pratica puoi sempre inserire in una funzione separata quello che devi ripetere e richiamarla nel ciclo quando serve.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2018
    Messaggi
    30
    Come immaginavo, molto spesso non è semplice spiegare quello che ti passa per la testa.

    Quindi ho pensato di riprovare con una specie di flow chart come da allegato.

    Se sono stato chiaro questa sarebbe la mia idea, la sub ciclo dovrebbe poter essere
    richiamata da qualunque procedura.


    Saluti.
    Immagini allegate Immagini allegate

  5. #5
    scusa, cosa sarebbe quello? un flow-chart?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2018
    Messaggi
    30
    optime ?
    Sei così simpatico che non meriti neanche una risposta!

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ovviamente optime ha ragione ... quello non è un flowchart ...

    Comunque, da quello che si capisce, come ti dicevo, devi spostare la

    Do while

    nella parte a sinistra prima della Call e chiamare la sub. Ovviamente la

    Loop

    sarà messa sempre nella parte sinistra al posto di Conclusione Ciclo
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2018
    Messaggi
    30
    Se si legge attentamente il mio post, c'è scritto:

    Una SPECIE di Flow Chart !

    Era ovvio che l'intento era quello di fornire un quadro del problema senza
    spendere decine di parole per poi ricevere risposte che non "ci azzeccano" nulla.

    Dopodichè, se ho capito bene ciò che dice oregon,non è possibile sospendere
    il ciclo "Peek" e poi rientrare perchè ricomincerebbe sempre dall'inizio. Ho gia' provato.
    Se ho capito male, mi farebbe piacere avere un esempio.

    Io ho risolto il problema in questo modo:
    ( Se interessa allego Una SPECIE di Flow Chart. )
    L'unico inconveniente è che bisogna fare due procedure invece di una come desideravo.
    Immagini allegate Immagini allegate

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Quote Originariamente inviata da vegiott Visualizza il messaggio
    Se si legge attentamente il mio post, c'è scritto:

    Una SPECIE di Flow Chart !
    Sì, ma si intendeva dire che quello non è neanche una SPECIE di flowchart.
    Comunque, non è utile la polemica, a nessuno.

    non è possibile sospendere il ciclo "Peek" e poi rientrare
    La questione non è solo legata al ciclo. NON si può rientrare nella Sub in un punto qualsiasi, come hai mostrato di voler fare. Qualsiasi cosa ci sia nella sub, anche se non c'è un ciclo.

    Io ho risolto il problema in questo modo
    Se chiami le Sub dall'inizio, allora va bene.

    In realtà io cercherei di gestire meglio la lettura dei dati che stanno nel ciclo, magari caricandoli tutti prima in una struttura in memoria, ma mancando molti dettagli della problematica, non posso darti maggiori indicazioni.
    Ultima modifica di oregon; 25-03-2018 a 15:09
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    come dice correttamente oregon, non puoi rientrare arbitrariamente in sub e cicli. struttura meglio il tuo ragionamento iniziando dal ciclo esterno (la lettura del file) e continuando poi con il ciclo interno (l'esame dell'array risultante dallo split della riga) terminando poi con l'applicazione delle singole procedure in base al contenuto dell'elemento dell'array

    qualcosa del tipo

    leggi file
    ... leggi una riga
    ... ... spezza la riga
    ... ... ... leggi un elemento
    ... ... ... ... caso 1 ---> procedura 1
    ... ... ... ... caso 2 ---> procedura 2
    ...
    ... ... ... ... caso n ---> procedura n
    ... ... ... prossimo elemento fino alla fine
    ... ... fine array
    ... leggi la prossima riga fino alla fine
    fine file

    se questa NON è la tua situazione (è domenica, uno dei miei due neuroni sta riposando) cerca di spiegarla più accuratamente


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.