ファイル名フォルダ名非互換文字置換(考え中)
AppleScript サンプルコード
行番号 | ソース |
---|---|
001 | #!/usr/bin/env osascript |
002 | ----+----1----+----2----+-----3----+----4----+----5----+----6----+----7 |
003 | # ファイル名フォルダ名非互換文字置換 |
004 | (* |
005 | メモアプリのnameに対応する用に作成 |
006 | スペースがラインセパレーターになっている値を |
007 | ファイル名として使いたい場合の処理を考え中 |
008 | キャラクターID=ユニコード番号の10進数で判定して置換する方法 |
009 | 制御文字は削除して |
010 | それ以外は全角文字=2バイトの日本語の記号文字に置換する方法も検討中 |
011 | *) |
012 | # com.cocolog-nifty.quicktimer.icefloe |
013 | ----+----1----+----2----+-----3----+----4----+----5----+----6----+----7 |
014 | use AppleScript version "2.8" |
015 | use framework "Foundation" |
016 | use framework "AppKit" |
017 | use scripting additions |
018 | property refMe : a reference to current application |
019 | |
020 | (* |
021 | set strFileName to "A:A\nA¥A" |
022 | の場合 |
023 | set strFileName to doReplace(strFileName, "_") |
024 | で |
025 | log strFileName |
026 | -->"A_AA_A" となる |
027 | *) |
028 | log doReplace("A:A\nA¥A", "_") |
029 | |
030 | |
031 | |
032 | ################################ |
033 | # 非互換文字置換 |
034 | to doReplace(argOrignalText, argReplaceText) |
035 | #戻し用のリスト |
036 | set listReturnText to {} as list |
037 | #入力をテキストで確定させて |
038 | set strOrignalText to argOrignalText as text |
039 | #文字毎でリストにする |
040 | set listOrignalText to (every text item of strOrignalText) as list |
041 | ################################ |
042 | #まずは制御文字の削除 |
043 | #文字数分繰り返し |
044 | repeat with itemOrignalText in listOrignalText |
045 | #10進ユニコード番号を取得して |
046 | set strItemCharNO to id of itemOrignalText |
047 | #濁音等の合成文字は処理しない |
048 | if (class of strItemCharNO) = integer then |
049 | #31より小さい数なら制御文字 |
050 | if strItemCharNO ≤ 31 then |
051 | #10進ユニコード番号31までは制御文字なので削除 |
052 | #なので何もしない |
053 | else |
054 | #それ以外の文字は次工程に回す |
055 | set end of listReturnText to itemOrignalText |
056 | end if |
057 | # 合成文字の場合Classがlistになる |
058 | else if (class of strItemCharNO) = list then |
059 | #そのまま次工程に回す |
060 | set end of listReturnText to itemOrignalText |
061 | end if |
062 | end repeat |
063 | |
064 | |
065 | ################################ |
066 | #次に指定番号で指定文字に置換 |
067 | #ファイル名パス名のWindow Mac非互換文字と非推奨文字の一部のユニコード10進数値 |
068 | # set listCharNoDec to {34, 37, 42, 47, 58, 60, 62, 63, 92, 94, 124, 126, 127, 160, 165, 8203, 8232, 8233, 8234, 8235, 8236, 8237, 8238, 8239} as list |
069 | set listCharNoDec to {34, 37, 42, 47, 58, 60, 62, 63, 92, 94, 124, 126, 127, 160, 165} as list |
070 | #戻し用のリスト |
071 | set listSubReturn to {} as list |
072 | #順番に処理 |
073 | repeat with itemChar in listReturnText |
074 | #10進ユニコード番号を取得して |
075 | set strItemCharNO to id of itemChar |
076 | if listCharNoDec contains strItemCharNO then |
077 | set end of listSubReturn to argReplaceText |
078 | else |
079 | #置換せずにそのまま |
080 | set end of listSubReturn to itemChar |
081 | end if |
082 | end repeat |
083 | |
084 | ################################ |
085 | #スペースに置換 |
086 | #ラインセパレータ等特殊文字はスペースに置換する |
087 | set listCharNoDec to {8203, 8232, 8233, 8234, 8235, 8236, 8237, 8238, 8239} as list |
088 | #戻し用のリスト |
089 | set strReturn to ("") as text |
090 | #順番に処理 |
091 | repeat with itemChar in listSubReturn |
092 | #10進ユニコード番号を取得して |
093 | set strItemCharNO to id of itemChar |
094 | if listCharNoDec contains strItemCharNO then |
095 | #含まれているならスペース置換 |
096 | #スペース以外の文字に置換する場合はここで変更 |
097 | set strReturn to (strReturn & " ") as text |
098 | else |
099 | #置換せずにそのまま |
100 | set strReturn to (strReturn & itemChar) as text |
101 | end if |
102 | end repeat |
103 | |
104 | #戻す |
105 | return strReturn |
106 | end doReplace |
107 | |
AppleScriptで生成しました |
| 固定リンク