Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [VB] Dim ReDim Put Get

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    133

    [VB] Dim ReDim Put Get

    Ciao, sono nuovo in questo forum ed ho una serie di problemi di programmazione con VB

    Sistema operativo Windows XP Professional
    Office Professional (o meglio) Excel 2002 SP3
    Visual Studio 2005 - 8.0 di cui ho solo installato Visual Basic 2005 (prima avevo installato tutto, ma alla fine ho disinstallato e reinstallato solo VB).

    Ho scritto una serie di procedure in Excel, utilizzando poco le capacità di Excel, ma sfruttando invece la programmazione del basic di Excel, mi risultava comodo distribuire fogli che poi hanno personalizzato in vari modi. Essendo ormai consolidate ho pensato di riunirle in un unico programma e ho affrontato Visual Studio.

    1. In Excel ho dimensionato tranquillamente

    codice:
    Public NumeDati As Integre
    Public DataMemo() As Date
    Public ValoriMemo() As Byte
    Public ControlMemo() As Boolean
    Public AltroMemo() As Integer
    .
    .
    NumeDati=5000 ‘Circa
    ReDim DataMemo(1 To NumeDati) As Date
    ReDim ValoriMemo(1 To NumeDati, 1 To 5, 1 To 11, 0 To 24) As Byte
    ReDim ControlMemo(1 To NumeDati) As Boolean
    ReDim AltroMemo(1 to 100, 1 To NumeDati) As Integer

    Ora Visual Basic non vuole dimensioni che non partono da zero. Esiste un sistema, una Option, una direttiva al compilatore per passare questo ostacolo? (non è neanche possibile dimensionare un vettore da -100 a 100). In più solo l’ultima dimensione può essere variata.

    2. In Excel scrivendo

    codice:
    Dim FileNumber As Integer
    FileNumber = FreeFile
    Open ThisWorkbook.Path & "\NomeFile.fil" For Binary Access Write As #FileNumber
    Put FileNumber, , NumeDati
    Put FileNumber, , DataMemo
    Put FileNumber, , ValoriMemo
    Put FileNumber, , ControlMemo
    Put FileNumber, , AltroMemo
    Close #FileNumber
    Il tutto funziona correttamente e i tempi di lettura/scrittura sono più che accettabili

    In Visual Basic non va accetta solo matrici (vettori) mono-dimensionali
    Ho provato sia con FilePut(Nf, ValoriMemo) che con My.Computer.FileSystem.WriteAllBytes(...)

    Convertire il tutto con:

    codice:
    For N=1 to NumeDati
    For K=1 to 5
    For J=1 to 11
    For I=0 to 24
    Put FileNumber, , ValoriMemo(N, K, J, I)
    Next I
    Next J
    Next K
    Next N
    Ha dei tempi di esecuzione che sono eterni. Come fare?

    3) Al momento del salvataggio, eseguito con i 4 loop, eseguo questo codice

    codice:
    Response = MsgBox("Salvo l'archivo?", MsgBoxStyle.YesNoCancel)
     If Response = MsgBoxResult.Yes Then
     Call ScriviArchivio()
     Exit Sub
    End If
    Mi resta sullo schermo la maschera del messaggio parzialmente disegnata e solo alla fine del salvataggio esegue un repaint corretto della zona prima occupata dalla MsgBox, l’effetto grafico è orrendo, come si risolve questo problema? E’ la mia scheda grafica difettosa?

    L’unica soluzione che mi viene in mente è di dimensionare un vettore
    ReDim V(NumeDati*5*11*25) as Byte
    Questo dovrei riuscire a leggerlo e scriverlo facilmente, se non esistono limiti di dimensioni
    E poi di indirizzarlo io con una Function

    codice:
    Public Function DataMemo(ByVal N As Integer, ByVal K As Integer, ByVal J As Integer, ByVal I As Integer) As Byte
    DataMemo = V(I * (NumeDati * 5 * 11) + (J - 1) * (NumeDati * 5) + (K - 1) * NumeDati + N)
    End Function
    (non garantisco che l’indirizzamento sia giusto è solo un esempio)

    Devo ricorrere a questo? VB6 ha lo stesso questi problemi? Se inserisco queste matrici che dipendono tutte da NumeDati in una Structure poi riesco a leggerle e scriverle?. (all’interno della struttura avrei comunque una matrice a più dimensioni).
    Esiste un compilatore Basic possibilmente visual che superi questi problemi?
    Se riscrivo il tutto in Pascal (Delphi) o C commetto tanti errori di conversione che è come ricominciare da capo.
    Qualche consiglio grazie. Anche per il punto 3 che non dipende strettamente dalla Dim.

    Tomas
    tomas

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Benvenuto sul forum.
    Ti invito subito a leggere il regolamento e a controllare di essere nella sezione corretta dove postare. Per VB c'è un sub-forum dedicato. Le prossime discussioni su VB postale lì.

    Ti sposto.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    133
    Scusami, ho letto il regolamento perchè avevo dei dubbi sulle 3 domande poste insieme, poi naturalmente l'ho accodato nel posto sbagliato. Alla prossima ci sto più attento.
    Tomas
    tomas

  4. #4

    Re: [VB] Dim ReDim Put Get

    Originariamente inviato da Tomas
    Ora Visual Basic non vuole dimensioni che non partono da zero. Esiste un sistema, una Option, una direttiva al compilatore per passare questo ostacolo?
    No.
    In più solo l’ultima dimensione può essere variata.
    Non è vero. Questa restrizione si applica solamente all'uso di ReDim con la clausola Preserve. L'unica vera restrizione di ReDim è che non si può cambiare il rank di un array, ossia il suo numero di dimensioni.
    2. In Excel scrivendo
    [...]
    Puoi usare tranquillamente il metodo FilePutObject, ma comunque ti consiglio di non usare i metodi di compatibilità con VB6/VBA; piuttosto studia le classi native del .NET Framework (namespace System.IO) e i meccanismi di serializzazione degli oggetti.
    3) Al momento del salvataggio, eseguito con i 4 loop, eseguo questo codice
    [...]
    Questo è un problema che puoi risolvere facilmente creando un thread che effettui il salvataggio.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2002
    Messaggi
    133
    Grazie mille mi metto a studiare, ma almeno so cosa.
    Tomas
    tomas

  6. #6
    Originariamente inviato da Tomas
    Grazie mille mi metto a studiare, ma almeno so cosa.
    Prego, se hai problemi non esitare a chiedere.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Visto che qualche indicazione è stata fornita, chiudo la discussione, in quanto in ciascun thread si dovrebbe trattare uno - ed un solo - problema, con un linguaggio di riferimento specifico.

    Ulteriori norme da seguire sono riportate nel Regolamento di quest'area.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.