Newsgroup: it.comp.macintosh
Titolo: Per esperti di AppleScript

Perch� questo script non funziona (ovvero non mi salva i file convertiti
ma sovrascrive semplicemente l'originale mantenendo il formato AW6)?
set file_convertiti to {}
tell application "Finder"
        set percorso_ricerca to choose folder
        set elenco_cwk to (every file in entire contents of
percorso_ricerca whose ((name extension is "cwk") or ((creator type is
"BOBO") and (name extension is not "rtf"))))
end tell
set num_file to number of items in elenco_cwk
repeat with num_cwk from 1 to number of items in elenco_cwk
 set current_cwk to item num_cwk of elenco_cwk
 set percorso_cwk to item num_cwk of elenco_cwk
 tell application "AppleWorks 6"
  open current_cwk
  set documento_aperto to document 1
  set nome_cwk_convertito to the name of documento_aperto & ".doc"
  save documento_aperto in nome_cwk_convertito as file type "DOC" using
translator "Word Windows 97, 2000, XP 2002"
  close documento_aperto without saving
 end tell
 copy nome_cwk_convertito to the end of file_convertiti
end repeat
get file_convertiti
-- 
Per rispondere, togliere -NOSPAM- dall'indirizzo.

 Perch� questo script non funziona
Ti d� qualche errore?
-- 
Questa, signori miei, � porno-anarchia...

 Ti d� qualche errore?
No. Questo � il risultato su una cartella con un solo file:
tell application "Finder"
        choose folder
                --> alias "MacBook HD:Users:studio:Documents:Lavori
STA:Testi:Preventivi:"
        get every file of entire contents of alias "MacBook
HD:Users:studio:Documents:Lavori STA:Testi:Preventivi:" whose name
extension = "cwk" or creator type = "BOBO" and name extension <> "rtf"
                --> {document file "Ponti andrea - casa.cwk" of folder
"Preventivi" of folder "Testi" of folder "Lavori STA" of folder
"Documents" of folder "studio" of folder "Users" of startup disk}
        open document file "Ponti andrea - casa.cwk" of folder
"Preventivi" of folder "Testi" of folder "Lavori STA" of folder
"Documents" of folder "studio" of folder "Users" of startup disk
end tell
tell application "AppleWorks 6"
        get document 1
                --> document "Ponti andrea - casa.cwk"
        get name of document "Ponti andrea - casa.cwk"
                --> "Ponti andrea - casa.cwk"
        save document "Ponti andrea - casa.cwk" in "Ponti andrea -
casa.cwk.doc" as file type "DOC" using translator "Word Windows 97,
2000, XP 2002"
                --> true
        close document "Ponti andrea - casa.cwk" saving no
                --> false
end tell
Risultato:
{"Ponti andrea - casa.cwk.doc"}


 {"Ponti andrea - casa.cwk.doc"}
Non ho AppleWorks, quindi non ti posso aiutare pi� di tanto. Comunque
giusto per essere sicuri: non � che il file � stato salvato
correttamente con l'estensione .doc, ma l'estensione � nascosta?


 correttamente con l'estensione .doc, ma l'estensione � nascosta?
No :-/


 nome & ".doc"
E probabilmente il problema � qui, visto che lo script sembra funzionare
ma invece di salvare una copia del file in formato Word (ma ho provato
anche RTF, tanto poi li aprirei con Bean o NeoOffice), risalva il file
AppleWorks mantenendone il nome... � come se ignorasse "as file type..."
ed "in..."
Tra l'altro, usando la tua formula ("as" invece di "as file type...") mi
da un errore di sintassi. E purtroppo TextEdit non legge i documenti
AppleWorks.
Comunque su internet ho trovato anche un'altro script che dovrebbe farre
la stessa cosa, un tantino pi� complesso, che per� non funziona neppure
lui, ma sto cercando di capirci qualcosa...


 detto sia DOC) vada senza virgolette: 
Errore AppleScript
La variabile DOC non � definita.
Per il translator, ho provato anche con RTF, che � improbabile che sia
sbagliato... e ho comunque avuto lo stesso risultato: ri-salva il file
in AppleWorks.
Per il resto provo dopo.


 using translator "Word Windows 97, 2000, XP 2002"(?) 
Stesso risultato


 il risultato sar� lo stesso.
Come gi� detto, ho provato anche con RTF... del resto non saprei
dov'altro reperire type e translator: il translator ho preso quello che
viene nel dialogo salva con nome (per RTF � semplivemente RTF)... il
tipo di documento... umh, a dire il vero non ricordo, lo script l'avevo
iniziato un anno fa, ma per RTF immagino che non possa essere molto
diverso da RTF.


In parte hai centrato il discorso: il file type non era corretto. Per�
non risolve il problema. Il problema l'ho risolto esportando ogni volta
l'elenco dei traduttori (che era corretto anche se adesso ne uso
un'altro). Quello che mi manca, � far registrare il nome correttamente,
ovvero togliere l'eventuale estensione di AppleWorks (.cwk) e mettere
l'estensione appropriata (.doc o .xls). Qualcuno mi aiuta?
Lo script � questo:
set file_convertiti to {}
tell application "Finder"
        set percorso_ricerca to choose folder
        set elenco_cwk to (every file in entire contents of
percorso_ricerca whose ((name extension is "cwk") or ((creator type is
"BOBO") and (name extension is not "rtf"))))
end tell
set num_file to number of items in elenco_cwk
repeat with num_cwk from 1 to number of items in elenco_cwk
 set current_cwk to item num_cwk of elenco_cwk
 tell application "AppleWorks 6"
  set traduttori to export translators
  open current_cwk
  set documento_aperto to the name of document 1
  set tipo_documento to the document kind of document 1
  if tipo_documento is text document then
   set nome_cwk_convertito to documento_aperto & ".doc"
   save document 1 in nome_cwk_convertito as file type "W8BN" using
translator "Word Mac 98, 2001 document"
  end if
  if tipo_documento is spreadsheet document then
   set nome_cwk_convertito to documento_aperto & ".xls"
   save document 1 in nome_cwk_convertito as file type "XLS8" using
translator "Excel Mac 98, 2001 spreadsheet"
  end if
  close document 1 without saving


 l'estensione appropriata (.doc o .xls).
Se non ho capito male, l'estensione corretta te la aggiunge, solo che
non toglie il .cwk iniziale. Invece di questo:
set nome_cwk_convertito to the name of documento_aperto & ".doc"
ti ci vuole qualcosa tipo:
set nome_originale to text 1 thru -4 of (name of documento_aperto)
set nome_cwk_convertito to the nome_originale & "doc"


 non toglie il .cwk iniziale. Invece di questo:
Purtroppo non aggiunge neppure l'estensione corretta. Almeno, non lo fa
quando slava il file, visto che sovrascrive l'originale (nel formato
voluto, adesso). Comunque nel risultato riprota il nome con l'aggiunta
dell'estensione. Mo' provo a togliere anche il cwk


Ho modificato lo script, che adesso dovrebbe togliere il ".cwk" (se
c'�), ma continua a salvare i file sovrascrivendo gli originali e
mantenendone il nome. Tra l'altro ho protato il repeat all'interno della
chiamata ad AppleWorks, limitando cos� la stessa ad una sola, come anche
l'eportazione dei traduttori.  Questo � lo script modificato:
set file_convertiti to {}
tell application "Finder"
 set percorso_ricerca to choose folder
 set elenco_cwk to (every file in entire contents of percorso_ricerca
whose ((name extension is "cwk") or ((creator type is "BOBO") and (name
extension is not "rtf"))))
end tell
set num_file to number of items in elenco_cwk
tell application "AppleWorks 6"
 set traduttori to export translators
 repeat with num_cwk from 1 to number of items in elenco_cwk
  set current_cwk to item num_cwk of elenco_cwk
  open current_cwk
  set documento_aperto to the name of document 1
  set tipo_documento to the document kind of document 1
  if documento_aperto ends with ".cwk" then set documento_aperto to text
1 thru -5 of (documento_aperto)
  if tipo_documento is text document then
   set nome_cwk_convertito to documento_aperto & ".doc"
   save document 1 in nome_cwk_convertito as file type "W8BN" using
translator "Word Mac 98, 2001 document"
  end if
  if tipo_documento is spreadsheet document then
   set nome_cwk_convertito to documento_aperto & ".xls"
   save document 1 in nome_cwk_convertito as file type "XLS8" using
translator "Excel Mac 98, 2001 spreadsheet"
  end if
  close document 1 without saving
  copy nome_cwk_convertito to the end of file_convertiti
 end repeat
end tell
get file_convertiti
Il risultato applicato su 3 file � questo:
tell application "Finder"
 choose folder
  --> alias "MacBook HD:Users:studio:Documents:Lavori
STA:Testi:Preventivi:"
 get every file of entire contents of alias "MacBook
HD:Users:studio:Documents:Lavori STA:Testi:Preventivi:" whose name
extension = "cwk" or creator type = "BOBO" and name extension <> "rtf"
  --> {document file "Foglio di calcolo.cwk" of folder "Preventivi" of
folder "Testi" of folder "Lavori STA" of folder "Documents" of folder
"studio" of folder "Users" of startup disk, document file
"Madussi_Castenetto-Nasciva" of folder "Preventivi" of folder "Testi" of
folder "Lavori STA" of folder "Documents" of folder "studio" of folder
"Users" of startup disk, document file "Noro_Simeoni.cwk" of folder
"Preventivi" of folder "Testi" of folder "Lavori STA" of folder
"Documents" of folder "studio" of folder "Users" of startup disk}
end tell
tell application "AppleWorks 6"
 get export translators
  --> {"Excel Mac 5 spreadsheet", "Excel Mac 98, 2001 spreadsheet",
"Excel Win 5 spreadsheet", "Excel Win 97, 2000, XP 2002 spr", "HTML",
"RTF", "Testo ", "Testo ASCII", "Word Mac 6 document", "Word Mac 98,
2001 document", "Word Windows 6, 95 document", "Word Windows 97, 2000,
XP 2002 "}
end tell
tell application "Finder"
 open document file "Foglio di calcolo.cwk" of folder "Preventivi" of
folder "Testi" of folder "Lavori STA" of folder "Documents" of folder
"studio" of folder "Users" of startup disk
end tell
tell application "AppleWorks 6"
 get name of document 1
  --> "Foglio di calcolo.cwk"
 get document kind of document 1
  --> spreadsheet document
 save document 1 in "Foglio di calcolo.xls" as file type "XLS8" using
translator "Excel Mac 98, 2001 spreadsheet"
  --> true
 close document 1 saving no
  --> false
end tell
tell application "Finder"
 open document file "Madussi_Castenetto-Nasciva" of folder "Preventivi"
of folder "Testi" of folder "Lavori STA" of folder "Documents" of folder
"studio" of folder "Users" of startup disk
end tell
tell application "AppleWorks 6"
 get name of document 1
  --> "Madussi_Castenetto-Nasciva"
 get document kind of document 1
  --> text document
 save document 1 in "Madussi_Castenetto-Nasciva.doc" as file type "W8BN"
using translator "Word Mac 98, 2001 document"
  --> true
 close document 1 saving no
  --> false
end tell
tell application "Finder"
 open document file "Noro_Simeoni.cwk" of folder "Preventivi" of folder
"Testi" of folder "Lavori STA" of folder "Documents" of folder "studio"
of folder "Users" of startup disk
end tell
tell application "AppleWorks 6"
 get name of document 1
  --> "Noro_Simeoni.cwk"
 get document kind of document 1
  --> text document
 save document 1 in "Noro_Simeoni.doc" as file type "W8BN" using
translator "Word Mac 98, 2001 document"
  --> true
 close document 1 saving no
  --> false
end tell
Risultato:
{"Foglio di calcolo.xls", "Madussi_Castenetto-Nasciva.doc",
"Noro_Simeoni.doc"}

 voluto, adesso).
P.S. Mi sa che AppleScript � bacato :-/


 P.S. Mi sa che AppleScript � bacato :-/
Ho risolto anche questo problema modificando lo script come segue:
set file_convertiti to {}
tell application "Finder"
 set percorso_ricerca to choose folder
 set elenco_cwk to (every file in entire contents of percorso_ricerca
whose ((name extension is "cwk") or ((creator type is "BOBO") and (name
extension is not "rtf"))))
end tell
set num_file to number of items in elenco_cwk
tell application "AppleWorks 6"
 set traduttori to export translators
 repeat with num_cwk from 1 to number of items in elenco_cwk
  set current_cwk to item num_cwk of elenco_cwk
  open current_cwk
  set documento_aperto to the name of document 1
  set tipo_documento to the document kind of document 1
  if documento_aperto ends with ".cwk" then set documento_aperto to text
1 thru -5 of (documento_aperto)
  if tipo_documento is text document then
   set nome_cwk_convertito to documento_aperto & ".doc"
   save document 1 as file type "W8BN" using translator "Word Mac 98,
2001 document"
  end if
  if tipo_documento is spreadsheet document then
   set nome_cwk_convertito to documento_aperto & ".xls"
   save document 1 as file type "XLS8" using translator "Excel Mac 98,
2001 spreadsheet"
  end if
  close document 1 without saving
  set name of current_cwk to nome_cwk_convertito
  copy nome_cwk_convertito to the end of file_convertiti
 end repeat
end tell
get file_convertiti
Il problema adesso � che se lo script incontra un file danneggiato che
non pu� aprire, si interrompe e segnala l'errore. C'� un modo per dirgli
di ignorare l'errore, ovvero passare al file successivo?


 di ignorare l'errore, ovvero passare al file successivo?
Racchiudi la parte di script che manipola i file all'interno di un try -
end try. 
-- 
@NewsTap

 end try. 
Allora, sulle cartelle di prova lo script funziona (non come vorrei, ma
funziona), ma applicandolo ad una cartella di file in lavoro, � nato
un'altro problema. In pratica capita che AppleWorks si chiuda
inaspettatamente, e lo script termina. Il non come vorrei, riguarda
anche il metodo che ho dovuto adottare avere una copia di backup del
file originale: io avrei voluto mantenere l'originale "as it is" e
mettergli vicino il doc/xls, ma a quanto pare non c'� verso a far
salvare una copia ad AppleWorks... pazienza.
Per� per far ripartire AppleWorks dal punto che si era interrotto, senza
riprocessare i file copia, come si potrebbe fare?
Questo � lo script attuale:
set file_convertiti to {}
tell application "Finder"
set percorso_ricerca to choose folder
set elenco_cwk to (every file in entire contents of percorso_ricerca
whose ((name extension is "cwk") or ((creator type is "BOBO") and (name
extension is not "rtf"))))
end tell
set num_file to number of items in elenco_cwk
set AppleWorks_status to ""
tell application "AppleWorks 6"
get export translators
repeat with num_cwk from 1 to number of items in elenco_cwk
set nome_cwk_convertito to ""
set documento_aperto to ""
set current_cwk to item num_cwk of elenco_cwk
try
open current_cwk
set AppleWorks_status to "open"
set documento_aperto to the name of document 1
end try
if documento_aperto <> "" then
set tipo_documento to the document kind of document 1
if documento_aperto ends with ".cwk" then set documento_aperto to text 1
thru -5 of (documento_aperto)
if tipo_documento is text document then
tell application "Finder" to duplicate current_cwk
set nome_cwk_convertito to documento_aperto & ".doc"
set name of document 1 to nome_cwk_convertito
save document 1 as file type "W8BN" using translator "Word Mac 98, 2001
document"
end if
if tipo_documento is spreadsheet document then
tell application "Finder" to duplicate current_cwk
set nome_cwk_convertito to documento_aperto & ".xls"
set name of document 1 to nome_cwk_convertito
save document 1 as file type "XLS8" using translator "Excel Mac 98, 2001
spreadsheet"
end if
close document 1 without saving
end if
copy nome_cwk_convertito to the end of file_convertiti
end repeat
quit
end tell
get file_convertiti


 riprocessare i file copia, come si potrebbe fare?
Potresti fare in modo che i file correttamente elaborati vengano
spostati in un'altra cartella. Se AW si pianta, quando rilanci lo script
sulla stessa cartella di prima, ci saranno solo i file ancora da
convertire.
