Autore Topic: Tenere in memoria piu valori della stessa variabile  (Letto 2314 volte)

Offline vir1966

  • Gamberetto
  • *
  • Post: 39
    • Mostra profilo
Tenere in memoria piu valori della stessa variabile
« il: 07 Giugno 2019, 13:13:27 »
Continuando a convertire il programmino auto scritto per calcolare serramenti, scritto con Vb5/6 ad un certo punto mi trovo davanti ad un muro......con vb mantenevo in memoria tramite "ReDim Preserve" la stessa variabile (es. larghezzaanta) assegnandole un numero in sequenza ad ogni misurazione e per piu misurazioni..... per poi alla fine richiamarle per visualizzarle e o stamparle utilizzando un ciclo "for to next".....ed ecco che quà si presenta il muro, Gambas ReDim Preserve non lo riconosce, quindi quale altra procedura dovrei utilizzare per ottenere la stessa cosa?
Grazie

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Tenere in memoria piu valori della stessa variabile
« Risposta #1 il: 07 Giugno 2019, 14:26:37 »
Tu stai parlando di un vettore.
Come più volte detto Gambas non è VB, quindi non possiamo pretendere che funzioni allo stesso modo.
Studiati i vettori che in Gambas sono degli oggetti e vanno istanziati prima di poter essere usati.

esempio:

Codice: [Seleziona]
  Dim larghezzaanta as New Integer[]
  larghezzaanta.Push(560)
  Print larghezzaanta[0]

Vedi: https://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0#Array_.28Vettori.29_e_Matrici
« Ultima modifica: 07 Giugno 2019, 14:29:10 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vir1966

  • Gamberetto
  • *
  • Post: 39
    • Mostra profilo
Re:Tenere in memoria piu valori della stessa variabile
« Risposta #2 il: 07 Giugno 2019, 20:13:48 »
Tu stai parlando di un vettore.
Come più volte detto Gambas non è VB, quindi non possiamo pretendere che funzioni allo stesso modo.
Studiati i vettori che in Gambas sono degli oggetti e vanno istanziati prima di poter essere usati.

esempio:

Codice: [Seleziona]
  Dim larghezzaanta as New Integer[]
  larghezzaanta.Push(560)
  Print larghezzaanta[0]

Vedi: https://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0#Array_.28Vettori.29_e_Matrici
Ciao Gianluigi...grazie per la risposta, sicuramente Gambas non è Vb e viceversa, mi leggerò la guida e vediamo cosa ne viene fuori  :hatecomputer:

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Tenere in memoria piu valori della stessa variabile
« Risposta #3 il: 07 Giugno 2019, 22:40:36 »
Ciao,
io non voglio entrare nelle tue scelte e non conoscendo cosa deve fare il tuo programma non potrei anche volendo.
Ad esempio se la tua necessità fosse quella di dover abbinare una misura a una data voce, ad esempio altezzaantadestra, larghezzaantadestra, spessoremontantedestro ecc. forse una Collection sarebbe più adatta allo scopo, dai un'occhiata:
http://gambaswiki.org/wiki/comp/gb/collection?l=it
https://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0#Collection

Se esponi chiaramente il problema e dici come vorresti risolverlo, magari qualcuno tira fuori un'idea che può piacerti... o magari no... 
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vir1966

  • Gamberetto
  • *
  • Post: 39
    • Mostra profilo
Re:Tenere in memoria piu valori della stessa variabile
« Risposta #4 il: 08 Giugno 2019, 11:22:37 »
Al momento ho creato una variabile pubblica vettore
Codice: [Seleziona]
Public largoanta as New variant[25]
e lo impostata a 25 perche devo ancora capire come renderla dinamica.
Poi nella Public sub_ memorizza()  ho inserito la riga
Codice: [Seleziona]
largoanta[contatore] = larghezzaanta
Facendo poi piu misurazioni e dando un
Codice: [Seleziona]
for i = 1 to contatore
Print largoanta[i]
next
riesco a vedere correttamente le varie misurazioni incamerate dal vettore

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Tenere in memoria piu valori della stessa variabile
« Risposta #5 il: 08 Giugno 2019, 11:59:46 »
Intanto partiamo da Public, se largoanta deve essere visibile solo nel modulo/classe in cui è dichiarato allora basterebbe un Private, altrimenti è OK.

Variant: come ti è già stato suggerito da vuott non serve usare variant a meno che tu non debba inserire numeri e stringhe insieme.

Non è che il valore di larghezzaanta è una scritta più un numero?

Perchè non spieghi esattamente quale è il tuo problema e come hai pensato di risolverlo?

Sarebbe molto più semplice capirsi.

Comunque per una dinamicità degli array non impostati puoi aggiungere il dato con .Push(larghezzaanta) oppure con .Add(larghezzaanta).
Invero puoi rendere dinamico anche un array preimpostato con .Resize(26) che assomiglia a redim di vb.

Dimenticavo: quasi tutto in programmazione si conta da zero pertanto un array di 10 valori parte da array[0] e finisce con array[9].
« Ultima modifica: 08 Giugno 2019, 12:07:33 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vir1966

  • Gamberetto
  • *
  • Post: 39
    • Mostra profilo
Re:Tenere in memoria piu valori della stessa variabile
« Risposta #6 il: 08 Giugno 2019, 14:48:50 »
"largoanta" è Public per essere vista sia nella sub memorizza che poi nella sub stampa o visualizza.
Variant perché alcuni dati li raccolgo da textbox e per evitare conflitti preferisco variant.
In realtà non c'è un problema.....dovevo solo capire come riscrivere il codice originario in funzione di Gambas che non prevede i ReDim Preserve....approposito ringrazio per le dritte .Push .Add e .Resize, me le studierò per sistemare la questione della dinamicità.
Per il discorso che gli Array partono da zero, non è possibile impostare Option Base 1 ?

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Tenere in memoria piu valori della stessa variabile
« Risposta #7 il: 08 Giugno 2019, 15:41:15 »
Per il discorso che gli Array partono da zero, non è possibile impostare Option Base 1 ?
In Gambas non esiste Option Base 1.

Citazione
"largoanta" è Public per essere vista sia nella sub memorizza che poi nella sub stampa o visualizza.
Che largoanta deve essere vista da altre sub è chiaro, ma se le sub sono nella stessa classe (o modulo) non serve Public basta Private.
Citazione
Variant perché alcuni dati li raccolgo da textbox e per evitare conflitti preferisco variant.

È sempre un rischio trattare il tipo variant perchè può introdurre dei bug difficili da scovare, del tipo:
"Ottengo un risultato apparentemente corretto ma in realtà sbagliato".
Ti conviene sempre trattare con dati specifici ad esempio usando misure in millimetri conviene adottare Integer come tipo di dato.
Quando si ricevono dati numerici da delle textbox si opera una conversione del tipo, così:
Codice: [Seleziona]
mioInteger = Cint(TextBox1.Text).

Così saremo sempre tranquilli dei nostri calcoli.

Io capisco che tu ti voglia limitare a convertire un programma (funzionante) in Gambas, ma se mentre lo fai lo puoi migliorare imparando qualcosa di nuovo, non è più corretto fare così?
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 959
    • Mostra profilo
Re:Tenere in memoria piu valori della stessa variabile
« Risposta #8 il: 08 Giugno 2019, 16:12:53 »
Se vuoi puoi fare anche a meno della variabile contatore, per scansionare un array senza sapere di quanti elementi è composto puoi fare così:

Codice: [Seleziona]
For i = 0 to largoanta.Max
   print largoanta[i]
Next

Max in un array restituisce l'indice dell'elemento più alto.
E pensare magari di scrivere una classe/i con tutte le caratteristiche che deve avere un serramento per poi creare degli oggetti su cui lavorare?
Renderebbe tutto più semplice.
« Ultima modifica: 08 Giugno 2019, 16:16:42 da Top Fuel »
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Tenere in memoria piu valori della stessa variabile
« Risposta #9 il: 08 Giugno 2019, 17:36:36 »
"largoanta" è Public per essere vista sia nella sub memorizza che poi nella sub stampa o visualizza.
Come ti ha chiaramente già spiegato l'amico Gianluigi, l'opzione "Pubblic" non serve per rendere visibile il contenuto di una variabile all'interno delle subroutine appartenenti ad un medesimo Modulo o Classe, ...del resto, quando ti ho scritto questo post:
   http://www.gambas-it.org/smf/index.php?topic=7085.msg45973#msg45973
io non l'ho fatto per fare il saputello.


Variant perché alcuni dati li raccolgo da textbox e per evitare conflitti preferisco variant.
Non capisco perché Minisini non lo elimina, il tipo Variant, da Gambas !   :bad:
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Tenere in memoria piu valori della stessa variabile
« Risposta #10 il: 08 Giugno 2019, 17:58:10 »
Citazione
Non capisco perché Minisini non lo elimina, il tipo Variant, da Gambas !   :bad:

E le Collection e i programmi già creati?
Meglio di no, ma nessuno ci obbliga ad usarle, io in tanti anni (e pochi programmi) di VBA e Gambas non le ho mai usate, mai.  :bad:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 959
    • Mostra profilo
Re:Tenere in memoria piu valori della stessa variabile
« Risposta #11 il: 08 Giugno 2019, 18:08:02 »
Nemmeno io. :bad:
Dear youtube administrators, your search bar is broken. When I type the letter "J" it appears justin bieber when it should appear Jimi Hendrix. Fix this, please.

Offline vir1966

  • Gamberetto
  • *
  • Post: 39
    • Mostra profilo
Re:Tenere in memoria piu valori della stessa variabile
« Risposta #12 il: 08 Giugno 2019, 18:59:48 »
Ringrazio tutti per le risposte e delucidazioni, sono oro colato.... naturalmente da ignorantone quale sono vado per gradi per non stravolgere troppo e trovarmi altre problematiche da risolvere visto che le varianti nell'ambito dei serramenti sono molteplici

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re:Tenere in memoria piu valori della stessa variabile
« Risposta #13 il: 11 Giugno 2019, 18:35:06 »
Ciao mi inserisco qui perchè si è parlato di collection

io ho la necessita di creare una nuova collezione pubblica da codice, in una funzione mi arrivano i dati dal database e dovrei creare una collection per ogni cliente da codice.
il problema è che poi le devo poter leggere in altri form.

Creando da codice è pubblica oppure va settata diversamente?

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Tenere in memoria piu valori della stessa variabile
« Risposta #14 il: 11 Giugno 2019, 19:50:11 »
Ciao dex,
se hai un database mi riesce difficile capire a cosa ti serva una collection.
Comunque ti allego un piccolo esempio che spero possa esserti di aiuto.

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro