2010-05-06 4 views
1

J'ai un fichier txt qui contient une liste de nombres. Un numéro par ligne, comme:AppleScript: Transformation d'un fichier TXT dans une liste

978-972-722-649-8 
978-972-722-646-7 
978-972-722-627-6 
978-972-722-625-2 
978-972-722-594-1 

etc.

Cette liste est un fichier appelé file.txt, a été créé et enregistré sur TextEdit en utilisant Western (ISO Latin 1) le codage.

Maintenant, j'essaie d'utiliser Applescript pour lire ce fichier et le transformer dans une liste.

J'ai ce script

set myDirectory to path to desktop folder as string 
set myFile to myDirectory & "file.txt" 

try 
    set open_file to ¬ 
     open for access file myFile without write permission 
    set myList to read open_file using delimiter return 
    close access open_file 
on error 
    try 
     close access file open_file 
    end try 
end try 

après l'exécution de ce script, myList contient un seul élément et cet élément est « 97 » (je suppose que ce sont les deux premiers numéros de la première entrée).

Que se passe-t-il?

Merci.

Répondre

1

Cela ressemble à quelque chose de bizarre se passe avec le fichier, mais avez-vous essayé une autre approche:

set myfilePPath to posix path of myFile 
set myList to every paragraph of (do shell script("cat \"" & myfilePPath "\")) 

Le chat programme tape simplement le contenu du fichier. Même si ça ne marche pas, ça pourrait vous donner une idée de ce qui se passe.

1

Si vous avez enregistré votre fichier en tant que fichier Western (ISO Latin 1), il est probable qu'il ait un LF comme délimiteur.

Essayez d'utiliser la ligne suivante:

ensemble myList à lire open_file en utilisant delimiter "\ n"

et voir si cela fonctionne pour vous.

J'ai essayé d'exécuter votre script sur mon ordinateur portable et cela fonctionne très bien avec les modifications ci-dessus.

Également, exécutez la commande od dans le shell pour voir si le fichier est codé correctement. Voici la sortie de mon commande: paramètre

vlad$ od -c file.txt 
0000000 9 7 8 - 9 7 2 - 7 2 2 - 6 4 9 - 
0000020 8 \n 9 7 8 - 9 7 2 - 7 2 2 - 6 4 
0000040 6 - 7 \n 9 7 8 - 9 7 2 - 7 2 2 - 
0000060 6 2 7 - 6 \n 9 7 8 - 9 7 2 - 7 2 
0000100 2 - 6 2 5 - 2 \n 9 7 8 - 9 7 2 - 
0000120 7 2 2 - 5 9 4 - 1 \n       
0000132 
+0

Merci mais il dit que ce délimiteur "\ n" n'est pas valide. Je l'ai remplacé par le délimiteur , mais le problème persiste. J'ai exécuté la commande od et elle est codée comme la vôtre. – SpaceDog

+0

(suite) ... J'ai essayé avec d'autres types de fichiers TXT et dans tous les cas, la liste finale contient une seule entrée qui contient les premiers caractères du fichier. Un fichier avec, 12345 \ n67890 \ n00000 \ n contiendra un élément "12". – SpaceDog

+0

comment vérifiez-vous la liste? pouvez-vous poster l'extrait de code de celui-ci? il pourrait y avoir un problème là-bas. – Vlad

1

using delimiter(s) La commande de read est problématique. Utilisez les éléments suivants à la place, qui fonctionne avec un caractère de saut de ligne (s):

set myList to every paragraph of (read open_file) 
+0

merci, mais en utilisant votre code résultats sur avoir myList avec une seule entrée et cette entrée correspond aux deux premiers caractères lus à partir du fichier, inversé ... dans ce cas myList contient une entrée qui est 79. – SpaceDog

+0

Dans ce cas, quelque chose d'autre c'est le problème. Je ne peux pas reproduire votre bug quand j'essaye de créer un fichier file.txt, cette solution a fonctionné pour moi. Je ne suis pas sûr de ce qui pourrait nous aider à diagnostiquer ceci --- peut-être si vous avez posté le dossier quelque part? –