">

キッズプレート、パスタおかわり

プログラミングやデジモノについてあれこれ
--.--.-- --:--|カテゴリ:スポンサー広告| コメント(-)

スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2010.04.06 11:29|カテゴリ:AppleScriptコメント(0)

文字列に自動で連番を付与して配列にしちゃうスクリプト


 お仕事のプログラムをしている場合に固定文字列でテーブルなんかを作らなければならない場合があります。

 例えば都道府県名とか十二支とか星座とか。結局固定文字列なんでソース内でfor文で回して配列に追加したり、splitでどかんと分割したり。まあいろいろ手は有るんですが私の場合は今回のスクリプトでベタに記述しています。

 シチュエーションとしてはこんな感じです。

「このテキストファイルの中身がリストになるから」

 なんて言われて貰ったテキストファイルを開いてみると改行で値が記述してあるだけなんて場合。

 そんな時にはそのテキストファイルをこのスクリプトちゃっちゃと変換するわけです。

 今回のスクリプトはCoteditorで使います。Coteditorをご存知無い方はこちらからダウンロードしてみてください。

 Coteditorでスクリプトを利用するにはCoteditorのスクリプトメニュー(メニューバーの右からに番目)から

「スクリプトフォルダを開く」

 を選択して表示されたフォルダに今回紹介するAppleScriptを入れます。メニューを更新すると追加したスクリプトの名前が表示されますのでメニューから実行してください。

 スクリプトの動きを簡単に説明します。選択範囲で指定した部分が変換されますので変換したい部分を選択範囲で指定した後にスクリプトを実行してください。

 スクリプトを実行すると「変数名」の指定ダイアログが出てきますので使用したい変数名を入力してください。サンプルでは「$KEN」を指定してみました。以下のような感じで変換されます。

変換前変換後
HENKAN_MAE HENKAN_GO

 ソースは以下の通り。今回はPerl用のソースを生成していますが、文字列の指定部分を変更すればいろんな言語の配列をパパッと作れます。今回のスクリプトを応用すれば、ストリームエディタみたいな使い勝手で、なかなか楽しいことができると思います。

 改変&再配布ともご自由に。まあ特に問題は無いと思いますが毎度おなじみ「使用は自己責任」ということでお願いいたします。
(*
CotEditor用スクリプト
コーディングサポートシリーズ「固定文字リストの配列化」
2010/4/6 by hirakun
http://hirakun.blog57.fc2.com/
*)
tell application "CotEditor"
tell front document
--選択範囲を再度セットすることで行単位での選択にする
--選択範囲は最後に再セットするのでここで値を覚えておく
set SelectRange to line range of selection
set line range of selection to SelectRange

--選択範囲のコンテンツを取得
set SelectContents to contents of selection as Unicode text

--デリミタとして利用する改行文字を取得
set LineItem to line ending
if (LineItem = LF) then
set LineEnd to ASCII character (10)
else if (LineItem = CR) then
set LineEnd to ASCII character (13)
else if (LineItem = CRLF) then
set LineEnd to (ASCII character (13)) & (ASCII character (10))
end if

--デリミタで分解してリストを取得
set LastDelimit to AppleScript's text item delimiters --デリミタ復帰用に現在値を退避
set AppleScript's text item delimiters to LineEnd
set SelectList to every text item of SelectContents

--変数名を取得
display dialog "変数名を指定してください" default answer "" buttons {"キャンセル", "OK"} default button 2 with icon note
set ArrayName to text returned of result

--ループ数
set ListLength to count of SelectList
--配列ソース記述用のカウント(空行対応)
set ArrayCount to 0
repeat with i from 1 to (ListLength)
--文字列が存在すれば処理する
--if ((count of (text item (i) of SelectList)) > 0) then
if ((text item (i) of SelectList) "") then
set moto to text item (i) of SelectList
set text item (i) of SelectList to (ArrayName & "[" & ArrayCount & "] = '" & moto & "';")
set ArrayCount to ArrayCount + 1
end if
end repeat

--デリミタで結合してコンテンツに返す(選択範囲テキストの入れ替え)
set contents of selection to (SelectList as Unicode text)

--デリミタ復帰
set AppleScript's text item delimiters to LastDelimit

--文字列が増減すると選択範囲が変化するので選択範囲を再設定する
set line range of selection to SelectRange
end tell
end tell
コメントの投稿












管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL

プロフィール

ひらくん Author:ひらくん
どもども、ひらんくんどす。
日々まったり過ごしております。
仕事はDTP関連のスプリクト&アプリケーション開発。
Follow happyscript on Twitter

ブログ内検索



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。