Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - Vb6 - Scrivere ( e poi leggere ) un arry (molto grande) in un file di testo
Forum - Visual Basic 6 - Vb6 - Scrivere ( e poi leggere ) un arry (molto grande) in un file di testo

Avatar
iz1kbp (Normal User)
Rookie


Messaggi: 26
Iscritto: 29/02/2020

Segnala al moderatore
Postato alle 9:25
Giovedì, 18/03/2021
Ciao a tutti,
ho un problema di questo tipo:
avrei necessita di salvare una matrice multi dimensionale.
Il sistema ha sempre funzionato dato che prima la matrice era relativament piccola.Ora ho dovuto ampliarla
ed il salvataggio praticamente blocca il sistema.
Cosa faccio:
scansiono un file wave e ne estraggo i numero di campioni (wavcount).questo valore è molto alto, dell'ordine di 1000000 campioni se non di piu (file audio)
La matrice che creo , audiolive, viene ridimensionata a seconda della grandezza del file audio che vado a lavorare.
Ad ogni campione associo una matrice di 512 dati ognuno dei quali vale da 0 a 255
In pratica la mia matrice (audiolive) sara cosi costituita : audiolive (wavcount,512)

Fino a poco tempo fa la matrice finale  era "relativamente" piu piccola perche anziche 512 valori erano solamente 12, ( audiolive (wavcount,12) )come ho scritto nel codice.
Questo sistema, molto base, funzionava perfettamente.

Codice sorgente - presumibilmente VB.NET

  1. For M = 0 To WavCount
  2. Print #8, "step-" & M
  3.     For n = 0 To 512 'era 12, aggiunta campo note
  4.         valore2 = audiolive(M, n)
  5.         sequenza = valore2 & "-" & sequenza
  6.     Next
  7.     Print #8, sequenza
  8. Next
  9. Close #8



il file creato poi lo vado al leggere con un cliclo inverso...semplicemente

ora , con 512, il file diventa enorme e la scrittura su disco blocca il sistema per parecchio tempo.
Qualcuno mi sa indicare una maniera piu "furba" per poter salvare questo file.
Grazie e buon proseguimento
Mario

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6378
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:07
Giovedì, 18/03/2021
Ciao,

prima di tutto qualche chiarimento, perché non sei stato chiarissimo ...

Gli elementi della matrice di che tipo sono? Puoi mostrare la Dim che usi?

Poi, se utilizzi l'elemento 0 allora le dimensioni saranno WavCount+1 e 513, è quello che vuoi?

Cosa è audiolive(M, n) ?

Perché non scrivi il valore dell'elemento dell'array nel file ma questo "sequenza"?

In definitiva, se salvi tutto in binario fai molto più velocemente ma bisogna chiarire tutti i punti precedenti prima di tutto


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à.
PM Quote
Avatar
iz1kbp (Normal User)
Rookie


Messaggi: 26
Iscritto: 29/02/2020

Segnala al moderatore
Postato alle 18:39
Giovedì, 18/03/2021
Ciao , ok...va do con ordine.
Purtroppo non riesco a quotare...non vedo il link "quote"..va bhe...riporto a mano.
Elelementi e matrice:
sono degli interi ed inizializzo semplicemente con
Codice sorgente - presumibilmente Visual Basic 6

  1. Global audiolive()


e poi ridiemensiono una volta che ho contato i campioni del file audio
Codice sorgente - presumibilmente Visual Basic 6

  1. ReDim audiolive(WavCount, 512)


Poi, se utilizzi l'elemento 0 allora le dimensioni saranno WavCount+1 e 513, è quello che vuoi?
non penso sia un problema ,comunque lavoro da 0 fino a TOTcampioni e da 0 fino a 512
Cosa è audiolive(M, n) ?
è la matrice in cui, per ogni campioneaudio , vado a memorizzare 512 valori corrispondenti ad altrettanti canali dmx
esemio per il campione 6000
audiolive(6000,0-2-1-5-4-7-255...etc etc )fino ad arrivare a 512 valori il cui singolo range è 0 > 255
Perché non scrivi il valore dell'elemento dell'array nel file ma questo "sequenza"?
in fase di debug, il mio file di testo, quando lo visualizzo con un editor,risulta cosi per il campione 6000(esempio)
>campione 6000
>>dati0-2-1-5-4-7-255 etc etc fino a 512 valori
Quando faccio la scansione da 0 a 512 ottengo tutti i valori in linea cosi posso capire su che campione sto lavorando. Se li scrivessi di volta in volta avrei una interminabile colonna di valori che non so a che campione appartengono se non dopo una conteggio manuale...

In pratica, ora avviene cosa del genere

audiolive(0,1-2-4-3-65-6-5-7-6 etcetc)
audiolive(1,0-2-6-4-7-6-8-255-1 etc etc)
....
audiolive(unltimocampione,2-4-6-255-255-0-0-0-1-2 etcetc)

io dovrei salvare questa matrice e poi dovrei leggere il file e ricosctruirla.

Nel modo che scritto io ,blocca il sistema....salvare in modo binario...non so cosa possa voler dire...sono un po ignorante:d

Spero di esser riuscito a spiegare meglio la mia esigenza

Mario;)

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6378
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:13
Giovedì, 18/03/2021
Veramente non sono interi, se non lo indichi sono variant.

Se usi un valore in più per dimensione e non utilizzi questi elementi, avrai uno spreco di memoria non indifferente.
Se vuoi puoi scrivere

Redim audiolive(1 To WavCount, 1 to 512)

Nel file non devi scrivere in quel modo perché ci vorrebbe un sacco di tempo inutilmente.
Se vuoi salvare i dati dell'array devi aprire il file in binario, in questo modo

Open "file.dat" For Binary As #1
Put #1, , audiolive
Close #1

e per leggere

Open "file.dat" For Binary As #1
Get #1, , audiolive
Close #1

Ovviamente non potrai aprire il file con notepad (ti servirà un editor binario)



Ultima modifica effettuata da nessuno il 18/03/2021 alle 20:14


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à.
PM Quote
Avatar
iz1kbp (Normal User)
Rookie


Messaggi: 26
Iscritto: 29/02/2020

Segnala al moderatore
Postato alle 18:25
Sabato, 20/03/2021
Si,il problema è nel debug...usando un file di testo si fa presto a leggere e capire se c'è qualcosa che non va.
provero a salvare in binario...ovvio devo fare bene i conti prima!:asd:

riguardo la dichiarazione,non capisco perchè se metto Global audiolive() as integer non funziona,lasciando solo Global audiolive() funziona (è in un modulo). comunque questo non è un grosso problema.

Riguardo il dimensionamento, come mai usi la notazione 1 to nel redim della matrice?
C' è differenza tra questo ed il mio modo di ridimensionare?

Mario  ;)

PM Quote