Autore Topic: [Risolto] Variabili  (Letto 1338 volte)

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
[Risolto] Variabili
« il: 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...
« Ultima modifica: 17 Luglio 2020, 18:11:22 da pastrank »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Variabili
« Risposta #1 il: 14 Luglio 2020, 19:58:31 »
Codice: [Seleziona]
Public myini As New IniStruct[]

1a domanda (per capire):  perché dichiari "Pubblica" la variabile globale myini ?
« 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.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Variabili
« Risposta #2 il: 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


« Ultima modifica: 14 Luglio 2020, 22:21:09 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 pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re:Variabili
« Risposta #3 il: 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)

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re:Variabili
« Risposta #4 il: 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!
« Ultima modifica: 15 Luglio 2020, 01:34:40 da pastrank »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Variabili
« Risposta #5 il: 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.
« 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:Variabili
« Risposta #6 il: 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:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Variabili
« Risposta #7 il: 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.
« Ultima modifica: 14 Luglio 2020, 22:51:52 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 pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re:Variabili
« Risposta #8 il: 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:

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re:Variabili
« Risposta #9 il: 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.

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Variabili
« Risposta #10 il: 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:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re:Variabili
« Risposta #11 il: 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


Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Variabili
« Risposta #12 il: 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?
« Ultima modifica: 15 Luglio 2020, 19:37:50 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re:Variabili
« Risposta #13 il: 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 :-)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Variabili
« Risposta #14 il: 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?
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro