Italian "Disordine" in un file INI

AlpVir

Well-Known Member
Licensed User
Premessa: la sub CreaFileINI crea un file di testo

B4X:
Sub CreaFileINI
   WriteIni("Autore",Autore & " - " & SitoMio ,File.DirRootExternal,NomeFileIni)
   WriteIni("Versione",VersioneNo,File.DirRootExternal,NomeFileIni)
   WriteIni("URL1",Sito & "ora1314.xml",File.DirRootExternal,NomeFileIni) 
   WriteIni("URL2",Sito & "ora1415.xml",File.DirRootExternal,NomeFileIni) 
   WriteIni("URL3",Sito & "ora1516.xml",File.DirRootExternal,NomeFileIni)
   WriteIni("URL4",Sito & "ora1617.xml",File.DirRootExternal,NomeFileIni)
   WriteIni("URL5",Sito & "ora1718.xml",File.DirRootExternal,NomeFileIni) 
   WriteIni("URL6",Sito & "ora1819.xml",File.DirRootExternal,NomeFileIni)  
   WriteIni("NumeroURL","2",File.DirRootExternal,NomeFileIni)
   WriteIni("UltimoURL",Sito & "ora1415.xml",File.DirRootExternal,NomeFileIni) 
   WriteIni("VediInizioOre","N",File.DirRootExternal,NomeFileIni) 
   WriteIni("QualeModalitaImportazione","1",File.DirRootExternal,NomeFileIni)
End Sub

B4X:
Sub WriteIni(mykey As String,myvalue As String,fPath As String,filename As String)
  Dim Map1 As Map
  Map1.Initialize
   If File.Exists(fPath,filename) Then
   Else
     File.WriteMap(fPath, filename, Map1)  'to create it if not exist
   End If
   Map1 = File.ReadMap(fPath,filename)
   Map1.Put(mykey, myvalue)
   File.WriteMap(fPath, filename, Map1)
End Sub


Questo è il file di testo creato :

UltimoDataBase=a.sqlite
QualeModalitaImportazione=1
URL1=www.liceo....ora1314.xml
URL2=www.liceo....ora1415.xml
Data=2/10/2014
Versione=2.0
URL5=www.liceo....ora1718.xml
URL6=www.liceo....ora1819.xml
URL3=www.liceo....ora1516.xml
Autore=Ugo Bottari - www.lalpinistavirtuale.it
URL4=www.liceo....ora1617.xml
QualeURL=2
UltimoURL=www.liceo....ora1314.xml

Stranamente le chiavi URL NON sono nell'ordine da 1 a 6.
Ho finora verificato che questo non ha nessuna importanza per il funzionamento dell'app ma se le chiavi fossero - poniamo - un numero sensibilmente maggiore sarebbe difficile ad un umano leggere una specifica voce ed inoltre potrebbe, in un ipotetico caso, provocare qualche malfunzionamento.
In ogni caso come mai questo "disordine" ? Ci si potrebbe ovviare ? E se sì come ?
E' poco più di una curiosità, ma grazie comunque per l'attenzione.
 

LucaMs

Expert
Licensed User
Davvero strano.

Hai provato anche con File.WriteList, anziché Map?

La soluzione migliore, come sempre, è un bel DB.
 

LucaMs

Expert
Licensed User
Suppongo che il motivo del post sia solo per sottolineare lo strano comportamento di WriteMap e ReadMap (il codice non è certo ottimizzato e invece di:
"If File.Exists(fPath,filename) Then" senza azioni, "If Not(File.Exists(fPath,filename)) Then").

Cmq, si può usare KeyValueStore (in alternativa ad un bel DB ;)).
 

AlpVir

Well-Known Member
Licensed User
In verità non mi faccio eccessivi problemi. Il codice funziona, non sarà super ottimizzato, ma funziona.
Volevo solo render nota la situazione e verificare se qualcuno è a conoscenza di una spiegazione per lo strano fenomeno, senza perderci troppo tempo.
Il db non è giustificato, a mio parere, da solamente una dozzina di informazioni (tante quante sono le righe del file INI) con un solo record.
 

LucaMs

Expert
Licensed User
In verità non mi faccio eccessivi problemi. Il codice funziona, non sarà super ottimizzato, ma funziona.
Volevo solo render nota la situazione e verificare se qualcuno è a conoscenza di una spiegazione per lo strano fenomeno, senza perderci troppo tempo.
Il db non è giustificato, a mio parere, da solamente una dozzina di informazioni (tante quante sono le righe del file INI) con un solo record.
Uhm... se si avesse un modulo (o una classe) per creare al volo un db anche per poche informazioni sarebbe meglio (se trovo il tempo...!)

Non penso ci siano soluzioni alla faccenda Map, perché non vedo come altrimenti potresti scriverci/leggerne i dati. Prova a chiedere nel forum comune, vediamo se Erel ti risponde.
 

udg

Expert
Licensed User
Ciao a tutti,

è una peculiarità dell'implementazione del Map.
Vedi la sua definizione.

udg
 

AlpVir

Well-Known Member
Licensed User
Quindi la chiave di tutto sarebbe nella frase :
Note that this map implementation does return items in the same order as they were added.
Grazie
 
Top