Italian [Risolto] [B4J] File config

Aldo's

Well-Known 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

Well-Known 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