Newsgroup: it.comp.macintosh
Titolo: Liste in AS

Come ho accennato in un thread piu' o meno serio con Tiziana, stavo
cercando di fare, in AppleScript, delle liste che contenevano altre
liste. In particolare una lista contente una serie di liste con due
elementi tipo hash: chiave=>valore.
Ci sono riuscito e le posso dipanare, pero'..
Se il valore, nella coppia, e' una stringa con dei return incorporati
(quindi di piu' righe), AS mi dice che il secondo elemento della lista
(set xxx to item 2 of...) non esiste.
Il manuale che ho (pure vecchio...) non dice nulla su un elemento di
lista fatto da piu' righe.
A latere... come posso inserire, in una stringa, un carattere non
stampabile? Volevo mettere, al posto di return, il carattere 0B
(esadecimale), cioe' ctrl-k (AKA VT).
Anche questo non c'e sul manuale (a meno che non sia ben nascosto...)
Se poi uno e' curioso ;-), spiego che tutto questo e' finalizzato ad
inserire dei "valori" in un campo "chiave" di FMPro...
La routine di inserimento (la cui lista di liste e' l'argomento della
chiamata) e' fatta in modo da essere generica.
Ciao,
-- 
      Ermanno Polli   (INFN-LNF)
    user:      hostname:  subdomain:  domain:  country:
ermanno.polli    N/A        lnf         infn     it

 cerchero' un'altra donna dentro ai sogni di Tarzan...

set the end of mialista to (...) as string
--


 > cerchero' un'altra donna dentro ai sogni di Tarzan...
..e l'altro problema, quello di un elemento di lista multi-riga? ;-)
Se non risolvo con 0D (provero' anche 0A), questo problema e'
insormontabile..


..e l'altro problema, quello di un elemento di lista multi-riga? ;-)
set item i of mialista to "f dfasdf
sdf asdfsdfas
df asdfasdfs
fasdfas f"


 > cerchero' un'altra donna dentro ai sogni di Tarzan...
Il problema sembra risolto. Non so come, ma dovrebbe entrarci un errore
da parte mia. :-(
Ho utilizzato il "default delimiters" dell'AS, modificandolo (cambiato
in ":") e resettandolo al valore iniziale (",") subito dopo l'uso . A
forza di fare prove mi sono dimenticato un reset :-(, col risultato che
il separatore di liste non era quello che mi aspettavo. Se questo abbia
come effetto secondario di eliminare tutte le righe (terminate con lo
standard "return"), non lo so. Sta di fatto che ora ho un elemento di
lista con i "return" e me lo ritrovo identico nel campo di FMPro.
Anche le liste restano un po' misteriose, per me. Ho giocato con varie
combinazioni di "{" e "}" e di "as list", prima di riuscire a fare cio'
che volevo.
Pensa che per estrarre il resto della lista dopo il primo elemento, ho
dovuto mettere "item 2 thru last item" perche' "rest" non funzionava...
Boh??
Sara' per via della modifica del separatore di lista?
Lo Script editor e' una frana come ambiente di lavoro. Se faccio "log
xxx" con xxx che e' una lista, mi vedo solo i caratteri e non so se e'
una lista, una lista annidata o una semplice stringa...
Poi cio' che compare nella finestra degli eventi, ad un certo punto mi
si incasina (dopo 32KBy di testo???) e la visualizzazione mi balla tutta
:-(( come se ad ogni "log xxx" mi facesse il refresh totale della
finestra, invece di scrollare...
Vabbe'.. Ora ho altri guai, ma le liste sembrano a posto..
apropos.. Hai un esempio di error handler che visualizzi tutti i campi
dell' "on error..."? In particolare, visualizzare il riferimento
all'oggetto che ha dato errore... (ref of..  non funziona)
A scanso dubbi.. visualizzare -> trasformare in stringa stampabile con
"log", "display dialog" e affini.
Grazie e ciao,


all'oggetto che ha dato errore... (ref of..  non funziona)
try
  -- stuff
on error pippo
  display dialog pippo
end try
Cosi' ti dice l'errore.


 > cerchero' un'altra donna dentro ai sogni di Tarzan...
Mah, comunque piu' o meno mi funziona... Oggi non vado a casa e quindi
non posso provare niente. Sara' per domani sera..
Ciao e grazie.


riprendere dalla routine che chiama quella che da' errore?
try
 - ...
on error
  return
end try


 > cerchero' un'altra donna dentro ai sogni di Tarzan...
Ciao,


un'altra lista. Mi viene fuori, quello che hai visto sopra.
Ho capito, vuoi, dato il path, derivare l'hd dal path... Questo script
ti torna tre elementi (hd, path e name):
on splittapath(myFile)
  set oldtid to AppleScript's text item delimiters
  set AppleScript's text item delimiters to ":"
  set myList to every text item of myFile
  if the number of items of myList is greater than 2 then  
    set myPath to (item 2 thru -2 of myList) as text
  else
    set myPath to ""
  end if
  set AppleScript's text item delimiters to oldtid
  set myDisk to the first item of myList
  set myName to the last item of myList
  return { myDisk, myPath, myName }
end splittapath


 (gia' aperto l'editor e provato..)
Qui c'e` un problema di comunicazione da parte di Apple: hai ragione tu,
non ti fare impressionare da Marco Balestra... ;-)... 
La Applescript Language Guide ti parla di molte cose utili (*), ma come
comandi parla solo dei comandi di Applescript in senso stretto (molto,
molto stretto). I comandi "ascii character", "ascii number" e "offset"
non sono a rigore, dei comandi di Applescript in senso stretto, ma dei
comandi della osax "String Commands"... e come tale sono documentati da
Apple ma non in ALG, bensi` in quell'altro manuale, quello che si
intitola "Scripting Additions Guide" o robe simili.
(In realta` si parla di offset anche in ALG, ma solo il minimo
necessario per comprendere gli esempi).
Se vuoi ti posso spiegare come fare per compilare un file di testo che
comprende i dizionari di tutte le tue scripting addition, cosi` hai un
colpo d'occhio delle osax che hai e quando hai bisogno di qualcosa fai
un "cerca" in quel testo, non stai ad aprire i dizionari uno ad uno.
(*) sto scherzando naturalmente. ALG e` utile consultarla quando
qualcosa non funziona, ma non serve per imparare... la metafora utile e`
quella di un libro che spiega come funziona il motore dell'automobile...
per imparare a guidare la macchina non devi cominciare da li`, ma da:
freno, frizione, acceleratore, ecc...
-- 
Ciao,        \+----------+     "Una vita senza osaxen
   Vittorio --| : )    o |        sarebbe un errore"
             /+----------+  - = 
http://fly.to/risorse/
 = -

 ti torna tre elementi (hd, path e name):
Veramente non e' il path, ma il delimiter e' quello...
[nuovo esempio-snip]
Caz... ! Questo e' piu' elegante di quello che ho fatto io! Peccato che,
per motivi familiari, :-(( ieri sera ho deciso di mollare tutto :-((
Ti sono molto grato per tutti i consigli che mi hai dato e mi dispaice
che sia finita cosi' ma..
Adesso vado a rispondere a Vittorio Barabino..
[sig-snip]
Grazie tanto,
-- 
      Ermanno Polli   (INFN-LNF)
    user:      hostname:  subdomain:  domain:  country:
ermanno.polli    N/A        lnf         infn     it
P.S.: *non* ti sposare...

 freno, frizione, acceleratore, ecc...
Io questa roba l'ho imparata col Fortran ;-)
Comunque, suppongo che il discorso AS, per me ed a casa, sia chiuso,
ora..
Grazie anche a te,


P.S.: *non* ti sposare...


P.S.: *non* ti sposare...
sorry... a giugno 2000, nel decimo anniversario di convivenza,
intraprendero' questo passo (decisamente poco avventato ;-))


 intraprendero' questo passo (decisamente poco avventato ;-))
Beh, se la "dolce" meta' e' appassionata di computer, forse (ma proprio
forse, eh..) non ci sono  problemi.. Se invece li odia, anche se non lo
dice, allora...


 
Guidare il trattore e` un po' diverso dal pedalo`... :-/
[Lo script]
Scrive in una finestra tutti i dizionari delle scripting additions 
installate.
Per far andare questo script serve lo script editor alternativo, Smile
(senza nessun limite di 32k), che trovate su info-Mac:
http://hyperarchive.lcs.mit.edu/cgi-bin/NewSearch?key=smile
----
tell application "Smile"
activate
do menu 11 to application "Smile"
set visible of window 1 to true
repeat with theOsax in (list folder (path to ¬
scripting additions folder))
try
tell application "Finder"
set theFile to file ("" & (path to ¬
scripting additions folder) & theOsax)
set theName to the name of theFile
set theVersion to the product version of theFile
end tell
set end of text of window 1 to theName & return
set text size of last line of window 1 to 24
set text color of last line of window 1 to {65535, 30069, 6168}
set style of last line of window 1 to {on styles:{bold}}
set end of text of window 1 to theVersion & return
set text size of last line of window 1 to 18
set text color of last line of window 1 to {48830, 33924, 19018}
set style of last line of window 1 to {on styles:{bold}}
--lo so che non e` bello, ma a fare diversamente non va.
set end of text of window 1 to (get dictionary of ¬
file ("" & (path to scripting additions folder) & theOsax))
on error
end try
end repeat
end tell
beep 2
----
-- 
Ciao,        \+----------+  "La risposta e ` dentro di te...
   Vittorio --| : )    o |      ...MA E` SBAGLIATA!!!"


se riuscisse fare lo stesso col perl.
Allora puoi impressionarti :-)))
Il Perl e' piu' rigoroso, ma molto piu' prevedibile (essendo a + basso
livello).


 
http://hyperarchive.lcs.mit.edu/cgi-bin/NewSearch?key=smile
Ho un server anonymous dietro l'angolo, a Tor Vergata...
[script-snip]
Ok, grazie.
