Autore Topic: [RISOLTO] Visibilità strutture pubbliche e ridimensionamento dinamico  (Letto 1460 volte)

Offline Orionis

  • Gambero
  • **
  • Post: 58
    • Mostra profilo
    • BoxIdee
Sono ancora qua.
Premetto: sto cercando di portare un programma VB in Gambas e l'operazione procede a fasi alterne: difficoltà. studio, risolvo velocemente, altri problemi, studio, e a forza di tentativi trovo una soluzione, e così via.

Questa volta però, dopo essere impazzito con vari help e spiegazioni multi-linguistiche, mi trovo più in braghe di tela di prima, quindi chiedo aiuto.

Esigenza:
devo creare degli Array  di strutture publiche, sulle quali andare ad agire con dei metodi pubblici (es. aggiungi, elimina, ordina, stampa,..)
Le strutture e i metodi sono contenuti in un modulo per mie questioni di ordine del codice.
Nel form Main devo dichiarare e instanziare delle variabili delle mie strutture per passarle poi come argomenti alle funzioni del modulo.
Alltro punto fondamentale è che gli array di strutture devono essere dinamici per poter aggiungere o eliminare dei record.

2 (grandi) problemi:
1. nel form Main non riesco a dichiarare delle istanze delle strutture
2. non so (ed ottengo errori provando) come ridimensionare l'array con i metodi Resize e Delete.

Riporto di seguito il codice minimale che sto usando per le prove - i commenti sulle righe sono gli errori che ottengo):

Modulo con dichiarazioni e metodi
Codice: [Seleziona]
' Gambas module file

Public Struct myLista
  nome As String
  tel As Integer
End Struct

Private elenco[10] As Struct MyLista

Public Sub Riempi()  
Dim i As Integer
Dim vv As Integer

  For i = 0 To 9
     vv = 100 * i
     elenco[i].tel = vv
     elenco[i].nome = CStr(vv)
  Next
  Return
End

Public Function GetItem(itm As Integer) As MyLista
  Return elenco[itm]
End

Public Function Espandi(n As Integer) As Boolean
   elenco.resize(n)   'unknown symbol 'resize' in class $MyLista[]
   Return elenco.Count
End

Form Main che richiama il modulo:
Codice: [Seleziona]
Public Sub Form_Open()
'alternative provate
 Dim itm As MyLista   'Unknown identifier MyLista
 Dim itm As Struct MyLista 'Unexpected Struct
 Dim itm As ModTest.MyLista 'Unexpected '.'
 Dim itm As Struct ModTest.MyLista 'Unexpected Struct

modTest.Riempi
Label1.Caption = modTest.GetItem(5).nome
Print modTest.Espandi(3)
End

Una birra pagata a chi mi dà una dritta :2birre:

« Ultima modifica: 31 Maggio 2014, 14:00:10 da Orionis »
Neanche gli Dei...possono nulla...contro la stupidità umana?

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.158
  • Tonno verde
    • Mostra profilo
Re: Visibilità strutture pubbliche e ridimensionamento dinamico
« Risposta #1 il: 26 Maggio 2014, 22:21:46 »
CITAZIONE:
'Gambas module file

Scusa ma io di queste robe ne capisco poco però così a prima vista noto che sei in un modulo e non in una classe...

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

Offline Orionis

  • Gambero
  • **
  • Post: 58
    • Mostra profilo
    • BoxIdee
Re: Visibilità strutture pubbliche e ridimensionamento dinamico
« Risposta #2 il: 26 Maggio 2014, 22:49:02 »
Scusa ma io di queste robe ne capisco poco però così a prima vista noto che sei in un modulo e non in una classe...

 :ciao:
Ciao, vedo che sei sempre attivo, H24 !

Si in effetti è un modulo, però per quanto riguarda l'argomento questo non dovrebbe influire; non mi serve instanziare il contenuto e il modulo è più leggero, almeno credo.

Aggiornamento:
ho appena provato (le sto provando tutte) a modificare la dichiarazione dell'Array di strutture e ho beccato un altro schiaffo che dice: "Array di strutture non supportato"...aiuto, sempre più confuso.

Qual'è la differenza tra queste 2 dichiarazioni:
Codice: [Seleziona]
Private elenchi[10] As Struct MyElenco
Private elenchi As Struct MyElenco[](10)
??????


Neanche gli Dei...possono nulla...contro la stupidità umana?

Offline Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: Visibilità strutture pubbliche e ridimensionamento dinamico
« Risposta #3 il: 26 Maggio 2014, 23:53:26 »
Qual'è la differenza tra queste 2 dichiarazioni:
Codice: [Seleziona]
Private elenchi[10] As Struct MyElenco
Private elenchi As Struct MyElenco[](10)

Nella seconda dichiarazione stai usando parentesi tonde, non sono ammesse.
La prima dichiarazione è un normale array statico di 10 elementi, la seconda è una matrice di matrici, come spiegato nell'help, in pratica se non mi sbaglio 10 matrici dinamiche tutte assieme.
Riguardo i metodi Resize e Delete, non possono essere usati su array statici, solo sui dinamici.
« Ultima modifica: 27 Maggio 2014, 00:31:12 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.316
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Visibilità strutture pubbliche e ridimensionamento dinamico
« Risposta #4 il: 27 Maggio 2014, 00:44:16 »
.....chi mi dà una dritta

Io non ne so molto, ma qualcuno ha scritto qualche riga nella WIKI

- sulle Strutture:
http://www.gambas-it.org/wiki/index.php?title=Indice#Strutture

- sul ridimensionamento dei vettori:
http://www.gambas-it.org/wiki/index.php?title=Guide_della_comunit%C3%A0#Matrici_e_Vettori

Forse :-\ ci può essere qualcosa che può aiutarti.


Qual'è la differenza tra queste 2 dichiarazioni:
Codice: [Seleziona]
Private elenchi[10] As Struct MyElenco
Private elenchi As Struct MyElenco[](10)
Anche in questo terzo caso mi rimetto ad altri:   
http://gambasdoc.org/help/cat/arraydecl?it&v3
« Ultima modifica: 27 Maggio 2014, 01:38:40 da vuott »
« 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 Top Fuel

  • Gran Maestro dei Gamberi
  • *****
  • Post: 960
    • Mostra profilo
Re: Visibilità strutture pubbliche e ridimensionamento dinamico
« Risposta #5 il: 27 Maggio 2014, 00:47:10 »
C'è praticamente tutto.
Dovrebbe essere sufficiente a risolvere i suoi problemi, almeno spero. :)
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 Orionis

  • Gambero
  • **
  • Post: 58
    • Mostra profilo
    • BoxIdee
[SOLVED]: Visibilità strutture pubbliche e ridimensionamento dinamico
« Risposta #6 il: 27 Maggio 2014, 15:04:24 »
Qual'è la differenza tra queste 2 dichiarazioni:
Codice: [Seleziona]
Private elenchi[10] As Struct MyElenco
Private elenchi As Struct MyElenco[](10)

Nella seconda dichiarazione stai usando parentesi tonde, non sono ammesse.
La prima dichiarazione è un normale array statico di 10 elementi, la seconda è una matrice di matrici, come spiegato nell'help, in pratica se non mi sbaglio 10 matrici dinamiche tutte assieme.
Riguardo i metodi Resize e Delete, non possono essere usati su array statici, solo sui dinamici.

Grazie a te e all'onnipresente Vuott per le risposte.
Dopo ore rubate al sonno inizio ad intravvedere la luce di San Midi.
Una nota sull'uso delle parentesi tonde; l'esempio l'ho preso dal sito Gambas-user che riporta in un post (PlanStructure è una struttura articolata):
Codice: [Seleziona]
You can give an initial size (as shown above) with
  Plan = New PlanStructure[](iInitialSize)

Venendo a me, l'esigenza è di avere matrici DINAMICHE di strutture per poter aggiungere e togliere elementi.
La dichiarazione:
Codice: [Seleziona]
Private elenchi[10] As Struct MyElenco
funziona, ma è statica, quindi niente .ADD/.REMOVE
La dichiarazione:
Codice: [Seleziona]
Public elenco As New Struct MyLista[]
dovrebbe essere dinamica, ma da errore (curioso!, visto il seguito) di "Arrays of structure are not supported"

L'inghippo sta nella sintassi della dichiarazione; il termine 'Struct' non piace.
La dichiarazione corretta è con il solo termine New:
Codice: [Seleziona]
Public elenco As New  MyLista[]

Così creo un array vuoto di strutture MyLista, che andrò poi a riempire aggiungendo gli elementi in questo modo:
Codice: [Seleziona]
     ele = New MyLista
     ele.nome = qualcosa
     ele.numero = altro numero
     elenco.Add(ele)

Tutto OK  :D
Basta una parola in più o una in meno per sbatterci la testa.
Questo è stato provando inserendo tutto il codice, comprese dichiarazioni, all'interno della class Main; ora devo provare a portare fuori il tutto in un Modulo (cosa che prima mi incasinava ancora di più) e verificare che sia ancora ok.

Ho voluto riassumere e riportare qui i miei risultati, sicuramente banali per voi e per tanti, per chi come me è alle prime armi con il Gamberetto, bello ma terribilmente confuso per gli ex VBisti.

Grazie
Neanche gli Dei...possono nulla...contro la stupidità umana?

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.316
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Visibilità strutture pubbliche e ridimensionamento dinamico
« Risposta #7 il: 27 Maggio 2014, 17:10:30 »
Una nota sull'uso delle parentesi tonde; l'esempio l'ho preso dal sito Gambas-user che riporta in un post (PlanStructure è una struttura articolata):
Codice: [Seleziona]
You can give an initial size (as shown above) with
  Plan = New PlanStructure[](iInitialSize)
La tua annotazione è del tutto conferente. Infatti è possibile attualmente determinare il numero degli elementi di un vettore in entrambi i modi:
Codice: gambas [Seleziona]

 Dim a As New Byte[10]
 Dim b As New Byte[](10)




Venendo a me, ...... per chi come me è alle prime armi con il Gamberetto, bello ma terribilmente confuso per gli ex VBisti.
Ho visto ciò che scrivi e la terminologia che usi, nonché le questioni che poni. Mi sembra che tu sia ben preparato nella teoria: quando prenderai - fra un po' - dimistichezza con il linguaggio Gambas, diventerai un bravo Programmatore Gambas.
Ho... come la sensazione che San Midi sia al tuo fianco e ti protegga...
« 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.158
  • Tonno verde
    • Mostra profilo
Re: Visibilità strutture pubbliche e ridimensionamento dinamico
« Risposta #8 il: 27 Maggio 2014, 17:37:49 »
Ho voluto riassumere e riportare qui i miei risultati, sicuramente banali per voi e per tanti, per chi come me è alle prime armi con il Gamberetto, bello ma terribilmente confuso per gli ex VBisti.
Guai a te se non lo fai :violent: altrimenti io cosa imparo  >:(


Ho visto ciò che scrivi e la terminologia che usi, nonché le questioni che poni. Mi sembra che tu sia ben preparato nella teoria: quando prenderai - fra un po' - dimistichezza con il linguaggio Gambas, diventerai un bravo Programmatore Gambas.
Ho... come la sensazione che San Midi sia al tuo fianco e ti protegga...

Concordo con te vuott,
Orionis ha messo la freccia ed è già sulla corsia di sorpasso, anzi non vedo già più i fanalini  :'(
Comunque, grazie a San Midi, io di strutture non ne ho mai avuto di bisogno.  ;D
« Ultima modifica: 27 Maggio 2014, 17:42:13 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.316
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Visibilità strutture pubbliche e ridimensionamento dinamico
« Risposta #9 il: 27 Maggio 2014, 17:48:06 »
Comunque, grazie a San Midi, io di strutture non ne ho mai avuto di bisogno.

...rischierai di dover mettere il busto !   :violent:
« 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 Orionis

  • Gambero
  • **
  • Post: 58
    • Mostra profilo
    • BoxIdee
[SOLVED] Visibilità strutture pubbliche e ridimensionamento dinamico
« Risposta #10 il: 27 Maggio 2014, 21:21:52 »
Ho voluto riassumere e riportare qui i miei risultati, sicuramente banali per voi e per tanti, per chi come me è alle prime armi con il Gamberetto, bello ma terribilmente confuso per gli ex VBisti.
Guai a te se non lo fai :violent: altrimenti io cosa imparo  >:(


Ho visto ciò che scrivi e la terminologia che usi, nonché le questioni che poni. Mi sembra che tu sia ben preparato nella teoria: quando prenderai - fra un po' - dimistichezza con il linguaggio Gambas, diventerai un bravo Programmatore Gambas.
Ho... come la sensazione che San Midi sia al tuo fianco e ti protegga...

Concordo con te vuott,
Orionis ha messo la freccia ed è già sulla corsia di sorpasso, anzi non vedo già più i fanalini  :'(
Comunque, grazie a San Midi, io di strutture non ne ho mai avuto di bisogno.  ;D

Troppppo buoni...sono diventato tutto 0xff003f (quindi anche un pò cianotico  :evil:
Comunque tu Gianluigi non ha i bisogno di 'strutture', io invece avrei bisogno di una migliore 'View', considerato che quando scrivo i post ogni 3 lettere ne sbaglio 2, come Cimabue  :'(

Per Vuot: ma quando si festeggia San Midi ?
Se non è già definito, propongo il 22 di Novembre, Santa Cecilia e, non essendo stato ancora assegnato [vedere: http://www.alibrando.it/santi/archivio_patroni_o_v.html] potrebbe essere eletto Patrono dei Programmatori  :coder:

 


« Ultima modifica: 27 Maggio 2014, 22:58:05 da Orionis »
Neanche gli Dei...possono nulla...contro la stupidità umana?

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.316
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: [SOLVED] Visibilità strutture pubbliche e ridimensionamento dinamico
« Risposta #11 il: 27 Maggio 2014, 23:02:37 »
Per Vuot: ma quando si festeggia San Midi ?
Se non è già definito, propongo il 22 di Novembre, Santa Cecilia e, non essendo stato ancora assegnato potrebbe essere eletto Patrono dei Programmatori

Due di troppo per quel giorno.
Penso che tutt'al più potrebbe essere nominato Patrono dei programmatori della musica al computer. ..ma credo che San Midi non ambisce a ciò: lui è eremita.  
« Ultima modifica: 11 Giugno 2014, 10:17:27 da vuott »
« 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 vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.316
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Visibilità strutture pubbliche e ridimensionamento dinamico
« Risposta #12 il: 27 Maggio 2014, 23:18:27 »
Mi sembra che tu sia ben preparato nella teoria:
Ho... come la sensazione che San Midi sia al tuo fianco e ti protegga...

Aaaah, ma allora avevo ragione !

http://www.boxidee.it/
« 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.158
  • Tonno verde
    • Mostra profilo
Re: Visibilità strutture pubbliche e ridimensionamento dinamico
« Risposta #13 il: 27 Maggio 2014, 23:39:03 »

Aaaah, ma allora avevo ragione !

http://www.boxidee.it/

Che il ragazzo promettesse bene lo si era capito subito.  ;D Ma che avesse già di moltissimo promesso...
Caspiterina che bello  :D

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

Offline Orionis

  • Gambero
  • **
  • Post: 58
    • Mostra profilo
    • BoxIdee
Re: Visibilità strutture pubbliche e ridimensionamento dinamico
« Risposta #14 il: 27 Maggio 2014, 23:47:14 »

Aaaah, ma allora avevo ragione !

http://www.boxidee.it/

Che il ragazzo promettesse bene lo si era capito subito.  ;D Ma che avesse già di moltissimo promesso...
Caspiterina che bello  :D



Ragazzi, se fate così mi metto a piangere, e non è bello che un uomo pianga, specialmente se è maturo  ;D

Neanche gli Dei...possono nulla...contro la stupidità umana?