2010-09-23 7 views

Répondre

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 

avec elle peut Interfacing être nettoyé avec les éléments suivants ...

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

J'ai trouvé cette version incapable d'écrire des caractères non ASCII dans des fichiers texte. Existe-t-il une version compatible UTF-8 de ce code? Les caractères non-ASCII apparaissent comme ?? dans les fichiers texte résultants. – kakyo

+0

C'est une bonne solution pour le fichier IO, la complexité est que le fichier IO reflète les appels dans MacOS classique, par exemple les anciens appels 'FSRead'' FSWrite' du gestionnaire de fichiers. Vous devez avoir un 'FSRef' pour le fichier que vous ouvrez, puis configurer EOF pour effacer le fichier avant de commencer à écrire. –

7

J'ai aussi appris qu'un hack, si l'on ne veut cracher un peu de texte dans un fichier , est d'utiliser la coquille.

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

S'il vous plaît voir ma réponse à ce sujet. – markhunte

3

Pour moi en cours d'exécution do shell script était trop lent sur un PowerBook G4 lorsqu'il est exécuté dans une boucle fois; 300000), mais bien sûr, c'est plus rapide à écrire ce qui rend parfois le sens. Vous voudriez également échapper les caractères shell comme ceci:

do shell script "echo" & forme cité de foobar & ">> some_file.txt"

et pour des raisons esthétiques, j'utiliseraient

dire moi de faire script shell "# ..."

mais je n'ai pas encore vérifié (ce que je crois) que si "faire shell script" est dans un bloc de "dire Finder" par exemple, il est Finder processus que crée un sous-shell. Avec "Dites-moi de faire un script shell", au moins le script de l'éditeur de scripts est meilleur pour moi. ;)

7

Une version courte dans le plus pur AppleScript:

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

Il semble qu'il n'y a pas de solution de commande native. Au lieu de cela, vous devez ouvrir et fermer plus tard le fichier.

+0

Je crois que cela ne fonctionne pas comme prévu si le fichier existe déjà et était plus long que ce qui est écrit maintenant - alors les anciennes données restent dans le fichier. pour résoudre ceci, vous devez d'abord effacer le contenu avec 'set eof de myFile à 0' comme indiqué dans la réponse acceptée –

7

@JuanANavarro.

Lors de l'utilisation du shell, vous devez utiliser la forme citée de pour le TEXT et le chemin du fichier. Cela aidera à arrêter les erreurs avec des espaces dans les noms de fichiers et des caractères comme des apostrophes dans le texte par exemple.

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 

Le script ci-dessus fonctionne correctement.


Si je ne pas & sous forme de cité someText

mais j'avais & someText je recevrais l'erreur suivante.

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

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

Les apostrophes dans « j'ai » est considérée comme faisant partie de la commande.


Si je devais

ensemble textFile à "/ Users/username/Desktop/some foo.txt" comme mon chemin de fichier (notez l'espace.) Et ne pas & forme cité de textFile mais j'avais & textFile

Puis, quand le fichier a été écrit il serait écrire dans un fichier nommé "certains "et non" certains foo.txt "

Questions connexes