[ruby-it] Scrittura su file modalità binaria

Fabio -- exp6969 a gmail.com
Mer 27 Gen 2010 20:46:29 CET


gabriele renzi wrote:
> 2010/1/27 Fabio -- <exp6969 a gmail.com>:
> 
>> Vorrei che scrivesse gli equivalenti dei caratteri formati dai
>> raggruppamenti di 8 bit alla volta: ad esempio se ottengo la stringa di
>> bit 01000000, nel file mi viene scritto: "01000000" ma si tratta di 8
>> caratteri cioè 8 byte giusto? ('0'=00000000, '1'=00000001, ecc...).
>> Io vorrei ottenere "a" (valore in ascii di 01000000) cioè 1 byte, ok?!
> 
> si, ma non capisco perché hai bisogno dei bit in una stringa
> 
> Ma ti dicevo: se hai ottenuto la string in un modo puoi applicare
> l'ìoperazione inversa. Esempio, se hai usato Numebr#to_s(base)  e
> String#to_i(base), e ?carattere  e Number#chr
> 
> 
>>> ?a.to_s(2)
> => "1100001"
>>> ?a.to_s(2).to_i(2).chr
> => "a"
> 
>> Ecco... non riesco a capire perchè non lo fa in automatico e non riesco
>> a trovare niente che lo faccia...
> 
> ti avevano suggerito array pack e unpack che penso funzionino, sennò
> vedi sopra. Il motivo per cui non lo fa in automatico è che tu gli
> stai dicendo di scrivere una lista di caratteri. Dovrebbe poterti
> leggere nel pensiero per poter capire che tu quella stringa di
> caratteri ascii vuoi che sia interpretata come una stringa di bit :).
> 
> Come ti dicevo, il "binary" mode è un'altra cosa, significa solo che
> su windows quando scrivi
>   file.puts("ciao\nmiao")
> nel file di output c'è la stringa "ciao" seguita da un carattere di
> new line mentre se apri il file in modalità non binaria nel file di
> output avrai "ciao" seguito da un carriage return e poi da un newline.

Hai perfettamente ragione, quindi, mi spiego meglio.
Si tratta di un compressore (huffman).
Leggo in input un file di testo ed ottengo in uscita la sua versione 
compressa.
Per com'è costruito ottengo una stringa lunghissima di bit ed un albero 
delle decisioni.
Il problema è che se vado a salvare la stringa su file (essendo scritta 
in caratteri '1' e '0') il file è più grosso dell'originale e quindi 
sembra che non abbia compresso una mazza! In realtà se i bit fossero 
raggruppati e scritti come caratteri occuperebbero 1/8 dello spazio e la 
dimensione tornerebbe...
es:
fileinput.txt 182 KB
fileoutput.hfm 799 KB (?!?!?!?) no dovrebbe essere 799/8 -> 99 KB OK!!!

Spero di aver chiarito il tuo dubbio...

Grazie a tutti per le risposte.

Fabio
-- 
Posted via http://www.ruby-forum.com/.


More information about the Ml mailing list