2012-04-08 12 views
5

Próbowałem utworzyć skrypt AppleScript, który odczytuje plik tekstowy i umieszcza jego zawartość na liście. Plik jest prostym plikiem tekstowym, w którym każda linia wygląda następująco: example-"example"Przeczytaj plik tekstowy na liście w Applescript

Pierwsza to nazwa pliku, a druga to nazwa folderu.

Oto mój kod teraz:

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 

Kiedy biegnę, że wyjście uzyskać to:

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

Moja lista wygląda następująco: Game.of.Thrones- "Gra o Tron "i jeszcze dwie takie linie.

Odpowiedz

5

Błąd jest to, że starają się odczytać zawartość pliku (pierwszy plik czytasz) jako pliku. Uzyskanie tekstu zostanie rozerwane na granicy powrotu/linii, co zwykle działa lepiej niż próba odgadnięcia, który znak końca wiersza został użyty w pliku.

też nie trzeba cały otwarte dla dostępu rzeczy kiedy tylko czytanie plików, więc skrypt może być zredukowana do zaledwie

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

Nadal czyta tylko „gra Tofes - \ "Game Of" w moim pliku wyjściowym, teraz nie dostaję żadnych błędów – andeersg

+0

Próbowałem z tekstem: 1tekst, 2tekst ... 5tekst w pliku tekstowym.Ty wynik to 1tekst, 2tekst, 3tekst , 4tekst, 5. Nie 5tekst – andeersg

+0

Skrypt po prostu pobiera każdą linię pliku (oddzieloną znakiem nowego wiersza, np. Zwrot) i umieszcza ją na liście - czy nie jest o co poprosiłeś? Nie wiem, dlaczego plik nie zostałby całkowicie odczytany, chyba że nie używasz zwykłego polecenia odczytu i grasz z ogranicznikami lub liczbą odczytanych znaków. –

2

read wykorzystuje MacRoman domyślnie, więc Jumbles się nie- Znaki ASCII w plikach UTF-8, chyba że dodasz as «class utf8». (as Unicode text UTF-16.)

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

paragraphs of działa również CRLF i końca linii CR. To nie robi, ale ignoruje ostatnią linię jeśli jest pusty:

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

AppleScript Język referencyjny stwierdza na stronie 120:

Szereg znaków zaczynając natychmiast po obu pierwszego znaku po zakończeniu poprzedni akapit lub początek tekstu i kończący się znakiem powrotu karetki (\ r), znakiem do wstawienia linii (\ n), parą powrotu/przekazania linii (\ r \ n) lub końcem tekstu. Znak Unicode "separator akapitu" (U + 2029) nie jest obsługiwany.

Więc U + 8232 jest ignorowany i AppleScript zwraca cały tekst z pliku ...

U + 8232 jest stosowany w TextEdit jako znak CR ...

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

Mimo że ten kod może odpowiedzieć na pytanie, podanie dodatkowego kontekstu dotyczącego _why_ i/lub _how_ it odpowie na , pytanie znacznie poprawiłoby jego długoterminową wartość . Proszę [edytuj] swoją odpowiedź, aby dodać wyjaśnienie. –