2010-05-06 5 views
1

У меня есть обычный файл txt, который имеет список чисел. Один номер в каждой строке, например:AppleScript: Преобразование TXT-файла в список

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 

т.д.

Этот список находится файл с именем file.txt, был создан и сохранен на TextEdit, используя западную (ISO Latin 1) кодирование.

Теперь я пытаюсь использовать Applescript для чтения этого файла и преобразования его в список.

У меня есть этот скрипт

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 

после запуска этого сценария, MyList содержит только один элемент и этот элемент «97» (я полагаю, что это первые два номера первой записи).

Что происходит?

Спасибо.

ответ

1

Это звучит как что-то странное происходит с файлом, но вы пробовали другой подход:

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

Кошка программа просто выводит содержимое файла. Даже я не работаю, это может дать вам ключ к тому, что происходит.

1

Если вы сохранили свой файл как западный (ISO Latin 1), скорее всего, он имеет LF в качестве разделителя.

Попробуйте использовать следующую строку:

набор MyList читать open_file используя разделитель «\ п»

и посмотреть, если он работает для вас.

Я попытался запустить свой сценарий на своем ноутбуке, и он отлично работает с вышеуказанными изменениями.

Кроме того, запустите команду od в оболочке, чтобы убедиться, что файл закодирован правильно. Вот результат моей команды:

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

Спасибо, но он говорит, что этот разделитель «\ n» недействителен. Я заменил его на , но проблема не устранена. Я запустил команду od и закодирован как ваш. – SpaceDog

+0

(продолжение) ... Я пробовал файлы других типов TXT, и во всех случаях окончательный список содержит только одну запись, которая является первыми символами, содержащимися в файле. Файл с, 12345 \ n67890 \ n00000 \ n будет содержать один элемент, который равен «12». – SpaceDog

+0

как вы проверяете список? можете ли вы опубликовать фрагмент кода? там может быть проблема. – Vlad

1

параметр В read командования using delimiter(s) проблематично. Используйте следующие вместо этого, который работает с любым символом перевода строки (ы):

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

спасибо, но, используя результаты вашего кода, имея myList только с одной записью, и эта запись соответствует первым двум символам, читаемым из файла, отменена ... в этом случае myList содержит ОДНУ запись, которая равна 79. – SpaceDog

+0

В этом случае что-то еще это проблема. Я не могу воспроизвести вашу ошибку; когда я пытаюсь создать файл .txt, это решение сработало для меня. Я не уверен, что может помочь нам диагностировать это - возможно, если вы где-нибудь разместили файл? –

Смежные вопросы