Oppure

Loading
23/09/16 22:30
darioza
Se non scaturisce errore e non popola, probabilmente non passi le condizioni if...
Accertatene
oppure qualche errore logico....
Per il resto, 2 cose importanti...
La prima, in senso assoluto, anche se trascurabile in piccoli progetti, ma te la consiglio sempre, commenta!
Soprattutto in funzioni procedurali e quando i conti non tornano, anche per verificare che stai facendo quello che stai pensando di fare
La qual cosa ti torna utile se devi sottoporre a qualcuno il tuo codice
in secondo luogo, non ho presente come vuoi trattare la tua sorgente dati...
ma non ho capito una cosa...
Fermate = New List(Of Linee)

sei sicuro di questo?
Hai bisogno di una list di streamreader tu?
Penso di no, immagino tu voglia una lista di stringhe...
msdn.microsoft.com/it-it/library/…
Forse può aiutarti a vedere meglio il concetto...
aaa
25/09/16 18:57
WCodeLyokoYT
No, infatti non ho bisogno di una lista di streamreader, Linee è una classe del progetto. Comunque mi hai fatto notare che c'era un problema
nom = Linee.ReadLine()

Leggeva la classe (infatti "linee" era azzurro). Adesso l'ho cambiato, ma il problema persiste. Domani vedo di commentare il codice come mi hai consigliato.
aaa
26/09/16 7:01
Thejuster
Non conosco bene il Vb.NET
e non conosco nemmeno le sue potenzialità

Ma personalmente, eviterei tutto questo fracasso utilizzando una sola linea di codice.
Il Linq fà al tuo caso.

Con una sola riga, puoi recuperare o tutte le parole o tutti i numeri.

ti mostro un piccolo esempio pratico.

 
 //Questa struttura è rappresentata dal file
 //Che nel tuo esempio da un lato può contenere numeri
 //Da un'altro lato può contenere parole
 struct prova
        {
            public string parole;
            public int numeri;
        }


List<prova> file = new List<prova>();





Faccio un inserimento manuale dei dati giusto per rendere l'idea


 prova p = new prova();

            p.numeri = 1;
            file.Add(p);

            p.parole="parola 1";
            file.Add(p);

            p.parole = "parola 2";
            file.Add(p);

            p.parole = "parola 3";
            file.Add(p);

            p.numeri = 2;
            file.Add(p);

            p.parole = "parola 4";
            file.Add(p);

            p.parole = "parola 5";
            file.Add(p);



Ho aggiunto dei dati proprio come nel tuo esempio.

Ora basta semplicemente usare il Linq per recuperare tutte le parole esempio



var parole = from temp in file select temp.parole;
var numeri = from temp in file select temp.numeri;

//Ottengo tutti i valori sotto forma di liste rispettive ad Int per i numeri, String per le parole

List<string> parole2 = parole.ToList();
List<int> numeri2 = numeri.ToList();




Ecco cosa esce dal mio Debugger

Risultato delle parole selezionate
s22.postimg.org/3jqdtg2td/…


Risultato dei numeri selezionati
s11.postimg.org/copgkwfab/…


Noterai nella seconda screen, che i numeri sono stati ripetuti
perché gli elementi della lista erano superiori a quelli trovati per i numeri.

Basta un semplice accorgimento


//Elimino tutti i doppioni

numeri2 = numeri2.Distinct().ToList();



Gioco fatto.

Puoi tradurti il codice a Vb.net

Mi spiace, ma non sono pratico con il vb quanto lo sono con il C#
Spero che questa soluzione faccia al tuo caso.

Saluti
mire.forumfree.it/ - Mire Engine
C# UI Designer
26/09/16 9:04
darioza
Postato originariamente da WCodeLyokoYT:

No, infatti non ho bisogno di una lista di streamreader, Linee è una classe del progetto. Comunque mi hai fatto notare che c'era un problema
nom = Linee.ReadLine()

Leggeva la classe (infatti "linee" era azzurro). Adesso l'ho cambiato, ma il problema persiste. Domani vedo di commentare il codice come mi hai consigliato.


Infatti qualcosa non mi tornava...ad un certo punto avevo l'impressione lo trattassi come lo stream di lettura.
prova a vedere se con quello che ha proposto thejuster riesci meglio...
in ogni caso qui non mi è chiaro
Dim Linee As New StreamReader("C:\Users\Code\Desktop\Linee.txt")
\qui linee è dichiarato come streamreader del file

    Dim variabile As Integer
   Private Fermate As List(Of Linee)
\qui fermate è list di linee che è uno stream...

where is your class?
Non la vedo....
se sei agli inizi e ancora devi prendere dimestichezza con vb, anche se è una soluzione grossolana e non ottimizzata, l'idea di un array multidimensionale non è male, se hai limiti di tempo.
Altrimenti, come ti dicevo, riguardati la logica ...
aaa
26/09/16 21:26
Ultimo
Postato originariamente da Thejuster:

Non conosco bene il Vb.NET
e non conosco nemmeno le sue potenzialità

Ma personalmente, eviterei tutto questo fracasso utilizzando una sola linea di codice.
Il Linq fà al tuo caso.

Con una sola riga, puoi recuperare o tutte le parole o tutti i numeri.

ti mostro un piccolo esempio pratico.

 
 //Questa struttura è rappresentata dal file
 //Che nel tuo esempio da un lato può contenere numeri
 //Da un'altro lato può contenere parole
 struct prova
        {
            public string parole;
            public int numeri;
        }


List<prova> file = new List<prova>();





Faccio un inserimento manuale dei dati giusto per rendere l'idea


 prova p = new prova();

            p.numeri = 1;
            file.Add(p);

            p.parole="parola 1";
            file.Add(p);

            p.parole = "parola 2";
            file.Add(p);

            p.parole = "parola 3";
            file.Add(p);

            p.numeri = 2;
            file.Add(p);

            p.parole = "parola 4";
            file.Add(p);

            p.parole = "parola 5";
            file.Add(p);



Ho aggiunto dei dati proprio come nel tuo esempio.

Ora basta semplicemente usare il Linq per recuperare tutte le parole esempio



var parole = from temp in file select temp.parole;
var numeri = from temp in file select temp.numeri;

//Ottengo tutti i valori sotto forma di liste rispettive ad Int per i numeri, String per le parole

List<string> parole2 = parole.ToList();
List<int> numeri2 = numeri.ToList();




Ecco cosa esce dal mio Debugger

Risultato delle parole selezionate
s22.postimg.org/3jqdtg2td/…


Risultato dei numeri selezionati
s11.postimg.org/copgkwfab/…


Noterai nella seconda screen, che i numeri sono stati ripetuti
perché gli elementi della lista erano superiori a quelli trovati per i numeri.

Basta un semplice accorgimento


//Elimino tutti i doppioni

numeri2 = numeri2.Distinct().ToList();



Gioco fatto.

Puoi tradurti il codice a Vb.net

Mi spiace, ma non sono pratico con il vb quanto lo sono con il C#
Spero che questa soluzione faccia al tuo caso.

Saluti


Thejuster potrebbe andar meglio un Dizionario[Integer,List(string)] al posto delle 2 Liste, cosa ne pensi?
If ok Then GOTO Avanza else GOTO Inizia

28/09/16 7:23
Thejuster
Uhm , no il dizionario non credo che vada bene.

Perché ha specificato chiaramente che nel suo file sono presenti valori interi e stringhe
mischiati non ordinati.

Il dizionario ha bisogno di una chiave e di un valore
poi sarebbe più chiassoso riordinarli in modo corretto.

Il mio era semplicemente un aiuto e poco più.
Io avrei fatto una cosa completamente diversa e molto più performante.

Avrei diviso le stringe tramite una semplice funzione.

Il metodo corretto e veloce per ottenere ciò e questo:


FILE.txt

1
prova1
prova2
prova3
2
3
prova4
prova5
prova6


faccio un'altro esempio molto veloce




             object[] elementi = new object[] { 1, "prova1", "prova2", "prova3", 2, "prova4", "prova5", 3 };


            string[] stringe = GetArray<string>(elementi);
            int[] numeri = GetArray<int>(elementi);

            string[] valori_numerici = numeri.Select(x => x.ToString()).ToArray();


            comboBox1.Items.AddRange(stringe);
            comboBox2.Items.AddRange(valori_numerici);



  //Restituisce un array specificando il tipo di output da dare
  public T[] GetArray<T>(object[] array)
        {
            List<T> list = new List<T>();

            foreach (object o in array)
            {
                if (o is T)
                {
                    list.Add((T)o);
                }
            }

            return list.ToArray();
        }




Automaticamente, la funzione andrà a prendere solo i valori di tipo stringa o di tipo int
successivamente converto l'array intero in un array di tipo string.
e faccio AddRange evitando di creare un ciclo per l'inserimento manuale degli elementi.
Ultima modifica effettuata da Thejuster 28/09/16 7:30
mire.forumfree.it/ - Mire Engine
C# UI Designer
28/09/16 9:37
Ultimo
Postato originariamente da Thejuster:



             object[] elementi = new object[] { 1, "prova1", "prova2", "prova3", 2, "prova4", "prova5", 3 };


            string[] stringe = GetArray<string>(elementi);
            int[] numeri = GetArray<int>(elementi);

            string[] valori_numerici = numeri.Select(x => x.ToString()).ToArray();


            comboBox1.Items.AddRange(stringe);
            comboBox2.Items.AddRange(valori_numerici);



  //Restituisce un array specificando il tipo di output da dare
  public T[] GetArray<T>(object[] array)
        {
            List<T> list = new List<T>();

            foreach (object o in array)
            {
                if (o is T)
                {
                    list.Add((T)o);
                }
            }

            return list.ToArray();
        }




Automaticamente, la funzione andrà a prendere solo i valori di tipo stringa o di tipo int
successivamente converto l'array intero in un array di tipo string.
e faccio AddRange evitando di creare un ciclo per l'inserimento manuale degli elementi.


Ok ottimo
If ok Then GOTO Avanza else GOTO Inizia

29/10/16 14:56
WCodeLyokoYT
Grazie per le risposte, ma ancora non ho risolto.

Comunque non importa, grazie di nuovo
Ultima modifica effettuata da WCodeLyokoYT 29/10/16 15:07
aaa