Newsgroup: it.comp.lang.pascal
Titolo: Programma di compressione

Ciao a tutti
Mi era venuto in mente di fare con il fidato PASCAL un bel programmino di
compressione, con uno dei metodi visti sul libro di sistemi (magari tutti!,
e magari ne invento io uno ;)).
Prima di cominciare ho voluto però risolvere un problema che avevo bene in
mente.
Se provo a fare la copia di un file devo aprire due file (1 in lettura e 1
in scrittura), leggere i dati da uno e scriverli sull'altro (ovviamente).
La domanda è come. Se uso file of boolean come tipo non mi sbrigo più poichè
la copia risulta ovviamente lentissima.
Se invece uso un tipo LONGINT il programma funziona con velocità maggiore,
ma ovviamente solo con
file di dimensione multipla di 32 bit.
Come faccio?
Credo che la risposta stia nel file senza tipo (A:file) però
non mi è affatto chiero come si usa una cosa del genere.
Gli errori vengono fuori da tutte le parti  :((
Grazie e ciao
Gianfranco, e-mai: 
defe...@NOSPAM.extero.it
Rimuovere NOSPAM nell'indirizzo per rispondere.





guardati blockread e blockwrite....
ciao

Un bel di' Gianfranco scrisse:
G> Se provo a fare la copia di un file devo aprire due file (1 in lettura e 1
G> in scrittura), leggere i dati da uno e scriverli sull'altro (ovviamente).
G> La domanda è come. Se uso file of boolean come tipo non mi sbrigo più poichè
G> la copia risulta ovviamente lentissima.
G> Se invece uso un tipo LONGINT il programma funziona con velocità maggiore,
G> ma ovviamente solo con
G> file di dimensione multipla di 32 bit.
G> Come faccio?
e la mezza via?? File of Byte?? :-))
-- 
"Per pulire una cosa, bisogna sporcarne un'altra", legge di Imbesi sulla
conservazione dello sporco
"...ma si puo' sporcare tutto senza pulire niente", estensione di Freeman
-- 
Emanuele Cesena
d.a.m...@iol.it
    occhio all'antispam NOSPAM!
http://www.geocities.com/SiliconValley/Grid/8879

Come faccio?
La soluzione h la seguente :
const MAX = 64000;
var input_file, output_file : file;
    file_origine, file_destinazione : string;
    byte_letti : word;
    buffer : array [1..MAX] of byte;
begin
  write('file origine      : '); readln(file_origine);
  write('file destinazione : '); readln(file_destinazione);
  assign(input_file, file_origine);
  assign(output_file, file_destinazione);
  reset(input_file, 1);
  rewrite(output_file, 1);
  repeat
      blockread(input_file, buffer, sizeof(buffer), byte_letti);
      if (byte_letti <> 0) then blockwrite(output_file, buffer, byte_letti);
  until (byte_letti = 0);
  close(input_file);
  close(output_file);
end.
Andrew Cleverland
-----------------
Disse il saggio "Avlta parh bbell sop 'o marm !"...
--
Posted from 
itaca.ulysse.it
 [195.223.254.1]
via Mailgate.ORG Server - 
http://www.mailgate.org

  rewrite(output_file, 1);
Grazie molte per la dritta, ma devo fare anche un'altra domanda....
Il numero 1 che metti come secondo parametro, che sulla guida in linea
chiama Recsize, a che cosa serve precisamente?
Forse dovrei vergognarmene ma non l'avevo mai usato prima e solo ora noto
che se non lo metto il tuo programma di esempio non funziona
Grazie e ciao da Gianfranco
e-mail: defe...@NOSPAMextero.it
Rimuovere NOSPAM per rispondere

che se non lo metto il tuo programma di esempio non funziona
Esatto, si chiama "Recsize" che sta per "record size" ovvero per "dimensione del
record"
Con la parola "record" si intende il gruppo di informazioni da leggere in una
volta.
Scrivendo "1" indico al compilatore che voglio leggere 1 byte alla volta.
Andrea (mica uno qualunque...)
------------------------------
(se mi mandi la spam ti metto un'aspirina nella fanta...)
