TSV行列入替
################################
#### TSV行列入替
################################
to doChgColRowTSV(argNSString)
#可変にして
set ocidLineString to (refMe's NSMutableString's alloc()'s initWithCapacity:(0))
(ocidLineString's setString:(ocidReadString))
#改行をUNIXに強制
set ocidLineStringLF to (ocidLineString's stringByReplacingOccurrencesOfString:("\r\n") withString:("\n"))
set ocidLineString to (ocidLineStringLF's stringByReplacingOccurrencesOfString:("\r") withString:("\n"))
#改行毎でリストにする
set ocidCharSet to (refMe's NSCharacterSet's newlineCharacterSet)
set ocidTextArray to (ocidLineString's componentsSeparatedByCharactersInSet:(ocidCharSet))
#リストの数
set numCntArray to (count of ocidTextArray) as integer
#出力用のテキスト
set ocidSaveString to refMe's NSMutableString's alloc()'s initWithCapacity:(0)
set ocidColArray to refMe's NSMutableArray's alloc()'s initWithCapacity:(0)
#1行目のテキストを取り出して
set ocidFirsText to ocidTextArray's firstObject()
#タブ区切りテキストにする
set ocidFirstRowArray to ocidFirsText's componentsSeparatedByString:("\t")
#1行目のリストの数
set numCntFirstArray to (count of ocidFirstRowArray) as integer
#2行目からの処理
repeat with itemRowNo from 0 to (numCntFirstArray - 1) by 1
#まずは1行目のデータを取り出して
set ocidFirstItemText to (ocidFirstRowArray's objectAtIndex:(itemRowNo))
#出力用テキストに追加しておく
(ocidSaveString's appendString:(ocidFirstItemText))
(ocidSaveString's appendString:("\t"))
#2列目以降のデータを順に取り出して
repeat with itemColNo from 1 to (numCntArray - 1) by 1
#2行目以降を順番に取り出して
set ocidLineText to (ocidTextArray's objectAtIndex:(itemColNo))
#リストにする
set ocidRowArray to (ocidLineText's componentsSeparatedByString:("\t"))
#対象の列の値を取り出して
set ocidLineItemText to (ocidRowArray's objectAtIndex:(itemRowNo))
#追加していく
(ocidSaveString's appendString:(ocidLineItemText))
#最後のデータにはタブ入れない
if itemColNo < (numCntArray - 1) then
(ocidSaveString's appendString:("\t"))
end if
end repeat
(ocidSaveString's appendString:("\n"))
end repeat
return ocidSaveString
end doChgColRowTSV
#!/usr/bin/env osascript
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
#
# TSVファイルの行列を入れ替えます
# com.cocolog-nifty.quicktimer.icefloe
----+----1----+----2----+-----3----+----4----+----5----+----6----+----7
use AppleScript version "2.8"
use framework "Foundation"
use framework "AppKit"
use scripting additions
property refMe : a reference to current application
#############################
###ダイアログを前面に出す
set strName to (name of current application) as text
if strName is "osascript" then
tell application "Finder" to activate
else
tell current application to activate
end if
############ デフォルトロケーション
set appFileManager to refMe's NSFileManager's defaultManager()
set ocidURLsArray to (appFileManager's URLsForDirectory:(refMe's NSDesktopDirectory) inDomains:(refMe's NSUserDomainMask))
set ocidDesktopDirPathURL to ocidURLsArray's firstObject()
set aliasDefaultLocation to (ocidDesktopDirPathURL's absoluteURL()) as alias
############UTIリスト
set listUTI to {"public.tab-separated-values-text"}
set strMes to ("ファイルを選んでください") as text
set strPrompt to ("ファイルを選んでください") as text
try
### ファイル選択時
set aliasFilePath to (choose file strMes with prompt strPrompt default location (aliasDefaultLocation) of type listUTI with invisibles and showing package contents without multiple selections allowed) as alias
on error
log "エラーしました"
return "エラーしました"
end try
##入力ファイルパス
set strFilePath to (POSIX path of aliasFilePath) as text
set ocidFilePathStr to refMe's NSString's stringWithString:(strFilePath)
set ocidFilePath to ocidFilePathStr's stringByStandardizingPath()
set ocidFilePathURL to (refMe's NSURL's alloc()'s initFileURLWithPath:(ocidFilePath) isDirectory:false)
#出力ファイルパス
set ocidBaseFilePathURL to ocidFilePathURL's URLByDeletingPathExtension()
set ocidSaveFilePathURL to ocidBaseFilePathURL's URLByAppendingPathExtension:("行列入替済.tsv")
###ファイルのテキストを読み込み
set listResponse to (refMe's NSString's alloc()'s initWithContentsOfURL:(ocidFilePathURL) encoding:(refMe's NSUTF8StringEncoding) |error|:(reference))
set ocidReadString to (item 1 of listResponse)
if (item 2 of listDone) ≠ (missing value) then
set strErrorMes to (item 2 of listDone)'s localizedDescription() as text
return "エラーが発生しました" & strErrorMes
end if
#可変にして
set ocidLineString to (refMe's NSMutableString's alloc()'s initWithCapacity:(0))
(ocidLineString's setString:(ocidReadString))
#改行をUNIXに強制
set ocidLineStringLF to (ocidLineString's stringByReplacingOccurrencesOfString:("\r\n") withString:("\n"))
set ocidLineString to (ocidLineStringLF's stringByReplacingOccurrencesOfString:("\r") withString:("\n"))
#改行毎でリストにする
set ocidCharSet to (refMe's NSCharacterSet's newlineCharacterSet)
set ocidTextArray to (ocidLineString's componentsSeparatedByCharactersInSet:(ocidCharSet))
#リストの数
set numCntArray to (count of ocidTextArray) as integer
#出力用のテキスト
set ocidSaveString to refMe's NSMutableString's alloc()'s initWithCapacity:(0)
set ocidColArray to refMe's NSMutableArray's alloc()'s initWithCapacity:(0)
#1行目のテキストを取り出して
set ocidFirsText to ocidTextArray's firstObject()
#タブ区切りテキストにする
set ocidFirstRowArray to ocidFirsText's componentsSeparatedByString:("\t")
#1行目のリストの数
set numCntFirstArray to (count of ocidFirstRowArray) as integer
#2行目からの処理
repeat with itemRowNo from 0 to (numCntFirstArray - 1) by 1
#まずは1行目のデータを取り出して
set ocidFirstItemText to (ocidFirstRowArray's objectAtIndex:(itemRowNo))
#出力用テキストに追加しておく
(ocidSaveString's appendString:(ocidFirstItemText))
(ocidSaveString's appendString:("\t"))
#2列目以降のデータを順に取り出して
repeat with itemColNo from 1 to (numCntArray - 1) by 1
#2行目以降を順番に取り出して
set ocidLineText to (ocidTextArray's objectAtIndex:(itemColNo))
#リストにする
set ocidRowArray to (ocidLineText's componentsSeparatedByString:("\t"))
#対象の列の値を取り出して
set ocidLineItemText to (ocidRowArray's objectAtIndex:(itemRowNo))
#追加していく
(ocidSaveString's appendString:(ocidLineItemText))
#最後のデータにはタブ入れない
if itemColNo < (numCntArray - 1) then
(ocidSaveString's appendString:("\t"))
end if
end repeat
(ocidSaveString's appendString:("\n"))
end repeat
#保存
set listDone to ocidSaveString's writeToURL:(ocidSaveFilePathURL) atomically:(true) encoding:(refMe's NSUTF8StringEncoding) |error|:(reference)
if (item 1 of listDone) is false then
set strErrorMes to (item 2 of listDone)'s localizedDescription() as text
return "保存に失敗しました" & strErrorMes
end if
| 固定リンク
「Text TSV」カテゴリの記事
- ユーザー辞書作成支援スクリプト(追加辞書用テキストも作成するようにした)(2024.10.13)
- TSV2HTML TSVタブ区切りテキストをHTMLテーブルにする(少し修正)(2024.03.28)
- TSV行列入替(2024.03.28)
- TSV2AdobeXML タブ区切りテキストからAdobe Illustratorの変数印字用の『変数ライブラリ』を生成する(1ページに複数面付け版)(2024.03.06)
- TSV2AdobeXML タブ区切りテキストからAdobe Illustratorの変数印字用の『変数ライブラリ』を生成する(2024.03.06)