Dovrei compattare al massimo i dati scritti in un file di testo, ma non zippandolo (questo perchè i dati in questione sono scritti nel file di testo ogni X secondi, aggiungendoli ai precedenti)
Il codice qui sotto scrive 2 dati (i numeri double 44.123456 e 7.123456; ma sarebbe sufficiente anche un float per descrivere i 2 valori con una sufficiente precisione) ed il file "prova.txt" occupa 19 byte. Difatti
44.123456 in formato testo occupa 9 byte;
7.123456 in formato testo occupa 8 byte;
con virgola e il CR i conti tornano.
Tuttavia so che 2 double occuperebbero 128 bits (16 bytes). Con il CR saremmo a 17 bytes. Se trovassi il modo di scrivere questi 2 double in un file di testo avrei risparmiato 2 bytes.
Se usassi i float il risparmio sarebbe ancora più consistente (4+4+1=9 a fronte di 19; risparmio 10 bytes !) ed è proprio la via che vorrei privilegiare.
Ovviamente dovrei poi essere in grado di reinterpretare, leggendo il file di testo, i corretti valori numerici.
Si può fare con gli strumenti a disposizione di B4A ?
Grazie per l'attenzione.
Il codice qui sotto scrive 2 dati (i numeri double 44.123456 e 7.123456; ma sarebbe sufficiente anche un float per descrivere i 2 valori con una sufficiente precisione) ed il file "prova.txt" occupa 19 byte. Difatti
44.123456 in formato testo occupa 9 byte;
7.123456 in formato testo occupa 8 byte;
con virgola e il CR i conti tornano.
Tuttavia so che 2 double occuperebbero 128 bits (16 bytes). Con il CR saremmo a 17 bytes. Se trovassi il modo di scrivere questi 2 double in un file di testo avrei risparmiato 2 bytes.
Se usassi i float il risparmio sarebbe ancora più consistente (4+4+1=9 a fronte di 19; risparmio 10 bytes !) ed è proprio la via che vorrei privilegiare.
Ovviamente dovrei poi essere in grado di reinterpretare, leggendo il file di testo, i corretti valori numerici.
Si può fare con gli strumenti a disposizione di B4A ?
Grazie per l'attenzione.
B4X:
Dim Lat, Lon As Double ' ma sarebbe sufficiente un float)
Dim strLat,strLon As String
Dim Riga As String
Dim Ele() As String
Try
File.delete(File.DirRootExternal,"prova.txt")
Catch
Log(LastException)
End Try
'--- i dati originali in double (ma sarebbe sufficiente un float)
Lat=44.123456
Lon=7.123456
'--- converto
strLat=Lat
strLon=Lon
Riga=strLat & "," & strLon
'--- registro
Dim TW As TextWriter
TW.Initialize(File.OpenOutput(File.DirRootExternal,"prova.txt",False))
TW.WriteLine (Riga)
TW.Close
'--- azzero
Lat=0:Lon=0:strLat="":strLon="":Riga=""
'--- leggo
Dim TR As TextReader
TR.Initialize(File.Openinput(File.DirRootExternal,"prova.txt"))
Riga=TR.ReadLine
TR.Close
'--- interpreto
Ele=Regex.Split(",",Riga)
'--- visualizzo e verifico che si tratta effettivamente di numeri (aggiungendo 1)
Lat=Ele(0)+1
Lon=Ele(1)+1
Msgbox (Lat,Lon)
'--- prova.txt occupa 19 byte (difatti 9+1+8+CR=19)