Newsgroup: it.comp.os.os2
Titolo: Rinominare piu' file?

Ciao a tutti...
Tra le altre cose, anche per quanto riguarda NLVR, ora mi serve un
aiuto dagli altri programmatori del gruppo.
La situazione e` questa: mi trovo con una directory piena di file,
con nomi del tipo milian00xxxx, dove xxxx e` un quartetto di cifre
decimali crescente, ma in modo discontinuo (tipo parte da 43, arriva
a 71 e poi riparte da 305 e cosi` via).
A me pero` interessa rinominare tutti questi file in modo crescente
e continuo, tipo da 1000000.jpg in via a passi di uno, in modo che
ffmpeg possa trasformare questa sequenza di file in un video vero
e proprio.
In NLVR la funzione servira` quando, in sede di editing, i file
verranno modificati, aggiunti e/o cancellati, cosi` da avere sempre 
un elenco di file coerente. Il problema e` che allo stato attuale
non ho bene idea di come fare. Ho provato con uno script REXX chiaman-
do i comandi if exist e rename, ma non riesco proprio a far fare i
confronti tra nomi di file.
Idee?
Grazie...
-- 
Mentore Siesto
Team OS/2 Italia

 wrote:
ciao Mentore

mi sembra una cosa abbastanza semplice, ma mi devi dara qualche
dettaglio in +
-1) nonostante ci siano dei vuoti nella progressione i file sono
    comunque gia' nell'ordine giusto ?
-2) la parte numerica e' sempre di quattro cifre ed Š alla fine ?
-3) la parte alfabetica e' sempre uguale per tutti i file ?
se qyeste condizioni sono vere e vuoi usare il REXX puoi semplicemente
scaricare da hobbes, se gia' non lo hai il file rxtt*.zip che e' una
collezione di trucchetti e codice sorgente per il REXX
allora ti leggi prima con SysFileTree() l'elenco dei file che
cominciano con milian*
copy dal rxtt* una routine di ordinamento e ordini lo stem in cui
hai l'elenco dei file
poi con un loop do i = 1 to files.0 ti rinomini i file in ordine
crescente puoi usare rename o SysSetObjectData se ti interessa
aggiornare i file nella cartella, pero' ho l'impressione che
SysSetObjectData() crei comunque degli handle dei file che maneggia
in OS2SYS.INI per cui, se non devi aprire i file manualmente sarebbe
meglio usare rename
do i = 1 to files.0
   call SysSetObjectData files.i, "TITLE="right(i, 8, 0)".jpg;";
end
oppure
do i = 1 to files.0
   "@ren "files.i right(i, 8, 0)".jpg;";
end
--
bye
Alessandro Cantatore
email reply to: acantatore (at: 
tin.it
)

 wrote in message news:<jgv4KfdYewvS-pn2-ZdKKBUKoBf3w@localhost>...

forse queste librerie possono aiutarti:
http://hobbes.nmsu.edu/pub/os2/dev/rexx/filerx11.zip
http://hobbes.nmsu.edu/pub/os2/dev/rexx/pyrxutil_20030903_en.zip
perche' invece di salvare i files, non passi tutto in pasto alle pipe?
max

 wrote:
 >
 >ciao Mentore
 >
 > >Tra le altre cose, anche per quanto riguarda NLVR, ora mi serve un
 > >aiuto dagli altri programmatori del gruppo.
 > >
 >mi sembra una cosa abbastanza semplice, ma mi devi dara qualche
 >dettaglio in +
 >
 >-1) nonostante ci siano dei vuoti nella progressione i file sono
 >    comunque gia' nell'ordine giusto ?
Si' senor :-)
 >-2) la parte numerica e' sempre di quattro cifre ed Š alla fine ?
 >-3) la parte alfabetica e' sempre uguale per tutti i file ?
La parte alfabetica e' sempre la stessa. La parte numeroca ha un numero di
cifre costante (si tratta di un video scaricato come sequenza di jpeg,
fatto con xawtv. Non e' un gran che, ma per ora e' l'unica cosa che mi
funzioni, fino a nlvr :-((()
 >se qyeste condizioni sono vere e vuoi usare il REXX puoi semplicemente
 >scaricare da hobbes, se gia' non lo hai il file rxtt*.zip che e' una
 >collezione di trucchetti e codice sorgente per il REXX
 >
 >allora ti leggi prima con SysFileTree() l'elenco dei file che
 >cominciano con milian*
 >copy dal rxtt* una routine di ordinamento e ordini lo stem in cui
 >hai l'elenco dei file
 >poi con un loop do i = 1 to files.0 ti rinomini i file in ordine
 >crescente puoi usare rename o SysSetObjectData se ti interessa
 >aggiornare i file nella cartella, pero' ho l'impressione che
 >SysSetObjectData() crei comunque degli handle dei file che maneggia
 >in OS2SYS.INI per cui, se non devi aprire i file manualmente sarebbe
 >meglio usare rename
 >
 >do i = 1 to files.0
 >   call SysSetObjectData files.i, "TITLE="right(i, 8, 0)".jpg;";
 >end
 >
 >oppure
 >
 >do i = 1 to files.0
 >   "@ren "files.i right(i, 8, 0)".jpg;";
 >end
 >
Argh, meno male che era facile :-)))
Grazie, Antonio, te ne devo una.


 wrote:
 > >do i = 1 to files.0
 > >   "@ren "files.i right(i, 8, 0)".jpg;";
 > >end
 > >
 >
 >Argh, meno male che era facile :-)))
vuoi la pappa pronta, il bavaglino e qualcuno che ti imbocchi ? :-)))
ecco qua:
/* --------------------------------------------------------------------------
 RENSORTD.CMD
 - crea una lista di file rispondenti a determinate specifiche
 - ordina la lista
 - rinomina i file con un numero crescente (00000001.ext - 99999999.ext)
 Uso:
 RENSORTD <filespec> [start]
 Dove
 filespec  : sono le specifiche dei file che devono fare parte della lista
 start     : Š un numero rappresentante il nome di partenza dei file rinominati
             (se non viene specificato viene assunto il valore di 1)
 esempi:
 RENSORTD C:\DOWNLOAD\MYMOOVIE*.JPG
    rinomina tutti i file JPG che iniziano con MYMOOVIE in ordine crescente a
       partire da 00000001
 RENSORTD C:\DOWNLOAD\MYMOOVIE*.JPG 1000
    rinomina tutti i file JPG che iniziano con MYMOOVIE in ordine crescente a
       partire da 00001000
*/
"@echo off"
parse arg filesp start
files.0 = 0;
if (\init()) then
   exit
if (\createFileList(filesp)) then
   exit
call sortList 1, files.0
call renameList start
exit
/* ----------------------------------------------------------------------- */
init: procedure expose filesp start
   /* controlla la validita' degli argomenti */
   if (filesp = "") then
      do
         call helpText
         return 0
      end /* do */
   if (start = "") then
      start = 1;
   else
      do
         if ("NUM" \= datatype(start))  then
            do
               say " argomento non valido : "start" ."
               call helpText
               return 0
            end /* do */
      end /* do */
   /* carica la libreria REXXUTIL */
   call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
   call SysLoadFuncs
   return 1
/* ----------------------------------------------------------------------- */
helpText: procedure
   do i = 2 to 17
      say sourceline(i);
   end /* do */
   return;
/* ----------------------------------------------------------------------- */
createFileList: procedure expose files.
   parse arg filesp
   if (0 \= SysFileTree(filesp, "files.", "FO")) then
      do
         say " errore esecuzione SysFileTree()."
         return 0;
      end /* do */
   if (files.0 = 0) then
      do
         say " nessun file rispondente alle specifiche:"
         say " "filesp
         say " e' stato trovato."
         return 0;
      end /* do */
   return 1;
/* ----------------------------------------------------------------------- */
sortList: procedure expose files.
/* ------------------------------------------------------------------ */
/* function: quick sort routine                                       */
/*                                                                    */
/* call:     QuickSort first_element, last_element                    */
/*                                                                    */
/* returns:  nothing                                                  */
/*                                                                    */
/* notes:    You must save the elements to sort in the stem "files."  */
/*           a.0 must contain the number of elements in the stem.     */
/*                                                                    */
/*                                                                    */
/* qqsort: procedure expose a.                                        */
   arg lf, re
   if re -lf < 9 then
      do lf = lf to re -1
         m = lf
         do j = lf +1 to re
            if files.j << files.m then                       /* v2.80 */
               m = j
         end /* j = lf +1 to re */
         t = files.m; files.m = files.lf; files.lf = t
      end /* lf = lf to re -1 */
   else
      do
         i = lf
         j = re
         k = (lf + re)%2
         t = files.k
         do until i > j
            do while files.i << t                            /* v2.80 */
               i = i + 1
            end /* while files.i << t */
            do while files.j >> t                            /* v2.80 */
               j = j - 1
            end /* while files.j >> t */
            if i <= j then
               do
                  xchg = files.i
                  files.i = files.j
                  files.j = xchg
                  i = i + 1
                  j = j - 1
               end /* if i <= j then */
         end /* until i > j */
         call sortList lf, j
         call sortList i, re
      end /* else */
   return
/* ----------------------------------------------------------------------- */
renameList: procedure expose files.
   parse arg start
   do i = 1 to files.0
      "ren "files.i right(i + start - 1, 8, 0)""getExtension(files.i);
   end /* do */
   return
/* ----------------------------------------------------------------------- */
getExtension: procedure
   parse arg filename
   posExt = lastpos(".", filename);
   if posExt = 0 then
      return ""
   return substr(filename, posExt);
/* ----------------------------------------------------------------------- */


 wrote:
 >
 > > >do i = 1 to files.0
 > > >   "@ren "files.i right(i, 8, 0)".jpg;";
 > > >end
 > > >
 > >
 > >Argh, meno male che era facile :-)))
 >
 >vuoi la pappa pronta, il bavaglino e qualcuno che ti imbocchi ? :-)))
 >ecco qua:
MA NO, non dovevi proprio... Accidenti, quanto codice ti ho fatto scrivere
:-( sono quasi commosso...
Beh grazie... Prometto che appena posso lo converto in C e lo includo in
nlvr :-))
-- 
Mentore Siesto
Team Os/2 Italia

 wrote:
 > > >Argh, meno male che era facile :-)))
 > >
 > >vuoi la pappa pronta, il bavaglino e qualcuno che ti imbocchi ? :-)))
 > >ecco qua:
 >
 >MA NO, non dovevi proprio... Accidenti, quanto codice ti ho fatto scrivere
 >:-( sono quasi commosso...
 >Beh grazie... Prometto che appena posso lo converto in C e lo includo in
 >nlvr :-))
se me lo avessi detto lo avrei fatto direttamente in C...


 wrote:
 >
 > > > >Argh, meno male che era facile :-)))
 > > >
 > > >vuoi la pappa pronta, il bavaglino e qualcuno che ti imbocchi ? :-)))
 > > >ecco qua:
 > >
 > >MA NO, non dovevi proprio... Accidenti, quanto codice ti ho fatto scrivere
 > >:-( sono quasi commosso...
 > >Beh grazie... Prometto che appena posso lo converto in C e lo includo in
 > >nlvr :-))
 >
 >se me lo avessi detto lo avrei fatto direttamente in C...
Lascia stare... Gia' devo erigerti un monumento per quanto hai scritto in
rexx :-) Non preoccuparti, tanto ci pensero' io al momento opportuno.
