Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Ho inserito sul form N TextBox creando una "matrice di controlli", dunque hanno tutti lo stesso nome seguito da un indice che parte da 0: TextBox(0), TextBox(1) ...
    Ora, i valori inseriti in queste TextBox voglio caricarli in un array A. Ho scritto questo codice:

    Dim A() As Double
    Dim i As Integer
    Dim j As Integer
    For i = 0 To N - 1
    j = i + 1
    A(j) = TextBox(i).Text
    Next i

    Quando avvio il programma ricevo sempre il messaggio:
    "indice non compreso nell'intervallo"
    e risulta evidenziata la riga:
    A(j) = TextBox(i).Text

    Sapete dirmi qual è il problema?
    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    798
    Prima del For fai un Redim A(N) inizializzando a al valore di N.
    Ans.

  3. #3
    Grazie, ha funzionato. Ho semplicemente aggiunto la riga:

    ReDim A(N) As Double

    prima del For

    Dim A() As Double
    Dim i As Integer
    Dim j As Integer
    ReDim A(N) As Double
    For i = 0 To N - 1
    j = i + 1
    A(j) = TextBox(i).Text
    Next i

    In realtà non capisco bene il significato di questo comando Redim. Sapresti spiegarmelo? Perchè è necessario?
    Grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    798
    Redim serve per modificare la dimensione di un array una volta impostata, permettendoti anche di non perderne il contenuto. Quando crei un array con Dim di una certa dimensione se vuoi modificare tale dimensione in questo caso si usa Redim Preserve per non perderne il contenuto, una Dim con un nuovo valore ti andrebbe a cancellare il contenuto dell'array. Si usa anche quando crei un array e non sai di quanti elementi deve essere, quando il numero di elementi ti è noto allora con Redim puoi impostargli la dimensione. Con gli array dinamici, cioè array nei quali la dimensione in fase di creazione non è specificata, il Redim non dovrebbe servire in quanto dovrebbe modificarsi in automatico la dimensione, spesso pero' non accade, non so ancora bene il motivo, come il tuo caso in cui l'array creato non aveva dimensione, per questo di dava errore, non c'erano indici disponibili. Dai anche un'occhiata all'help di VB, e dato che devi usare gli array non si sa mai possano servirti cerca Join e Split, Join dato un array ti crea una stringa contenente gli elementi dell'array separati da un delimitatore, Split ti crea un array partendo da una stringa contenente elementi separati da un delimitatore. Sono funzioni spesso molto utili.
    Ans.

  5. #5
    Grazie infinite, mi sei stato di grande aiuto.
    Credo che siano veramente utilissimi anche quei comandi Join e Split di cui mi hai parlato; potresti dirmi più o meno come si usano? Ad esempio, se volessi visualizzare il contenuto del mio array A(i) in una label, come dovrei scrivere?
    Grazie in anticipo

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    798
    Esempio 1, JOIN.
    Ho un array, ad esempio:
    A(1) = "primo"
    A(2) = "secondo"
    A(3) = "terzo"
    ..............
    Per visualizzare tutti gli elementi dell'array in una label
    Label1.Caption = Join(A())
    In questo caso come delimitatore per ogni elemento viene usato lo spazio, altrimenti se voglio separare gli elementi con un altro carattere la Join diventa Join(A(),carattere).
    Ad esempio puo' servirmi visulizzarli su più righe, usero' come delimitatore il ritorno a capo. Un utilizzo potrebbe essere questo, vuoi sapere se nell'array è presente la parola terzo, senza che in ciclo ti leggi e confronti ogni singolo elemento dell'array fai la Join dell'array in una stringa e poi con l'istruzione Instr controlli se la parola terzo è presente, il tutto con due istruzioni e molto più velocemente, specialmente se l'array è formato da molti elementi.

    Esempio 2, SPLIT.
    Ho una stringa di questo tipo con elementi separati dalla virgola:
    A = "primo,secondo,terzo"
    Voglio crearmi un array da questa stringa:
    MyArr() = Split(A, ",")
    L'array creato avrà base 0, cioè il primo indice è 0.

    Che altro, non so se già conosci come ricavarti gli indici superiore ed inferiore di un array, UBOUND(array) e LBOUND(array) per rispettivamente indice superiore ed indice inferiore, nell'esempio di prima della Split vuoi sapere di quanti elementi è l'array restituito Ubound(MyArr()).

    Ciao.
    Ans.

  7. #7
    Ho inserito la riga:

    Label.Caption=Join(A())

    al termine della mia procedura di caricamento dell'array:

    Dim A() As Double
    Dim i As Integer
    Dim j As Integer
    ReDim A(N) As Double
    For i = 0 To N - 1
    j = i + 1
    A(j) = TextBox(i).Text
    Next i
    Label.Caption=Join(A())

    perchè vorrei visualizzare in una Label tutti i valori caricati, ma il programma si ferma in quel punto con il messaggio:

    "Chiamata di routine o argomento non valido"

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    798
    Forse ho dimenticato, funziona con array di stringhe..... se ti serve proprio il tipo double non puoi fare una join in quanto sono numeri e non puo' concatenarli tra loro, la concatenazione la si puo' fare con le stringhe.
    Ans.

  9. #9
    ... e se volessi visualizzare gli elementi del mio array in colonna in un file .txt, o magari .xls?
    Come dovrei scrivere?
    E il file dovrei crearlo prima o si può creare via codice?

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2001
    Messaggi
    798
    Il tuo array è numerico quindi devi fare un ciclo leggendoti ogni elemento e scrivendolo nel file. Aggiungi il ritorno a capo ad ogni elemento. Il file viene creato in automatico se non esiste. L'istruzione da usare è Open nomefile For Output As #numero, un numero che ti identifichi il file. Per scriverci dentro usa Print #numero, valore, alla fine chiudi il file con Close #numero. Per creare un file Excel è diversa la cosa, ma potresti invece crearti un file con estensione csv, viene letto da excel senza problemi, l'unica cosa i valori da scrivere nel file devono essere tra doppi apici, esempio:
    "1"
    "2"
    ....
    se vuoi scrivere su più colonne separa i valori con la virgola in questo modo:
    "primo elemento","1"
    "secondo elemento","2"
    ...........
    Prova anche l'istruzione Write invece di print in questi casi in modo da avere il valore tra doppi apici.

    Ciao
    Ans.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.