Italian [Risolto] [B4J] File config

Aldo's

Active Member
Licensed User
Buona settimana a tutti.
Ho una app B4J che necessità di un file config per puntare ad una directory che può essere differente da computer a computer (anche perchè il database potrebbe essere inserito su una chiave USB).
Come faccio a creare un file config?
Grazie
 

LucaMs

Expert
Licensed User
Longtime User
Buongiorno.

Crea un file .cvs, con coppie Chiave, Valore e poi caricalo usando il metodo LoadCSV della libreria jStringUtils.

Esempio (anche per scriverlo ma questo puoi farlo con un qualunque editor di testo, ovviamente):
B4X:
Dim SU As StringUtils
   
' Crea il file.
    Dim lst As List
    lst.Initialize
    lst.Add(Array As String("1", "Uno"))
    lst.Add(Array As String("2", "Due"))
    SU.SaveCSV(File.DirApp, "Config.csv", ",", lst)

'Legge il file.
    Dim lstConfig As List = SU.LoadCSV(File.DirApp, "Config.csv", ",")
    For Each Pair() As String In lstConfig
        Log(Pair(0) & TAB & Pair(1))
    Next
 

LucaMs

Expert
Licensed User
Longtime User
Sarebbe più comoda una Map. Non te l'avevo consigliata perché temevo che non potessi scrivere un normale file di testo, a mano, usando un editor, e poi leggerlo tramite il metodo File.ReadMap, che questo potesse leggere solo file creati con File.WriteMap.

Effettivamente, WriteMap scrive una prima riga che a mano non scriveresti, di questo tipo:

#Mon Mar 28 10:35:30 CEST 2022

ma anche in assenza di quella riga, il resto viene letto correttamente.

B4X:
Dim mapConfig As Map = CreateMap("Nome":"Ugo", "Cognome":"Persichetti")
File.WriteMap(File.DirApp, "test.txt", mapConfig)
Il codice sopra crea un file di testo contenente:

#Mon Mar 28 10:35:30 CEST 2022
Cognome=Persichetti
Nome=Ugo

ma potresti scriverlo a mano (editor), senza la prima riga, e leggerlo con:
B4X:
Dim mapConfig As Map
mapConfig = File.ReadMap(File.DirApp, "test.txt")
For Each Key As String In mapConfig.Keys
    Log(Key & TAB & mapConfig.Get(Key))
Next

Log:
Waiting for debugger to connect...
Program started.
Cognome Persichetti
Nome Ugo

Quindi, che tu scriva il file di configurazione usando un editor o facendolo generare dal sorgente, puoi tranquillamente e molto più utilmente usare una Map (in questo modo potrai "puntare" direttamente al valore che ti interessa, tramite chiave).
 

Aldo's

Active Member
Licensed User
Sarebbe più comoda una Map. Non te l'avevo consigliata perché temevo che non potessi scrivere un normale file di testo, a mano, usando un editor, e poi leggerlo tramite il metodo File.ReadMap, che questo potesse leggere solo file creati con File.WriteMap.

Effettivamente, WriteMap scrive una prima riga che a mano non scriveresti, di questo tipo:

#Mon Mar 28 10:35:30 CEST 2022

ma anche in assenza di quella riga, il resto viene letto correttamente.

B4X:
Dim mapConfig As Map = CreateMap("Nome":"Ugo", "Cognome":"Persichetti")
File.WriteMap(File.DirApp, "test.txt", mapConfig)
Il codice sopra crea un file di testo contenente:

#Mon Mar 28 10:35:30 CEST 2022
Cognome=Persichetti
Nome=Ugo

ma potresti scriverlo a mano (editor), senza la prima riga, e leggerlo con:
B4X:
Dim mapConfig As Map
mapConfig = File.ReadMap(File.DirApp, "test.txt")
For Each Key As String In mapConfig.Keys
    Log(Key & TAB & mapConfig.Get(Key))
Next

Log:
Waiting for debugger to connect...
Program started.
Cognome Persichetti
Nome Ugo

Quindi, che tu scriva il file di configurazione usando un editor o facendolo generare dal sorgente, puoi tranquillamente e molto più utilmente usare una Map (in questo modo potrai "puntare" direttamente al valore che ti interessa, tramite chiave).
Ho provato entrambi i metodi e, per quello che mi serve, sia il primo che il secondo sono funzionali.
Grazie
 
Top