Oppure

Loading
21/05/11 14:59
willy_80
Ciao a tutti,
Sto lavorando su un programma in vb.net che gestisce ed elabora una grande quantità di dati.
I miei dati li ho salvati in un file di testo in questo modo:

dato;dato;dato;dato;dato;dato;dato;dato;dato;...
dato;dato;dato;dato;dato;dato;dato;dato;dato;...
dato;dato;dato;dato;dato;dato;dato;dato;dato;...
[...]

siamo sull'ordine di 20000/30000 dati per riga e 20000/30000 righe.

vorrei accelerare i processi di lettura e scrittura, io quando apro il file uso input, autput o append.
E' possibile aprire e gestire i dati in random per leggere e scrivere nelle righe che mi interessano?

Es.:
1-Diciamo che voglio leggere la riga n°2
2-Splitto i dati e li metto in una matrice
3-Nella seconda cella ci scrivo "ciao"
4-Faccio il Join della matrice
5-Metto la stringa nella riga n°2 sostituendo quella esistente

Al momento usando input e output per fare cio che ho descritto nell'esempio creare un file di appoggio e poi rinominarlo leggendo tutto il file in fase di lettura e di scrittura.

Mi sapete dire come usare la funzione random?

Grazie
aaa
21/05/11 20:30
R0gerBlack
Che io sappia, devono essere lette prima tutte le righe e messe in un array o in una lista per poi accederci tranquillamente con un Random, quindi se sei disposto a leggere prima tutte le righe, basta che fai

Tra le dichiarazioni

Dim RandomText(1024) As String 'Righe Massime
Dim ReadedString As String


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


RandomText viene dichiarato con indice di 1024 che anche se nella dichiarazione è uno spreco di memoria, dopo la lettura viene ridimensionato con il ReDim Preserve (il ReDim normale cancella tutti i valori dell'Array) al numero delle righe risparmiando così tutta la memoria possibile. Se il tuo file ha più di 1024 righe aumenta l'indice massimo. Così fatto la variabile ReadedString avrà la frase letta a caso
Ultima modifica effettuata da R0gerBlack 21/05/11 20:31
aaa
21/05/11 21:05
willy_80
così facendo però dovrei caricare in ram tutta la mole di dati, il che diventerebbe proibitivo e rallenterebbe tutti gli altri processi...
aaa
22/05/11 7:11
R0gerBlack
Mmh è vero, potresti dividere il file in più file, ed usare un random per quale file leggere, dopo di ché leggere la riga a caso come ti ho fatto vedere
aaa
22/05/11 17:14
XBarboX
Secondo me la soluzione migliore è leggere i dati da un database.
Quando ci sono così tanti dati un db è necessario.
aaa
22/05/11 21:40
crash outside control
vorrei accelerare i processi di lettura e scrittura, io quando apro il file uso input, autput o append.

autput ...
aaa