Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - lettura random da file di testo
Forum - C# / VB.NET - lettura random da file di testo

Avatar
adelaide12 (Normal User)
Newbie


Messaggi: 4
Iscritto: 13/05/2011

Segnala al moderatore
Postato alle 10:52
Domenica, 15/05/2011
Ciao, ho un problema con il mio codice:


Dim r As New Random
        Dim Testolineef() As String
        Dim Testolineed() As String

        Testolineef = System.IO.File.ReadAllLines("D:\ADE's WORKS\elementi di informatica\Impiccato\parole1.txt")
        Testolineed = System.IO.File.ReadAllLines("D:\ADE's WORKS\elementi di informatica\Impiccato\parole2.txt")


        Dim parolasegretaF As New List(Of String)(Testolineef)
        Dim parolasegretaD As New List(Of String)(Testolineed)


        If Labeldi.Text = "facile" Then               'scelta a caso di stringa nel file a seconda della difficoltà
            m = r.Next(parolasegretaF.Count)
            x = parolasegretaF(n)
        ElseIf Labeldi.Text = "difficile" Then
            m = r.Next(parolasegretaD.Count)
            x = parolasegretaD(n)
        End If

Quando apro il programma la prima parola è ogni volta sempre la stessa, cioè quella posizionata alla prima riga del file di testo, come faccio a fare in modo che ogni volta sia diversa anche quando apro il programma per la prima volta? risp :)


Ade
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
2
Down
V
Segnala al moderatore
Postato alle 12:05
Domenica, 15/05/2011
Può dipendere dal fatto che usi n come indice delle liste, mentre assegni il valore casuale a m?


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM
Avatar
R0gerBlack (Member)
Expert


Messaggi: 210
Iscritto: 10/06/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 11:44
Domenica, 15/05/2011
Metti il codice nei tag Code o non si capisce na mazz..

Codice sorgente - presumibilmente C# / VB.NET

  1. 'Esempio di codice nei Tag Code
  2. 'Dim A As String



Comunque, ti consiglio prima di leggere tutte le righe, salvarle in un array e usare il random da questo Array (e non List) che direttamente da File

Tra le dichiarazioni
Codice sorgente - presumibilmente VB.NET

  1. 'Tra le dichiarazioni
  2. Dim RandomText(1000) As String
  3. Dim ReadedString As String



Quando deve essere letto il file

Codice sorgente - presumibilmente VB.NET

  1. Dim r As New IO.StreamReader("locazione.txt")
  2.         Dim count As Integer
  3.         While Not r.EndOfStream
  4.             'Leggi la riga successiva finché non finiscono
  5.             RandomText(count) = r.ReadLine
  6.             'RandomText(count) = riga letta
  7.             count += 1
  8.         End While
  9.         'Ridimensiona l'Array (per risparmiare memoria) al massimo
  10.         'numero di frasi ogni riga nel File di testo, es.50 righe =
  11.         'RandomText(49) [RandomText(0) è utilizzato]
  12.         ReDim Preserve RandomText(count - 1)
  13.         'NOTA: Il ReDim effettuato senza Preserve cancellerà tutto
  14.         'il contenuto dell'array
  15.         Dim Rand As New Random
  16.         ReadedString = RandomText(Rand.Next(0, count))
  17.         'ReadedString conterrà la riga letta a caso



Ultima modifica effettuata da R0gerBlack il 15/05/2011 alle 12:02


Volere è potere.

Se la conoscenza crea problemi, non è con l'ignoranza che si risolvono [Isaac Asimov]
PM
Avatar
R0gerBlack (Member)
Expert


Messaggi: 210
Iscritto: 10/06/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 12:06
Domenica, 15/05/2011
Ti ho scritto un codice alternativo (più ottimizzato e funzionante) testato per avere il valore della riga a caso, per leggere da due file una riga a caso basta semplicemente che svolgi di nuovo il procedimento con un altra directory (o che usi un altro StreamReader) e un altro array

Più ottimizzato? RandomText(1000) in effetti è davvero un'ottimizzazione... - Il Totem - 15/05/11 12:09
ho usato il valore 1000 come numero massimo di domande, ma se vedi poi ho redimensionato l'Array con il ReDim Preserve - R0gerBlack - 15/05/11 12:13


Volere è potere.

Se la conoscenza crea problemi, non è con l'ignoranza che si risolvono [Isaac Asimov]
PM
Avatar
adelaide12 (Normal User)
Newbie


Messaggi: 4
Iscritto: 13/05/2011

Up
0
Down
V
Segnala al moderatore
Postato alle 12:03
Domenica, 15/05/2011
Scusami, adesso lo inserisco nel tag.
Il codice è il seguente:
Codice sorgente - presumibilmente VB.NET

  1. Dim r As New Random
  2.         r = New Random
  3.         Dim Testolineef() As String
  4.         Dim Testolineed() As String
  5.  
  6.         Testolineef = System.IO.File.ReadAllLines("D:\ADE's WORKS\elementi di informatica\Impiccato\parole1.txt")
  7.         Testolineed = System.IO.File.ReadAllLines("D:\ADE's WORKS\elementi di informatica\Impiccato\parole2.txt")
  8.  
  9.  
  10.         Dim parolasegretaF As New List(Of String)(Testolineef)
  11.         Dim parolasegretaD As New List(Of String)(Testolineed)
  12.  
  13.  
  14.         If Labeldi.Text = "facile" Then               'scelta a caso di stringa nel file a seconda della difficoltà
  15.             m = r.Next((parolasegretaF.Count) + 1)
  16.             x = parolasegretaF(n)
  17.         ElseIf Labeldi.Text = "difficile" Then
  18.             m = r.Next((parolasegretaD.Count) + 1)
  19.             x = parolasegretaD(n)
  20.         End If



Ade
PM
Avatar
adelaide12 (Normal User)
Newbie


Messaggi: 4
Iscritto: 13/05/2011

Up
0
Down
V
Segnala al moderatore
Postato alle 12:11
Domenica, 15/05/2011
Totem sei un mito!! :)
Scusate ma come faccio a fare in modo che mi legga le righe del file, fino a dove finisce...in modo che non mi inserisca nella mia lista di stringhe alcuen stringhe vuote?



Ultima modifica effettuata da adelaide12 il 19/05/2011 alle 9:23
Se magari evitassi di ignorare i miei post l'avresti capito. Se vedi il codice che ho postato, noterai che legge il testo riga per riga finché non FINISCONO e ogni riga viene inserita in un Array, tu invece leggi le righe tutte insieme e le metti in una lista - R0gerBlack - 15/05/11 15:25
While Not r.EndOfStream - Ultimo - 16/05/11 20:07
Grazie del tuo aiuto Roger!! adesso ho capito - adelaide12 - 19/05/11 09:18
Aspetta nell'esempio di codice che mi hai dato s'è randomtext? come l'hai dichiaratozie - adelaide12 - 19/05/11 09:25
Come hai dichiarato RandomText ? - adelaide12 - 19/05/11 09:30
Che valore iniziale gli attribuisci? - adelaide12 - 19/05/11 09:46


Ade
PM