CSV ファイルを 2D 配列として読み込み、それを CSV ファイルに戻したいと考えています。これが私のCSVファイルだとしましょう。それはExcelファイルであり、| 隣接するセルを意味します:
family | type
Doctor | Pediatrics
Engineer | Chemical
私が理解していることから、applescriptには配列はなく、リストとレコードだけです。これを XLSX ファイルで行う方がよい場合は、お知らせください。
CSV ファイルを 2D 配列として読み込み、それを CSV ファイルに戻したいと考えています。これが私のCSVファイルだとしましょう。それはExcelファイルであり、| 隣接するセルを意味します:
family | type
Doctor | Pediatrics
Engineer | Chemical
私が理解していることから、applescriptには配列はなく、リストとレコードだけです。これを XLSX ファイルで行う方がよい場合は、お知らせください。
Nigel の CSV からリストへのコンバーターは、私が見た中で最高のものです ...
http://macscripter.net/viewtopic.php?pid=125444#p125444
たとえば、次の設定を使用します。
set csvText to "family | type
Doctor | Pediatrics
Engineer | Chemical"
csvToList(csvText, {separator:"|"}, {trimming:true})
v2
set csvText to read "/Users/user1385816/Desktop/yourfile.csv"
csvToList(csvText, {}, {trimming:true})
配列はapplescriptの単なるリストであるため、2次元配列またはapplescript-speakのリストのリストが必要です。AppleScript のテキスト項目区切り文字を理解していれば、タスクは文字列をリストに、またはその逆に変換する単純な操作です。そこで、タスクを簡単にするためにいくつかのハンドラーを書きました。textToTwoDArray() および twoDArrayToText()。この最初の例は、textToTwoDArray() を使用して文字列をリストのリストに変換する方法を示しています。
注: テキスト ファイルの行末はキャリッジ リターン (文字 ID 13) またはライン フィード (文字 ID 10) のいずれかである可能性があるため、注意が必要です。コードで文字 ID 10 を使用したことがわかりますが、適切な結果が得られない場合は、「13」を試してください。
set fileText to "family | type
Doctor | Pediatrics
Engineer | Chemical"
textToTwoDArray(fileText, character id 10, " | ")
on textToTwoDArray(theText, mainDelimiter, secondaryDelimiter)
set {tids, text item delimiters} to {text item delimiters, mainDelimiter}
set firstArray to text items of theText
set text item delimiters to secondaryDelimiter
set twoDArray to {}
repeat with anItem in firstArray
set end of twoDArray to text items of anItem
end repeat
set text item delimiters to tids
return twoDArray
end textToTwoDArray
また、twoDArrayToText() を使用して、リストのリストを文字列に変換する方法を次に示します。
set twoDArray to {{"family", "type"}, {"Doctor", "Pediatrics"}, {"Engineer", "Chemical"}}
twoDArrayToText(twoDArray, character id 10, " | ")
on twoDArrayToText(theArray, mainDelimiter, secondaryDelimiter)
set {tids, text item delimiters} to {text item delimiters, secondaryDelimiter}
set t to ""
repeat with anItem in theArray
set t to t & (anItem as text) & mainDelimiter
end repeat
set text item delimiters to tids
return (text 1 thru -2 of t)
end twoDArrayToText
あとは、applescript を使用してテキスト ファイルを読み書きする方法を理解するだけです。幸運を ;)
AppleScript で CSV データをモデル化するだけの質問であれば、解決策は次のようなレコードのリストを使用することです。
set csvData to {{family:"Doctor", type:"Engineer"}, {family:"Engineer", type:"Chemical"}}
repeat with aRow in csvData
その後、ループ内で再度読み取ることができます。
テクニカル ノート: AppleScript リストはベクトルとして実装されます。つまり、リストは順序付けられており、数値インデックス (インデックス 1 から始まる) によってアクセスできます。他のほとんどの言語の配列と同じように動作します。