2010-09-23 33 views

Respuesta

20
on write_to_file(this_data, target_file, append_data) -- (string, file path as string, boolean) 
    try 
     set the target_file to the target_file as text 
     set the open_target_file to ¬ 
      open for access file target_file with write permission 
     if append_data is false then ¬ 
      set eof of the open_target_file to 0 
     write this_data to the open_target_file starting at eof 
     close access the open_target_file 
     return true 
    on error 
     try 
      close access file target_file 
     end try 
     return false 
    end try 
end write_to_file 

Interfaz con que se puede limpiar con la siguiente ...

my WriteLog("Once upon a time in Silicon Valley...") 

on WriteLog(the_text) 
    set this_story to the_text 
    set this_file to (((path to desktop folder) as text) & "MY STORY") 
    my write_to_file(this_story, this_file, true) 
end WriteLog 
+1

Encontré que esta versión no puede escribir caracteres que no sean ASCII en archivos de texto. ¿Hay una versión compatible con UTF-8 de este código? Los caracteres que no son ASCII aparecen como ?? en los archivos de texto resultantes. – kakyo

+0

Esta es una buena solución para el archivo IO, la complejidad se debe a que el archivo IO refleja las llamadas en MacOS clásico, por ejemplo, las antiguas llamadas 'FSRead'' FSWrite' del Administrador de archivos. Necesita tener un 'FSRef' para el archivo que abre y luego configure el EOF para borrar el archivo antes de comenzar a escribir. –

7

También he aprendido que un corte rápido, si uno sólo quiere escupir un poco de texto en un archivo , es usar el caparazón.

do shell script "echo TEXT > some_file.txt" 
+2

Por favor vea mi respuesta relacionada con esto. – markhunte

3

Para mí correr do shell script era demasiado lento en un PowerBook G4 cuando se ejecuta en un bucle 300000 veces;), pero por supuesto que es más rápido para escribir lo que a veces tiene sentido. También se quiere escapar caracteres de concha como este:

do shell script "eco" & forma citada de foobar & ">> some_file.txt"

y por razones estéticas, lo usaría

dicen yo para hacer el script de shell "# ..."

pero no he verificado aún (lo que creo) que si "do shell script" está en un bloque de "tell Finder", por ejemplo, es el proceso Finder que crea una subcamada Con "dime que haga script de shell", al menos el registro del Editor de scripts se ve mejor para mí. ;)

7

Una versión corta de puro AppleScript:

set myFile to open for access (choose file name) with write permission 
write "hello world" to myFile 
close access myFile 

Parece que no hay solución un comando nativo. En su lugar, debe abrir y luego cerrar el archivo.

+0

Creo que esto no funciona como se esperaba si el archivo ya existe y fue más largo que lo que se está escribiendo ahora; luego, los datos antiguos permanecen en el archivo. para resolver esto, primero debe borrar los contenidos con 'set eof of myFile to 0' como se muestra en la respuesta aceptada –

7

@JuanANavarro.

Al utilizar el shell debe usar el formulario citado de para el TEXTO y la ruta del archivo. Esto ayudará a detener errores con espacios en nombres de archivos y caracteres como apóstrofes en el texto, por ejemplo.

set someText to "I've also learned that a quick hack, if one only wants to spit a bit of text to a file, is to use the shell." 

set textFile to "/Users/USERNAME/Desktop/foo.txt" 
do shell script "echo " & quoted form of someText & " > " & quoted form of textFile 

La secuencia de comandos anterior funciona bien.


Si no lo tienen & forma citada de someText

sino que tuve & someText me gustaría tener el siguiente error.

error "sh: -c: line 0: unexpected EOF while looking for matching `''

sh: -c: line 1: syntax error: unexpected end of file" number 2

Los apóstrofes en "he" es visto como parte del comando.


Si tuviera

conjunto TEXTFILE a "/ Users/nombre de usuario/Escritorio/alguna foo.txt" como mi ruta de archivo (observe el espacio.) Y no tenía & forma citado TEXTFILE de sino que tuve & TEXTFILE

Luego, cuando el archivo se escribió que iba a escribir en un archivo denominado "algunos "y no" algunos foo.txt "

Cuestiones relacionadas