2012-04-08 11 views
5

Ho provato a creare un AppleScript che legge un file di testo e inserisce il contenuto in un elenco. Il file è un semplice file di testo in cui ogni riga è simile a questa: example-"example"Leggi file di testo in elenco in Applescript

Il primo è un nome file e l'altro è un nome di cartella.

Ecco il mio codice ora:

set listOfShows to {} 
set theFile to readFile("/Users/anders/Desktop/test.txt") 
set Shows to read theFile using delimiter return 
repeat with nextLine in Shows 
    if length of nextLine is greater than 0 then 
     copy nextLine to the end of listOfShows 
    end if 
end repeat 
choose from list listOfShows 


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 

Quando eseguo che l'uscita ottengo questo:

error "Can not change \"Game.of.Thrones-\\\"Game Of \" to type file." number -1700 from "Game.of.Thrones-\"Game Of " to file" 

Mia lista simile a questa: Game.of.Thrones- "Game of Thrones "e altre due righe come questa.

risposta

5

L'errore è che si sta tentando di leggere i contenuti di un file (il primo file si legge) come un file. Ottenere il paragrafi di testo di testo lo spezzerà ai limiti di ritorno/linefeed, il che di solito funziona meglio che cercare di indovinare quali caratteri di fine riga sono stati usati nel file.

Inoltre non è necessario l'intero aperto per l'accesso cosa quando solo la lettura dei file, in modo dallo script può essere ridotto a solo

set listOfShows to {} 
set Shows to paragraphs of (read POSIX file "/Users/anders/Desktop/test.txt") 
repeat with nextLine in Shows 
    if length of nextLine is greater than 0 then 
     copy nextLine to the end of listOfShows 
    end if 
end repeat 
choose from list listOfShows 
+0

Si legge ancora solo "Game .of.Thrones - \ "Game Of" nella mia uscita, non ho alcun errore ora. – andeersg

+0

Ho provato con il testo: 1text, 2text ... 5text nel file di testo ora. Il risultato è 1text, 2text, 3text , 4text, 5. Not 5text – andeersg

+0

Lo script recupera ogni riga del file (separata da un carattere di nuova riga come un ritorno) e la inserisce in una lista - non è a cosa hai chiesto? Non sei sicuro del motivo per cui il file non verrà letto completamente, a meno che tu non stia usando un comando di lettura normale e stai giocando con i delimitatori o il numero di caratteri letti. –

2

read utilizza MacRoman per impostazione predefinita, in modo che jumbles up non Caratteri ASCII nei file UTF-8 a meno che non si aggiunga as «class utf8». (as Unicode text è UTF-16.)

paragraphs of (read POSIX file "/tmp/test.txt") as «class utf8» 

paragraphs of funziona anche con CRLF e terminatori di linea CR. Questo non lo fa, ma ignora l'ultima riga se è vuota:

read POSIX file "/tmp/test.txt" as «class utf8» using delimiter linefeed 
0

di AppleScript Language Reference afferma a pagina 120:

una serie di caratteri che inizia immediatamente dopo sia il primo carattere dopo la fine della il paragrafo precedente o l'inizio del testo e che termina con un carattere di ritorno a capo (\ r), un carattere di avanzamento riga (\ n), una coppia ritorno/avanzamento riga (\ r \ n) o la fine del testo. Il carattere "separatore di paragrafo" Unicode (U + 2029) non è supportato.

Così, U + 8232 viene ignorato e AppleScript restituisce l'intero testo dal file ...

U + 8232 viene utilizzato in TextEdit come il carattere CR ...

1
set milefile to ((path to desktop as text) & "Alert.txt") 
set theFileContents to (read file milefile) 
display dialog theFileContents 
+0

Sebbene questo codice possa rispondere alla domanda, fornendo il contesto aggiuntivo per _why_ e/o _how_ risponde allo la domanda migliorerebbe significativamente il suo valore a lungo termine . Per favore [modifica] la tua risposta per aggiungere qualche spiegazione. –