Oppure

Loading
12/09/11 11:05
Ultimo
Sto cercando di estrapolare i dati presenti in un file.txt (storico01-oggi.txt) il quale è un archivio estrazioni del lotto che scarico dal sito lottomaticaitalia.it

Quì sotto ho inserito un pezzo dell'archivio in formato testo :

2001/01/03    BA    26    59    60    67    17
2001/01/03    CA    13    83    16    41    68
2001/01/03    FI    33    87    76    7    10
2001/01/03    GE    5    38    3    65    72
2001/01/03    MI    62    30    7    61    52
2001/01/03    NA    25    38    15    31    86
2001/01/03    PA    15    56    89    85    63
2001/01/03    RM    41    17    80    48    9
2001/01/03    TO    42    16    12    60    20
2001/01/03    VE    51    84    76    42    90
2001/01/08    BA    84    80    40    15    9
2001/01/08    CA    6    87    80    25    60
2001/01/08    FI    72    68    79    84    88
2001/01/08    GE    38    54    67    3    81
2001/01/08    MI    61    1    16    31    56
2001/01/08    NA    19    43    29    61    34
2001/01/08    PA    16    15    66    1    44
2001/01/08    RM    69    77    42    53    27
2001/01/08    TO    90    50    20    59    3
2001/01/08    VE    59    69    72    60    70
2001/01/10    BA    14    87    29    75    76
2001/01/10    CA    86    13    31    82    84
2001/01/10    FI    76    83    63    84    27
2001/01/10    GE    9    49    68    47    70
2001/01/10    MI    35    58    31    30    79
2001/01/10    NA    31    55    72    54    11
2001/01/10    PA    30    58    87    43    16
2001/01/10    RM    8    33    37    61    15
2001/01/10    TO    89    51    10    70    84
2001/01/10    VE    75    53    38    65    27
2001/01/13    BA    57    64    32    84    18
2001/01/13    CA    66    4    78    68    3
2001/01/13    FI    44    76    77    12    35
2001/01/13    GE    63    19    60    68    76
2001/01/13    MI    50    46    69    34    2
2001/01/13    NA    81    35    29    41    86
2001/01/13    PA    90    4    74    67    19
2001/01/13    RM    83    75    31    32    2
2001/01/13    TO    87    52    53    45    40
2001/01/13    VE    5    55    64    65    28

Quì sotto inserisco la funzione che sto cercando di implementare per estrapolare i dati separati, in modo da poterci lavorare in seguito:

 'Funzione che esegue la lettura e il caricamento dell'Archivio estrazioni in formato testo.
    Public Sub Carica_Archivio_Estrazioni(ByVal Ruota As String)

        'Aggiungi l'OpenFileDialog
        Dim Open As New OpenFileDialog
        'metti il formato
        Open.Filter = " Files di Testo|*.txt"
        'Metti che si apre l'OpenFileDialog e apra
        If Open.ShowDialog = Windows.Forms.DialogResult.OK Then
            Dim lettura As New IO.StreamReader(Open.FileName)
            'Cancello ListaArchivio
            LstArchivio.Clear()
            'Una stringa che rappresenta ogni singola riga del file
            Dim Riga As String
            ' Variabile contatore
            Dim Conta As Int16 = -1
            'Imposta il testo della label di stato
            LabelAvvisi.Text = "Apertura del file in corso..."
            'Fa rispettare l'ordine delle istruzioni
            Application.DoEvents()
            'Attende 3 secondi
            Thread.Sleep(3000)
            'Fa rispettare l'ordine delle istruzioni
            Application.DoEvents()
            'Finchè non si raggiunge la fine del file si continua
            'a leggere
            While Not lettura.EndOfStream
                'Leggiamo una linea di file (S)
                Riga = lettura.ReadLine
                'Se la linea è diversa da una riga vuota
                If Riga <> Nothing Then
                    ' Incremento contatore
                    Conta += 1
                    'Splitto la riga 
                    Dim vettore_riga() As String
                    vettore_riga = Riga.Split(" ")
                    'Carico le ListeColonne degli elementi splittati
                    DataArchivio(Conta) = vettore_riga(0) ' Quì mi da errore
                    RuoteArchivio(Conta) = vettore_riga(1)
                    PrimoEstr(Conta) = vettore_riga(2)
                    SecondoEstr(Conta) = vettore_riga(3)
                    TerzoEstr(Conta) = vettore_riga(4)
                    QuartoEstr(Conta) = vettore_riga(5)
                    QuintoEstr(Conta) = vettore_riga(6)
                    'Carico la ListaArchivio
                    LstArchivio.Add(Riga)
                End If

            End While
            'Chiude il file
            lettura.Close()
            LabelAvvisi.Text = "File aperto, righe combinazioni lette = " & Conta + 1
            Me.TextBoxDataEstrazione.Text = DataArchivio(Conta)
        End If


    End Sub



In pratica devo caricare degli Array o liste separati per ogni dato, come se
fossero le colonne di un database.

Questa parte di codice non so se sia corretta, per separare le sottostrighe
di ogni riga letta:

   'Splitto la riga 
                    Dim vettore_riga() As String
                    vettore_riga = Riga.Split(" ")
                    'Carico le ListeColonne degli elementi splittati
                    DataArchivio(Conta) = vettore_riga(0) ' Quì mi da errore
                    RuoteArchivio(Conta) = vettore_riga(1)
                     PrimoEstr(Conta) = vettore_riga(2)
                    SecondoEstr(Conta) = vettore_riga(3)
                    TerzoEstr(Conta) = vettore_riga(4)
                    QuartoEstr(Conta) = vettore_riga(5)
                    QuintoEstr(Conta) = vettore_riga(6)


Nuova versione usando le Liste:

          'Splitto la riga 
                    Dim vettore_riga(0 To 6) As String
                    vettore_riga = Riga.Split(" ")
                    'Carico le ListeColonne degli elementi splittati
                    DataArchivio.Add(vettore_riga(0))
                    RuoteArchivio.Add(vettore_riga(1))
                    PrimoEstr.Add(vettore_riga(2))
                    SecondoEstr.Add(vettore_riga(3))
                    TerzoEstr.Add(vettore_riga(4))
                    QuartoEstr.Add(vettore_riga(5))
                    QuintoEstr.Add(vettore_riga(6))


Quì sotto inserisco la versione funzionante senza l'uso della funzione Split(" ";).


 'Funzione che esegue la lettura e il caricamento dell'Archivio estrazioni in formato testo.
    Public Sub Carica_Archivio_Estrazioni(ByVal Ruota As String)

        'Se la lista Archivio è vuota
        If LstArchivio.Count < 1 Then
            'Aggiungi l'OpenFileDialog
            Dim Open As New OpenFileDialog
            'metti il formato
            Open.Filter = " Files di Testo|*.txt"
            'Metti che si apre l'OpenFileDialog e apra
            If Open.ShowDialog = Windows.Forms.DialogResult.OK Then
                Dim lettura As New IO.StreamReader(Open.FileName)
                'Cancello ListaArchivio
                LstArchivio.Clear()
                'Una stringa che rappresenta ogni singola riga del file
                Dim Riga As String
                ' Variabile contatore
                Dim Conta As Int16 = -1
                'Imposta il testo della label di stato
                LabelAvvisi.Text = "Apertura del file in corso..."
                'Fa rispettare l'ordine delle istruzioni
                Application.DoEvents()
                'Attende 3 secondi
                Thread.Sleep(3000)
                'Fa rispettare l'ordine delle istruzioni
                Application.DoEvents()
                'Finchè non si raggiunge la fine del file si continua
                'a leggere
                While Not lettura.EndOfStream
                    'Leggiamo una linea di file (S)
                    Riga = lettura.ReadLine
                    'Se la linea è diversa da una riga vuota
                    If (Riga Is Nothing) Or (Riga = "") Or (Riga.Length < 10) Then
                        'Se la riga è vuota la salta.
                    Else
                        ' Incremento Conta
                        Conta += 1
                        Dim Carattere As String = ""
                        Dim NuovaRiga As String = ""
                        Dim Contatore As Int16 = 0
                        'Con un ciclo For Each verifico tutti i caratteri della stringa Riga
                        For Each c As Char In Riga
                            If c = "	"c Or c = "	"c Then
                                Contatore += 1
                            End If
                            Carattere = CStr(c)
                            If Carattere = " " Then
                                Contatore += 1
                            End If
                            If c = "	"c Or c = "	"c Or Carattere = " " Then
                                'Carico le Liste_Colonne dei dati
                                Select Case Contatore
                                    Case 1
                                        DataArchivio.Add(NuovaRiga)
                                    Case 2
                                        RuoteArchivio.Add(NuovaRiga)
                                    Case 3
                                        PrimoEstr.Add(NuovaRiga)
                                    Case 4
                                        SecondoEstr.Add(NuovaRiga)
                                    Case 5
                                        TerzoEstr.Add(NuovaRiga)
                                    Case 6
                                        QuartoEstr.Add(NuovaRiga)
                                    Case 7
                                        QuintoEstr.Add(NuovaRiga)
                                End Select
                                'Cancella la stringa
                                NuovaRiga = ""
                            Else
                                'Forma la nuova stringa
                                NuovaRiga += Carattere
                            End If
                            'Ci interessano solo i primi sette Dati della stringa Riga 
                            If Contatore = 7 Then
                                Exit For
                            End If
                        Next c
                        'Carico la ListaArchivio
                        LstArchivio.Add(Riga)
                    End If
                End While
                'Chiude il file
                lettura.Close()
                'Chiama la funzione InserisciDati
                IserisciDati(Ruota)
                LabelAvvisi.Text = "File aperto, righe combinazioni lette = " & Conta + 1
                Me.TextBoxDataEstrazione.Text = DataArchivio(Conta)
            End If
            'Se la Lista Archivio è già caricata
        Else
            'Chiama la funzione InserisciDati
            IserisciDati(Ruota)
        End If

    End Sub


Ringrazio anticipatamente per un vostro eventuale aiuto ;)
Ultima modifica effettuata da Ultimo 14/09/11 10:38
If ok Then GOTO Avanza else GOTO Inizia

12/09/11 11:18
nessuno
E hai un problema con il tuo codice? Quale?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
13/09/11 10:12
Il Totem
Si può risolvere facilmente con poche righe di LINQ:
var data =
    from line in File.ReadAllLines("prof.txt")
    where !String.IsNullOrEmpty(line)
    let parts = from part in line.Split(' ')
                where !String.IsNullOrEmpty(part) && part != " "
                select part
    select new
    {
        DataArchivio = parts.ElementAt(0),
        RuoteArchivio = parts.ElementAt(1),
        Estrazioni = parts.Skip(2).Take(5)
    };
aaa