Newsgroup: it.comp.lang.pascal
Titolo: "copia"

sono di nuovo io! non preoccupatevi, non sono sclerato... so ke in questo
periodo vi sto assillando... cmq ecco la mia domanda: come posso copiare il
contenuto di un file in un altro modificando tutti i caratteri senza
preoccuparmi della garndezza del file? cioč, usando la procedura
while not eof(filez) do begin
readln(filez,riga);
writeln(filez2,modifica(riga));
end;
tutto funziona fino a che il file d'origine non č troppo grosso, cioč minore
di um mega, poi tutto va in palla. avete qualche consiglio su com
evelocizzare il processo? grazie a ki risponderŕ (la procedura funziona, non
ho problemi di qul tipo)... ciauz

come lo apri il file?
bye, Cereal

Di che tipo è il file ?
Ciao ReDiCuori
--
L'informatica è un arte
---------------------------------------------------------
 
www.pascallike.too.it
 il sito sulla programmazione pascal e
 non solo

Il file lo apro con reset e è di tipo text... se mi consigliate di aprirlo
come file of string mi potreste rimandare a qualche articolo su questo
argomento? grazie
"ReDiCuori" <emiliog...@NOSPAMemail.it> ha scritto nel messaggio
news:lGwS8.7789$Jj7.2...@news1.tin.it...


 ha scritto nel messaggio
news:aOBS8.12034$vm5.4...@news2.tin.it...



Usa blockread e blockwrite.... puoi arrivare a spostare fino a blocchi di 64
kb alla volta.
Cooper
PS: Ma..... azz... un carattere alla volta? cmq sia... il problema non è di
dimensione del file... quanto della "capienza" del tipo di dato che usi...
...vale a dire... se usi un integer... arrivi a 32kb o un word a 64k ed è
chiaro che oltre tale range non puoi andare... fai una prova mettendo:
Longint (che è un intero con segno a 32 bit).

ma il file che cerchi di copiare e da' problemi e' di solo testo ?
se non lo fosse, potrebbero esserci delle righe tropppo lunghe
per essere caricate in mem. (cioe' pochi caratteri di ritorno
a capo e distanti nel file): se cosi' fosse ti conviene seguire
il consiglio di Cooper e andare giu' dir block/read/write
--
Dreadnaut
(Life would be easier if I had the source code)

Premetto ke ho il dev-pascal e perciň non posso leggere sull'help
blockread/write... e per questo mi potreste dare > info su queste
procedure?? possono essere usate anke su i filez .txt aperti come puri file
di testo?? grazie


wrote:

no...
la blockread/write  funge solo con i file di tipo binario (: file [of
type]). cmq spero che questo ti possa essere utile:
(PS guarda l'esempio in fondo)
 BlockRead (procedure)
============================================
Reads one or more records into a variable.
 Declaration:
 procedure BlockRead(var F: File; var Buf; Count: Word [; var Result:
    Word]);
where:
   F        untyped file variable
   Buf      any variable
   Count    an expression of type Word
   Result   a variable of type Word
 Target:
Windows, Real, Protected
 Remarks:
F is an untyped file variable, Buf is any variable, Count is an
expression
of type Word, and Result is a variable of type Word.
BlockRead reads Count or fewer records from the file F into memory,
starting
at the first byte occupied by Buf. The actual number of complete
records
 read (less than or equal to Count) is returned in the optional
parameter
Result. If Result is not specified, an I/O error occurs if the number
read
is not equal to Count.
The entire transferred block occupies at most Count symbol * RecSize
bytes,
where RecSize is the record size specified when the file was opened
(or 128
if the record size was not specified). An error occurs if Count symbol
*
RecSize is greater than 65,535 (64K).
Result is an optional parameter. If the entire block was transferred,
Result
will be equal to Count on return. Otherwise, if Result is less than
Count,
the end of the file was reached before the transfer was completed. In
that
case, if the file's record size is greater than 1, Result returns the
number
of complete records read.
The current file position is advanced by Result records as an effect
of
BlockRead.
With {$I-}, IOResult returns 0 if the operation succeeded; otherwise,
it
returns a nonzero error code.
 Restrictions:
File must be open.
 BlockWrite (procedure)
===========================
Writes one or more records from a variable.
 Declaration:
 procedure BlockWrite(var f: File; var Buf; Count: Word [; var Result:
    Word]);
where:
   F        untyped file variable
   Buf      any variable
   Count    an expression of type Word
   Result   a variable of type Word
 Target:
Windows, Real, Protected
 Remarks:
F is an untyped file variable, Buf is any
variable, Count is an expression of type Word,
and Result is a variable of type Word.
BlockWrite writes Count or fewer records to
the file F from memory, starting at the first
byte occupied by Buf. The actual number of
complete records written (less than or equal
to Count) is returned in the optional
parameter Result. If Result is not specified,
an I/O error occurs if the number written is
not equal to Count.
The entire block transferred occupies at most
Count symbol *RecSize bytes, where RecSize is
the record size specified when the file was
opened (or 128 if the record size was
unspecified). An error occurs if Count symbol
*RecSize is greater than 65,535 (64K).
Result is an optional parameter. If the entire
block was transferred, Result will be equal to
Count on return. Otherwise, if Result is less
than Count, the disk became full before the
transfer was completed. In that case, if the
file's record size is greater than 1, Result
returns the number of complete records
written.
The current file position is advanced by
Result records as an effect of the BlockWrite.
With {$I-}, IOResult returns 0 if the
operation succeeded; otherwise, it returns a
nonzero error code.
 Restrictions:
File must be open.
=============== Sample Code=============================
  {Blockrd.PAS}
 {Sample code for the BlockRead and BlockWrite procedures.}
 program CopyFile;
 { Simple, fast file copy program with NO error-checking }
 { For Windows: }
 { uses WinCrt; }
 var
   FromF, ToF: file;
   NumRead, NumWritten: Word;
   Buf: array[1..2048] of Char;
 begin
   Assign(FromF, ParamStr(1)); { Open input file }
   Reset(FromF, 1);  { Record size = 1 }
   Assign(ToF, ParamStr(2)); { Open output file }
   Rewrite(ToF, 1);  { Record size = 1 }
   Writeln('Copying ', FileSize(FromF), ' bytes...');
   repeat
     BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
     BlockWrite(ToF, Buf, NumRead, NumWritten);
   until (NumRead = 0) or (NumWritten <> NumRead);
   Close(FromF);
   Close(ToF);
 end.
Il Razziatore,
The Only Good Windows is an uninstalled Windows
-----------------------------------------------
E-MAILs : IlRazziat...@NOSPAMnetscape.net
WEB     : 
http://www.razziatore.dns2go.com/
ICQ     : 67552596

 argomento? grazie
Ma si può sapere chi ha messo in giro questa stronzata? I file di testo non
si possono aprire come file of string! L'ho già scritto! Ho risposto a
ReDiCuori nel thread "filez": file of string stampa la stringa nel formato
interno, ovvero un byte per stringa[0], la lunghezza,  e poi 255 caratteri
con all'inizio la stringa e gli altri impostati a 0(se la stringa è globale)
o a valori casuali (se non lo è e non viene azzerata l'area di memoria). Un
file di testo si apre come text o come file of char, stop. E si gestisce
manualmente il vai a capo(per chi volesse, avevo iniziato a scrivere un
clone di less anni fa e insieme ad esso una libreria per fare questo.... fa
un po' pena per come è scritta, però meglio di niente)
Nota: l'ho intuito al volo, e poi HO FATTO LA PROVA!
Ciao!
--
Paolo Giarrusso
Per rispondere togliere solo "TOGLIMI" dall'indirizzo, non _spam.