« フォントの文字イメージを画像に出力します(少し変更した) | トップページ | SystemStatsを取得してHTMLで表示 »

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

|

« フォントの文字イメージを画像に出力します(少し変更した) | トップページ | SystemStatsを取得してHTMLで表示 »

AppleScript Text TSV」カテゴリの記事