Gambas-it

Gambas3 => Programmazione => Topic aperto da: pastrank - 14 Luglio 2020, 19:35:46

Titolo: [Risolto] Variabili
Inserito da: pastrank - 14 Luglio 2020, 19:35:46
Dio mio come sono arrugginito :-)
Facciamo conto che abbia una classe, che mi serve per semplificare la creazione di file tipo gli ".ini" (tra l'altro, avevo provato a usare gb.settings, ma con quelli non dei settaggi classici, ma in cartelle diverse, non riuscivo a creare il file, e non a modificarlo se esisteva gia'). Per farla semplice, in questa classe c'e' una struttura che definisco globalmente per essere usata in un array usato tramite i metodi della classe

Codice: [Seleziona]
Public Struct IniStruct 
  sez As String
  chv As String
  res As String
End Struct
Public myini As New IniStruct[]

e poi la uso in molti posti, creando un array e aggiungendoci i vari elementi

Codice: [Seleziona]
Public Sub IniSet(sezione As String, chiave As String, nuovovalore As Variant)
 Dim i As IniStruct
  Dim inew, inew2 As New IniStruct
 
   For Each i In myini
    If i.sez = sezione And i.chv = chiave Then
      i.res = nuovovalore
      Return
    Endif
  Next
 
 ->
 inew.sez = sezione
  inew.chv = "app"
  inew.res = "myappname"
  myini.Add(Inew)

  inew2.sez = sezione
  inew2.chv = chiave
  inew2.res = nuovovalore
  myini.Add(Inew2)
<-

Questa parte di codice, in pratica, modifica l'array che poi sara' salvato, se non esiste il file invece crea proprio l'array. Per funzionare, funziona, ma trovo orribile la cosa di inserire due variabili /(la parte tra -> e <- del codice), altrimenti non funziona: se riuso inew, vengono settati due valori uguali. Ma ci sara' un altro sistema, se dovessi inserire cento valori, mica potro' mettere cento variabili... allora immagino la dovrei azzerare...
Titolo: Re:Variabili
Inserito da: vuott - 14 Luglio 2020, 19:58:31
Codice: [Seleziona]
Public myini As New IniStruct[]

1a domanda (per capire):  perché dichiari "Pubblica" la variabile globale myini ?
Titolo: Re:Variabili
Inserito da: vuott - 14 Luglio 2020, 20:28:45
...ad ogni modo, questo semplice esempio può essere utile ?  :-\

Codice: [Seleziona]
Public Struct IniStruct 
  sez As String
  chv As String
  res As String
End Struct


Public Sub Main()

  Dim myini As New IniStruct[]

' Passa per "indirizzo" il simbolo della Struttura:
  IniSet(myini, "aaa", "bbb", "cccc")
 
' Fa una semplice verifica esemplificativa:
  Print myini[899].sez
  Print myini[899].chv
  Print myini[899].res

End


Public Sub IniSet(strini As IniStruct[], sezione As String, chiave As String, nuovovalore As Variant)

  Dim i, inew As IniStruct
  Dim c As Short
 
'  For Each i In strini
'    If (i.sez = sezione) And (i.chv = chiave) Then
'      i.res = nuovovalore
'      Return
'    Endif
'  Next
 
  For c = 1 To 1000        ' Crea ad esempio mille variabili (Oggetti) del tipo Struttura "IniStruct"
    inew = New IniStruct
    inew.sez = sezione & CStr(c)
    inew.chv = chiave & CStr(c)
    inew.res = nuovovalore & CStr(c)
' Inserisce la variabile - poco sopra creata - del tipo Struttura "IniStruct" nell'array del medesimo tipo Struttura:
    strini.Push(inew)
  Next

End


Titolo: Re:Variabili
Inserito da: pastrank - 14 Luglio 2020, 20:45:50
1a domanda (per capire):  perché dichiari "Pubblica" la variabile globale myini ?

Perche' ero nel dubbio ancora su come accedere ai valori in myini... nel caso avrei accesso da altri moduli, ma mi rendo conto di quello che mi dici (si', in effetti ci accedo da una funzione, e imetto subito private)
Titolo: Re:Variabili
Inserito da: pastrank - 14 Luglio 2020, 20:49:22
Codice: [Seleziona]
...ad ogni modo, questo semplice esempio può essere utile ?  :-\

...
.
    inew = New IniStruct

...
 

Direi che alla fine il mio problema era qui, in effetti :) Adesso inserisco praticamente un numero di righe di codice che e' il minimo possibile (una nuova istanza della variabile, tre valori che devo per forza settare). Direi risolto!
Titolo: Re:Variabili
Inserito da: vuott - 14 Luglio 2020, 22:26:42
Dio mio come sono arrugginito
Comunque sia, resta la mia considerazione e il mio rispetto di sempre per te come programmatore.
Titolo: Re:Variabili
Inserito da: Gianluigi - 14 Luglio 2020, 22:42:25
Dio mio come sono arrugginito
Comunque sia, resta la mia considerazione e il mio rispetto di sempre per te come programmatore.

+1  :ok:

Solo aggiungo un mio suggerimento, perché, visto che Minisini le reputa inadatte, invece di una struttura non usare una classe?
Infatti, a suo dire, pare che per creare una struttura Gambas debba prima creare anche una classe.

 :ciao:
Titolo: Re:Variabili
Inserito da: vuott - 14 Luglio 2020, 22:51:20
Solo aggiungo un mio suggerimento, perché, visto che Minisini le reputa inadatte, invece di una struttura non usare una classe?
Infatti, a suo dire, pare che per creare una struttura Gambas debba prima creare anche una classe.

Visti i tipi di ciascun membro della Struttura ideata da pastrank (tutti di tipo String), lui potrebbe utilizzare anche un array di array di tipo String.
Titolo: Re:Variabili
Inserito da: pastrank - 15 Luglio 2020, 01:08:16
Comunque sia, resta la mia considerazione e il mio rispetto di sempre per te come programmatore.

Negli ultimi 10 anni temo di non aver scritto niente da poter far vedere senza vergogna agli altri, m anche prima, devo risalire al pleistocene per ricordare qualcosa di entusiasmante, il fatto di ricordare di aver visto esempi su tante cose non e' la stessa cosa di averli creati! :-)
E proprio adesso che parliamo di file audio, mi sa che tu sei avanti sull'argomento al 99% dei gambasiani e alla maggior parte degli altri.

Belllo comunque anche il fatto che leggendo i post qua sopra megli anni anche ragazzi allora ingenui siano poi migliorati tanto  :coder:
Titolo: Re:Variabili
Inserito da: pastrank - 15 Luglio 2020, 01:32:31
Solo aggiungo un mio suggerimento, perché, visto che Minisini le reputa inadatte, invece di una struttura non usare una classe?
Infatti, a suo dire, pare che per creare una struttura Gambas debba prima creare anche una classe.

Infatti, non ti saprei fare una descrizione veloce, ma in pratica all'inizio nemmeno volevo fare una classe per tenere insieme il tutto, visto che questo dovrebbe essere una piccola parte di tutto il programma: fai conto, lo dico solo per giustificarmi, che ho un sacco di ifile audio, e poiche' leggere tag o calcolare hash e' cosa lunga, faccio controlli solo su insiemi parziali ogni notte (il pc e' poco potente, ma acceso 24/24).
Per salvare i dati che raccolgo, gli hash, ma anche, per esempio, l'anno di uscita, salvo questi in un file di testo, che mi serve anche per sapere, di conseguenza, cosa ho controllato e cosa no (l'anno di uscita, per esempio, dovrebbe essere comune a tutti i file di un album, se non lo e' c'e' un problema). Questi file li leggo e li scrivo con piccoli programmini fatti con Python, con Gambas e Bash.
All'origine volevo usare gb.settings qui, ma mi sono accorto sia che come lo usavo mi creava il file se non esisteva, ma andava in errore se esisteva, e che inseriva sempre le virgole a delimitare la stringa che scriveva come valore, dovendo quindi aggiornare tutti le altre procedure che ci accedevano, e quindi ho desistito subito.
Titolo: Re:Variabili
Inserito da: Gianluigi - 15 Luglio 2020, 17:18:03
Come giustamente hai scritto, l'esperto di file che hanno a che fare con San Midi è vuott e pertanto su questo fronte mi taccio.
Sommessamente ti suggerisco di dare un'occhiata a questo file, però mi devi promettere di non ridere  :P tieni conto che ha più di  due anni :
https://www.gambas-it.org/smf/index.php?topic=6369.msg43941#msg43941

Ricordati che esiste Unquote http://gambaswiki.org/wiki/lang/unquote?l=it

Al limite, se ti va, potresti fare un esempio (chiaramente non esaustivo) di come ricevi i dati, di come li estrapoli, e di come vorresti salvarli in modo che ci si possa cimentare in una soluzione.  :)

 :ciao:
Titolo: Re:Variabili
Inserito da: pastrank - 15 Luglio 2020, 19:24:48
però mi devi promettere di non ridere

Non rido, anche perche' ne sai piu' di me :-) Ora mi ci vorra' un po' di tempo per controllare lo svolgimento delle procedure (non tanto per quello che stavo facendo qui, ma per altri usi in cui varrebbe la pena). Unica cosa che ti chiedo sarebbe: ma il file ini dove salvi e' nella location standard ./config/gambas/nomeapp? Perche' quando facevo le prove con settings, dovevo usare la classe settings, tipo (ma senza giurarlo che ho provato in molti modi e non ricordo quale)

Codice: [Seleziona]
my = New Settings(nomefile)
my[data/app] = "testodascrivere"
my.save

Titolo: Re:Variabili
Inserito da: Gianluigi - 15 Luglio 2020, 19:32:42
Unica cosa che ti chiedo sarebbe: ma il file ini dove salvi e' nella location standard ./config/gambas/nomeapp?
Si, esattamente
EDIT:
La path corretta è "~/.config/gambas3/<nome progetto>.conf"
Citazione
Perche' quando facevo le prove con settings, dovevo usare la classe settings, tipo (ma senza giurarlo che ho provato in molti modi e non ricordo quale)

Codice: [Seleziona]
my = New Settings(nomefile)
my[data/app] = "testodascrivere"
my.save

Perché scrivi dovevi, hai un motivo particolare per salvare in posti diversi?
Titolo: Re:Variabili
Inserito da: pastrank - 15 Luglio 2020, 20:16:38
Perché scrivi dovevi, hai un motivo particolare per salvare in posti diversi?

Si', perche' a ogni cartella corrisponde un file e un album. Un esempio:

[data]
app = checkshares.py
time = 1592277899
added = 2017-04-17
chk =
genre = dark
tags = firenze
year = 1981
length = 1155
file count = 4
bits = 16
khz = 44.1
channels = 2

[files]
01. boxes.flac = 5E950504
02. spiders.flac = EBA51C94
03. drivin'.flac = E08B73A3
04. lobotomy.flac = 966D9A75

[applications]
taggalizer = 2

Perche' separati e non, per esempio, tutto im un db? Perche' gli album sono quasi 20000, e ci agisco sopra con programmi e script, a volte anche da Windows, e quindi voglio rimanere ai file di testo: a ricostruire tutti dati, dagli hash ai valori che testimoniano il controllo, ci sta che ci vogliano settimane :-)
Titolo: Re:Variabili
Inserito da: Gianluigi - 15 Luglio 2020, 22:33:14

Perche' separati e non, per esempio, tutto im un db? Perche' gli album sono quasi 20000, e ci agisco sopra con programmi e script, a volte anche da Windows, e quindi voglio rimanere ai file di testo: a ricostruire tutti dati, dagli hash ai valori che testimoniano il controllo, ci sta che ci vogliano settimane :-)

Però se usassi SQLite che non è problematico e lo puoi avere in una cartella condivisa, estraendo i dati in un file di testo avresti tutto come adesso ma molto più semplice, ordinato,e veloce, giusto?
Titolo: Re:Variabili
Inserito da: pastrank - 16 Luglio 2020, 01:37:00
Però se usassi SQLite che non è problematico e lo puoi avere in una cartella condivisa, estraendo i dati in un file di testo avresti tutto come adesso ma molto più semplice, ordinato,e veloce, giusto?

Non ne sono tanto sicuro: a parte la mia innata avversione per i database, avrei il timore di trovarmi, come e' successo, con un blocco del programma dopo qualche aggiornamento, ci agirei con piu' difficolta' con gli script, e non potrei usare i file di testo per ottenere con facilita' le pagine per il mio sito tramite l'unica cosa un po' piu' grande che ho fatto negli ultimi anni, un generatore di siti statici fatto con Python.
Titolo: Re:Variabili
Inserito da: Gianluigi - 16 Luglio 2020, 09:20:02
 :) Bene, dato che le mie idee si sono esaurite e che d'altra parte tu avevi già risolto con il suggerimento di vuott, direi che il post può dirsi chiuso con tua soddisfazione, giusto?

 :ciao:
Titolo: Re:Variabili
Inserito da: vuott - 16 Luglio 2020, 13:48:16
... a parte la mia innata avversione per i database...

(https://thumbs.gfycat.com/BouncyUntriedEagle-size_restricted.gif)


direi che il post può dirsi chiuso con tua soddisfazione, giusto?
No, con la mia ! ;D
Titolo: Re:Variabili
Inserito da: Gianluigi - 16 Luglio 2020, 14:33:08
Non sono per nulla d'accordo con voi due  :P  :P

A me i database hanno sempre affascinato.
Il fatto è che se non lavori dal vivo su esigenze effettive, sul confronto diretto con chi poi deve usufruirne, rimane difficile comprenderli a fondo.

Comunque mi accontento dei progressi che sto facendo spizzicando informazioni un po qui e un po là.

Grazie a, in ordine di apparizione (credo) tornu, sotema, Berserker79, Golia, dex e altri fra cui Hans, Lee e Fabien le mie conoscenze al riguardo sono migliorate.

I Love Database
Titolo: Re:Variabili
Inserito da: pastrank - 16 Luglio 2020, 21:58:21
No, con la mia ! ;D
Non c'e' un'icona con i baci?  :)
Titolo: Re:Variabili
Inserito da: pastrank - 16 Luglio 2020, 22:10:15
A me i database hanno sempre affascinato.

Non e' un delitto, ma a me ricordano i gestionali che volevano farmi scrivere 30 anni fa  :hatecomputer: e mi evito cosi' qualche problema di incompatibilita' con le versioni. I miei amori sono i file testuali, le esecuzioni programmate con cron e la linea di comando. La linea di comando anche perche' mi risparmio il tempo di disegnare l'interfaccia, la riservo per le occasioni massicce. Qualche volta in openbar mi mettero' a chiedervi cosa vi piace fare :-)

ps: si', ho risolto, devo cambiare il titolo?
Titolo: Re:Variabili
Inserito da: Gianluigi - 17 Luglio 2020, 10:35:37
...
ps: si', ho risolto, devo cambiare il titolo?

Se hai risolto con il suggerimento di vuott, sarebbe bello scrivessi un "[Risolto]" davanti al primo oggetto, grazie