使用OS X Javascript将文本文件读入数组

时间:2017-02-17 10:55:57

标签: javascript macos jxa

我真的很难找到如何使用OS X Automation使用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上浪费时间?

2 个答案:

答案 0 :(得分: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;
})();

答案 1 :(得分:0)

Apple已an entire page致力于在“Mac自动化脚本编制指南”中读取和写入文件。这包括一个完全执行您要查找的操作的功能。我使用Apple指南中的def find_word(word, word_list): try: return word_list.index(word) except ValueError: return None # or what ever you need >>> word_list = ['bubble', 'lizzard', 'fish'] >>> find_word('lizzard', word_list) 1 >>> print(find_word('blizzard', word_list)) None 函数重写了下面的示例:

readAndSplitFile

运行上面的代码后,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作为分隔符,以便在每个标签或您选择的任何其他字符处中断。)