Newsgroup: it.comp.lang.pascal
Titolo: Compressore

Ciao a tutti.
Ho un problema.
Ho un archivio compresso.
Contiene decine di file.
Cerco il modo per poter cancellare (a riga di comando) i file piu'
vecchi di "x" giorni.
Esempio: se usassi arj, avrei archivio.arj
Nel file archivio.arj ho 100 file, di cui 30 piu' vecchi di 10 giorni.
Mi serve una riga di comando che mi cancelli proprio quei file piu'
vecchi di 10 giorni, senza chiedere nulla.
Potete consigliarmi un compressore qualunque (zip, arj, rar, zoo,
ecc...) basta che faccia quello che chiedo?
Con arj sono arrivato a questa conclusione.
ARJ D *.* nomefile.arj -O[aammgg] mi cancella i file da OGGI alla data
[aammgg]
ARJ D *.* nomefile.arj -OB[aammgg] mi cancella i file PRIMA della data
[aammgg]
ARJ D *.* nomefile.arj -OD[numerogiorni] mi cancella i file da OGGI a
quel numero di giorni
Ma porca miseria non esiste il porcesso inverso, cioe' che mi cancelli
i file PRIMA di quei giorni, e nemmeno posso invertire il comando
-OD[numerogiorni]
Potrei passare un parametro, con un file batch, prelevando la data
corrente [DATE] e togliendo un mese (mi basta), e poi passarlo come
parametro %1, ad esempio:
ARJ D *.* nomefile.arj -OB%     ------- dove %1 e' l'elaborazione
della data corrente, con un mese in meno.
Come faccio?
Avete idea?
Mi potete aiutare?
Ripeto: ogni sistema e' buono, basta che faccia quello che chiedo.
Grazie mille in anticipo.
--
----------------------------------------------------------------------
                Hiroshima 45, Chernobyl 86, Windows 98
           Micro$oft: what do you want to reinstall today?®
     Windows 98: se lo conosci lo eviti; se lo conosci non ti uccide.
----------------------------------------------------------------------

Puoi usare questo codice pero' ci sono due problemi:
1. non gestisce gli anni bisestili
2. si limita all'anno in corso (l'anno in cui viene eseguito, non
necessariamente il 2000)
Entrambi i problemi sono risolvibili con poche modifiche (io non ho tempo).
Sintassi: NomeProgramma archivio.arj giorni
es: rimuovi pippo 26
Spiegazione: cancella da pippo.arj (l'estensione di default e' arj) i file
piu' vecchi di 26 giorni.
Ciao.
Simone.
{************ INIZIO CODICE ************}
{$M $4000,0,0 }
uses Dos;
const
     Giorni: array[1..12] of word =
     (0,  31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334);
    { 31  28  31  30  31   30   31   31   30   31   30   31
      Gen Feb Mar Apr Mag  Giu  Lug  Ago  Set  Ott  Nov  Dic }
var
  Programma, Comando: string;
  Archivio          : string;
  gst, mst, ast     : string;
  gg, mm, aa, gs    : Word;
  W                 : word;
  go_back           : integer;
  l                 : word;
  err               : integer;
{
  input   : giorno (gg) e mese (mm)
  output  : giorni trascorsi dall'inizio dell'anno a gg/mm
}
Function Date2W(gg, mm: word): word;
begin
  Date2W := gg+Giorni[mm];
end;
{
  parametri:
    W      : giorni trascorsi dall'inizio dell'anno a gg/mm
    gg, mm : giorno (gg) e mese (mm)
}
Procedure W2Date(W: integer; var gg, mm: word);
var
   l: word;
begin
  if W>0 then
  begin
    l := 12;
    repeat
      dec(l);
    until giorni[l]<W;
    mm := l;
    gg := W-giorni[mm];
  end
     else
     begin
       gg := 1;
       mm := 1;
       writeln('Errore [W2Date]: valore negativo!');
     end;
end;
Procedure Program_Use;
begin
  writeln(#$0D#$0A'Uso: '+Paramstr(0)+' <nome archivio> [giorni]'#$0D#$0A);
  halt;
end;
begin
  Err := -1;
  if Paramcount=0 then Program_Use;
  if Paramcount=2 then Val(Paramstr(2), go_back, err);
  Archivio := ParamStr(1);
  Programma := 'C:\Windows\ARJ.EXE';
  if (Err<>0) or (go_back<0) then go_back := 31; { default = 31 giorni
prima }
  getdate(aa, mm, gg, gs);
  WriteLn('Data attuale: ', gg, '/', mm, '/', aa);
  { converte la data in un numero }
  W := Date2W(gg, mm);
  { calcola la data corrispondente a go_back giorni prima }
  W2Date(W-go_back, gg, mm);
  Write(go_back, ' giorn');
  if go_back=1 then write('o')  { 'giorno' }
               else Write('i'); { 'giorni' }
  WriteLn(' prima : ', gg, '/', mm, '/', aa);
  { converte giorno, mese ed anno in stringa }
  str(gg, gst);
  str(mm, mst);
  str(aa, ast);
  { aggiunge il carattere 0 (zero) se la stringa e'
    composta da 1 solo carattere }
  if gst[0]=#1 then gst := '0'+gst;
  if mst[0]=#1 then mst := '0'+mst;
  { cancella le prime due cifre dell'anno
    es: 1998 -> 98
        1999 -> 99
        2000 -> 00 }
  delete(ast, 1, 2);
  Comando   := 'D '+Archivio+' *.* -OB'+ast+mst+gst;
  writeln('Esecuzione di: '+Programma+' '+Comando+#$0D#$0A);
  SwapVectors;
  Exec(Programma, Comando);
  SwapVectors;
  writeln('Codice riportato: ', DosExitCode);
end.
{************ FINE CODICE ************}
==============================
...e Dio disse: "pkunzip universo.zip"
e-mail: 
drfa...@tiscalinet.it
web: 
http://go.to/drfalken
 (internet
su numero verde, pascal, assembler,
mp3 player, tips'n'tricks)
==============================