homerisorseGuideAppleScriptGuideFile I/O

english

Leggere e scrivere file con AppleScript
Una delle prime operazioni necessarie iniziando a programmare è la lettura di file di testo.
Vediamo ora come fare con AppleScript.

Leggere un file tramite il sottosistema Unix

Il modo più semplice di leggere un file di testo è senz’altro quello di farlo leggere a Unix:

on readFile( unixPath )
return (do shell script "cat '" & unixPath & "'")
end

Chiaramente non è la più elegante delle strade, ma è comunque da tenere in considerazione.
Altri modi, nativi AppleScript, sono i seguenti.

Lettura di un file di testo con AppleScript

La strada principale passa per "open for access":

on readFile( unixPath )
set foo to (open for access (POSIX file unixPath ))
set txt to (read foo for (get eof foo))
close access foo
return txt
end readFile

"open for access" vuole un oggetto file del Finder, che otteniamo tramite l'espressione "POSIX file unixPath".

Questa sintassi funziona perfettamente... ma legge i file di testo nell'encoding "Mac OS Roman", mentre spesso questi testi sono in UTF-8 o UTF-16.

Leggere un file di testo UTF-16:

on readFile( unixPath )
set foo to (open for access (POSIX file unixPath ))
set txt to (read foo for (get eof foo) as Unicode text)
close access foo
return txt
end readFile


Leggere un file di testo UTF-8:

on readFile( unixPath )
set foo to (open for access (POSIX file unixPath ))
set txt to (read foo for (get eof foo) as «class utf8»)
close access foo
return txt
end readFile

Tutte le righe di un file di testo

Una delle cose più semplici:

set listVariable to every paragraph of textVariable

Chiaramente la variabile listVariable non è agganciata al testo, dopo averla manipolata potremo comunque facilmente ricreare il testo unito:

set textVariable to (listVariable) as text

Cerca e Sostituisci

AppleScript non implemente le regular expressions (a meno di aggiungere moduli di linguaggio), ma c’è un modo semplice per effettuare la ricerca e sostituzione di testo statico in una stringa:

display dialog( my searchAndReplace("Ciao mamma", "ma", "no") )

on searchAndReplace( txt, srch, rpl )
set oldtid to AppleScript's text item delimiters
set AppleScript's text item delimiters to {srch}
set temp to every text item of txt
set AppleScript's text item delimiters to {rpl}
set temp to (temp as string)
set AppleScript's text item delimiters to oldtid
return temp
end searchAndReplace

Sembra complicato, in realtà è velocissimo ed estremamente pratico.

To be continued...

...

To be continued...