2017-02-17 28 views
1

OS X Automation with 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は、Mac Automation Scripting Guideでファイルの読み書きに専念しています。an entire pageこれには、探しているアクションを正確に実行する関数が含まれます。私はAppleのガイドから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はファイルの一行をcontaing各文字列を、文字列の配列を保持します。 (あなたはまた、すべてのタブ、またはあなたが選んだの他の文字で分割する区切り文字として\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; 
})(); 
関連する問題