2012-04-08 10 views
5

Tôi đã cố tạo một AppleScript đọc một tệp văn bản và đặt nội dung đó vào một danh sách. Tệp là một tệp văn bản đơn giản mà mỗi dòng trông giống như sau: example-"example"Đọc textfile vào danh sách trong Applescript

Đầu tiên là tên tệp và tên kia là tên thư mục.

Đây là mã của tôi bây giờ:

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 

Khi tôi chạy mà đầu ra tôi có được điều này:

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

danh sách của tôi trông như thế này: Game.of.Thrones- "Game of Thrones "và hai dòng nữa như thế.

Trả lời

5

Lỗi là bạn đang cố gắng đọc nội dung của tệp (tệp đầu tiên bạn đọc) dưới dạng một tệp. Lấy các đoạn văn của văn bản sẽ phân tách nó ở các ranh giới trả về/linefeed, thường hoạt động tốt hơn việc cố gắng đoán kết thúc của (các) ký tự dòng được sử dụng trong tệp.

Bạn cũng không cần toàn bộ mở để truy cập điều khi chỉ đọc các tập tin, vì vậy kịch bản của bạn có thể được giảm xuống chỉ còn

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

Nó vẫn chỉ đọc "Game .of.Thrones - \ "Game Of" trong đầu ra của tôi, tôi không nhận được bất kỳ lỗi nào bây giờ – andeersg

+0

Tôi đã thử với văn bản: 1text, 2text ... 5text trong tệp văn bản bây giờ. Kết quả là 1text, 2text, 3text , 4text, 5. Không 5text – andeersg

+0

Tập lệnh chỉ nhận mỗi dòng của tệp (được phân cách bằng ký tự dòng mới chẳng hạn như trả về) và đặt nó vào danh sách - không phải là thứ theo những gì bạn hỏi? Không chắc chắn lý do tại sao tệp sẽ không được đọc hoàn toàn, trừ khi bạn không sử dụng lệnh đọc thuần và đang phát xung quanh với dấu phân tách hoặc số ký tự đã đọc. –

2

read sử dụng macroman theo mặc định, vì vậy nó jumbles lên phi Ký tự ASCII trong các tệp UTF-8 trừ khi bạn thêm as «class utf8». (as Unicode text là UTF-16.)

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

paragraphs of cũng làm việc với CRLF và kết thúc dòng CR. Điều này không, nhưng nó bỏ qua dòng cuối cùng nếu nó trống:

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

Language Reference AppleScript của khẳng định trên trang 120:

Một loạt các nhân vật bắt đầu ngay sau khi một trong hai ký tự đầu tiên sau khi kết thúc đoạn trước hoặc phần đầu của văn bản và kết thúc bằng ký tự trả về vận chuyển (\ r), ký tự linefeed (\ n), cặp trả về/linefeed (\ r \ n), hoặc phần cuối của văn bản. Ký tự "đoạn tách" Unicode (U + 2029) không được hỗ trợ.

Vì vậy, U + 8232 được bỏ qua và AppleScript trả lại toàn bộ văn bản từ tập tin ...

U + 8232 được sử dụng trong TextEdit như nhân vật CR ...

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

Mặc dù mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung liên quan đến _why_ và/hoặc _how_ nó trả lời câu hỏi sẽ cải thiện đáng kể giá trị dài hạn của nó. Xin vui lòng [sửa] câu trả lời của bạn để thêm một số lời giải thích. –