2017-02-17 5 views
1

Я действительно пытаюсь найти документацию о том, как читать текстовый файл в массиве с помощью OS X Automation с Javascript.Прочитать текстовый файл в массиве с OS X Javascript

Вот что я до сих пор:

var app = Application.currentApplication(); 
app.includeStandardAdditions = true; 

var myFile = "/Users/Me/Dropbox/textfile.txt"; 
var openedFile = app.openForAccess(myfile, { writePermission: true }); 

var myText = openedFile.?? 

app.closeAccess(URLFile); 

Я скопировал большую часть этого из официальной документации компании Apple. Мне сложно найти документацию в любом месте в Интернете. Например, какие аргументы для openForAccess? Кажется, что в каком-либо словаре для описания этого метода нет ничего.

Я трачу свое время на JXA?

+0

Для автоматизации приложения, AppleScript является единственным поддерживаемый вариант, который работает правильно и имеет документацию и поддержку сообщества. Для других задач, если вы можете использовать Python, Ruby, Swift или другой язык, который активно поддерживается и имеет здоровое сообщество пользователей, сделайте это. JXA была фактически незафиксирована и неподдерживается с первого дня ее доставки, поэтому неудивительно, что она не смогла создать какую-либо долю на рынке, что привело к увольнению Менеджера продуктов автоматизации и устранению команды Mac Automation в прошлом году, поэтому, вероятно, это не хорошая долгосрочная инвестиция , – foo

+0

JXA - очень полезный инструмент. – houthakker

ответ

0

Apple имеет an entire page, посвященный чтению и записи файлов в их руководстве по разработке сценариев Mac Automation. Это включает в себя функцию, которая выполняет точно действие, которое вы ищете. Я переписал ваш пример ниже с помощью функции readAndSplitFile от руководства Apple:

var app = Application.currentApplication() 
app.includeStandardAdditions = true 

function readAndSplitFile(file, delimiter) { 
    // Convert the file to a string 
    var fileString = file.toString() 

    // Read the file using a specific delimiter and return the results 
    return app.read(Path(fileString), { usingDelimiter: delimiter }) 
} 

var fileContentsArray = readAndSplitFile('/Users/Me/Dropbox/textfile.txt', '\n') 

После выполнения кода, fileContentsArray проведет массив строк, с каждой строкой с указанной одну строкой файла. (Вы также можете использовать \t в качестве разделителя, чтобы разбить на каждой вкладке, или любой другой символ вашего выбора.)

1

Некоторые общие функции и иллюстративный тест:

(function() { 
    'use strict'; 

    // GENERIC FUNCTIONS ------------------------------------------------------ 

    // doesFileExist :: String -> Bool 
    function doesFileExist(strPath) { 
     var error = $(); 
     return $.NSFileManager.defaultManager 
      .attributesOfItemAtPathError($(strPath) 
       .stringByStandardizingPath, error), error.code === undefined; 
    }; 

    // lines :: String -> [String] 
    function lines(s) { 
     return s.split(/[\r\n]/); 
    }; 

    // readFile :: FilePath -> maybe String 
    function readFile(strPath) { 
     var error = $(), 
      str = ObjC.unwrap(
       $.NSString.stringWithContentsOfFileEncodingError($(strPath) 
        .stringByStandardizingPath, $.NSUTF8StringEncoding, error) 
      ), 
      blnValid = typeof error.code !== 'string'; 
     return { 
      nothing: !blnValid, 
      just: blnValid ? str : undefined, 
      error: blnValid ? '' : error.code 
     }; 
    }; 

    // show :: a -> String 
    function show(x) { 
     return JSON.stringify(x, null, 2); 
    }; 

    // TEST ------------------------------------------------------------------- 
    var strPath = '~/DeskTop/tree.txt'; 

    return doesFileExist(strPath) ? function() { 
     var dctMaybe = readFile(strPath); 
     return dctMaybe.nothing ? dctMaybe.error : show(lines(dctMaybe.just)); 
    }() : 'File not found:\n\t' + strPath; 
})(); 
Смежные вопросы