2012-04-08 23 views
5

Intenté crear un AppleScript que lea un archivo de texto y coloque los contenidos en una lista. El archivo es un archivo de texto simple donde cada línea se ve así: example-"example"Leer el archivo de texto en la lista en Applescript

El primero es un nombre de archivo y el otro es un nombre de carpeta.

Aquí está mi código ahora:

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 

Cuando corro que la salida me sale esto:

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

Mi lista es el siguiente: Game.of.Thrones- "Juego de Tronos "y dos líneas más como esa.

Respuesta

5

El error es que usted está tratando de leer los contenidos de un archivo (el primer archivo se lee) como un archivo. Obtener los párrafos del texto lo dividirá en los límites de retorno/avance de línea, lo que generalmente funciona mejor que tratar de adivinar qué carácter (s) de final de línea se usaron en el archivo.

Usted también no necesita toda la abierta para el acceso cosa cuando sólo leer los archivos, por lo que la secuencia de comandos se puede reducir 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

Todavía sólo lee "Juego .of.Thrones - \ "Game Of" en mi salida, no tengo ningún error ahora. – andeersg

+0

He intentado con el texto: 1text, 2text ... 5text en el archivo de texto ahora. El resultado es 1text, 2text, 3text , 4text, 5. Not 5text – andeersg

+0

El script simplemente obtiene cada línea del archivo (separada por un carácter de nueva línea, como un retorno) y la coloca en una lista - no es th en lo que preguntaste? No estoy seguro de por qué el archivo no se leerá por completo, a menos que no esté utilizando un comando de lectura simple y esté jugando con los delimitadores o la cantidad de caracteres leídos. –

2

read utiliza MacRoman por defecto, por lo que no jumbles hasta Caracteres ASCII en archivos UTF-8 a menos que agregue as «class utf8». (as Unicode text es UTF-16.)

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

paragraphs of también trabaja con CRLF y finales de línea CR. Esto no lo hace, pero no tiene en cuenta la última línea si está vacío:

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

Referencia del lenguaje de AppleScript afirma en la página 120:

Una serie de caracteres que comienza inmediatamente después de que sea el primer carácter después del final de el párrafo anterior o el comienzo del texto y termina con un carácter de retorno de carro (\ r), un carácter de avance de línea (\ n), un par retorno/avance de línea (\ r \ n) o el final del texto. El carácter "separador de párrafo" Unicode (U + 2029) no es compatible.

Así, U + 8232 es ignorado y AppleScript devuelve todo el texto del archivo ...

U + 8232 se utiliza en edición de textos como el carácter CR ...

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

Aunque este código puede responder a la pregunta, proporcionando contexto adicional con respecto a _por qué_ y/o _how_ responde la pregunta mejoraría significativamente su valor a largo plazo . Por favor [edite] su respuesta para agregar alguna explicación. –

Cuestiones relacionadas