秀丸ファイル内のタブ区切りデータをソーNo.28335
rosegardenyk さん 10/05/28 08:06
 
秀丸マクロ初心者のrosegarden です。
またまた基本的な質問です。よろしくご教示ください。
ファイル内てタブ(下記 →)で区切った用語集作っています。
登録するMACROで、追加のたびに自動的に例えば日本語側でその都度ソートさせたい
のですが、やり方がわかりません。

用語ファイル内容
Hello Kitty → こんにちはキティー
Good evening → こんばんわ
Good afternoon  → こんにちは

マクロのヘルプは見ましたが見当たりません。多分見落としているような気もします。
この会議室の過去ログ「ソート」で検索してみましたがこのような初歩的な質問して
いる人はいないようです。

どうしたら「その都度自動ソート」を実現できるでしょうか?

[ ]
RE:28335 秀丸ファイル内のタブ区切りデーNo.28336
秀丸担当 さん 10/05/28 09:16
 

全て選択して、[編集]→[変換]→[ソート]よりソートができます。
タブ区切りでソートするには、「TSV/CSV」をONにして、「TSV(タブ区切り)」に
するとできると思います。
この例では「カラム指定」で2を指定するといいと思います。

マクロの場合は以下のようになります。

  setcompatiblemode 0x0F;
  selectall;
  filter "" , "Sort" , "000000100001000\"11";

これは[マクロ]→[キー操作の記録開始/終了]で上記の操作を記録したものを、
[マクロ]→[キー操作の保存]で保存したものです。
filter文の第3パラメータは、キー操作の記録で自動的にできたものです。

その都度自動でマクロを実行させるとしたら、具体的にどういうタイミングかわ
からないのでなんともいえませんが、[マクロ]→[マクロ登録]→[自動起動]より
自動起動させる方法もあります。
編集の都度起動する自動起動マクロはいたるところで実行されてしまうので少し
あぶないかもしれません。

ちなみに[表示]→[タブストップ]→[TSVモード(タブ区切り)]にしておくと、ウィ
ンドウ上部のルーラーを右クリックしてソートさせることもできます。

[ ]
RE:28336 秀丸ファイル内のタブ区切りデーNo.28337
rosegardenyk さん 10/05/28 12:03
 
早速の回答ありがとうございます。

>全て選択して、[編集]→[変換]→[ソート]よりソートができます。
>タブ区切りでソートするには、「TSV/CSV」をONにして、「TSV(タブ区切り)」にす
>るとできると思います。
>この例では「カラム指定」で2を指定するといいと思います。
>ちなみに[表示]→[タブストップ]→[TSVモード(タブ区切り)]にしておくと、ウィ
>ンドウ上部のルーラーを右クリックしてソートさせることもできます。

このやりかたでどちらもできました。ありがとうございます。
実務的には[TSVモード(タブ区切り)]にしておいて、ソートしたいカラムを時々手動
でクリックしてやれば済むかもしれません。秀丸にはこういう表示や機能がちゃんと
あるんですね。素晴らしい。(こちらが知らなかっただけということだらけです。お
手数かけます。)

自作マクロで追加更新の都度ソートし直すことにも挑戦したいです。
>その都度自動でマクロを実行させるとしたら、具体的にどういうタイミングかわか
>らないのでなんともいえませんが、[マクロ]→[マクロ登録]→[自動起動]より>自動
>起動させる方法もあります。
>編集の都度起動する自動起動マクロはいたるところで実行されてしまうので少し>あ
>ぶないかもしれません。

自作マクロで、追加登録の都度このマクロの後半でソートさせたいと考えています。
ソートだけのマクロを作って自動起動させることは考えていません。

>マクロの場合は以下のようになります。
>  setcompatiblemode 0x0F;
>  selectall;
>  filter "" , "Sort" , "000000100001000\"11";
>filter文の第3パラメータは、キー操作の記録で自動的にできたものです。

これだけだと、私にはよくわからないのです。

setcompatiblemode 0x0F;
はマクロヘルプにある
「setcompatiblemode 0x000f; (つまり 0x0003 | 0x000c)とすると、折りたたみと
部分編集を無視せずにマクロを動作させることができます。」のことでしょうか。0x
0Fはヘルプに記載されてないし、0x0Fと0x000fは違うし、タプ区切りで見ますよとい
う意味ですか。どちらも違うようなきがします。ま、とりあえず書いておけばいいと
は思いますが…


filter "" , "Sort" , "000000100001000\"11";
第1パラメータの「変換モジュール名」はマクロヘルプに
「変換モジュール名に "" (何も無い文字列)を指定すると、標準の変換モジュール
(HmFilter.hmf)を使用します。」とあるのででわかりました。

関数名「Sort」はヘルプの「標準の変換モジュール(HmFilter.hmf)の関数名一覧」に
は載ってないですね。

マクロヘルプに
「 パラメータは、変換モジュールに渡す文字列のパラメータです。パラメータの内
容は、変換モジュールが自由に決めることができます。パラメータは省略可能です。
 変換モジュールのパラメータを調べるには、「キー操作の記録開始/終了」と
「キー操作の保存...」を使う方法があります。
」とあるので例示していただいたようにキー操作の記録をすればわかるというわけで
すね。マクロヘルプで検索しただけでは「ソート」も「Sort」も出てこないのでちよ
っと私には難しかったわけです。
ソート機能はないのかと勘違いしそうになりました。そんなはずはないと思って質問
メールしたわけです。

自作マクロでは、第3パラメータの省略は可能でしょうか?
第2カラムでソートはどこで指定したことになっていますか。
第1カラムにしたい場合どこをどう変えればよいのかわかりません。

rosegardenより





[ ]
RE:28337 秀丸ファイル内のタブ区切りデーNo.28338
秀丸担当 さん 10/05/28 12:42
 

>自作マクロで、追加登録の都度このマクロの後半でソートさせたいと考えています。
>ソートだけのマクロを作って自動起動させることは考えていません。

そういうことでしたか。
それでしたら自動起動マクロでなくて済むと思うので特に問題は無いと思います。

>setcompatiblemode 0x0F;
>はマクロヘルプにある
>「setcompatiblemode 0x000f; (つまり 0x0003 | 0x000c)とすると、折りたたみと
>部分編集を無視せずにマクロを動作させることができます。」のことでしょうか。

マクロヘルプにあるこのことと同じです。
0x0Fと0x000fは同じ意味になります。
このマクロの例は自分で書いたのではなくて、キー操作の記録をしたのものを保
存したものでした。

>関数名「Sort」はヘルプの「標準の変換モジュール(HmFilter.hmf)の関数名一覧」に
>は載ってないですね。

確かに載っていませんでした。
次のバージョンのヘルプには追記させていただきます。

>自作マクロでは、第3パラメータの省略は可能でしょうか?
>第2カラムでソートはどこで指定したことになっていますか。
>第1カラムにしたい場合どこをどう変えればよいのかわかりません。

第3パラメータは省略できます。
省略した場合は、メニューから[編集]→[変換]→[ソート]と選んだときと同じよ
うにダイアログが出るようになると思います。
カラムの指定は、第3パラメータの9文字目から12文字目を16進数で表した
もで、0から数えたもののになっています。
第1カラムは0000で第16カラムは000Fになります。
変換モジュールのパラメータは公開された仕様ではなくて、ヘルプにも書かれて
いないです。
マクロを作る場合は、キー操作の記録と保存を使えば自動的にマクロ化できるの
で、パラメータの仕様は意識せずにマクロを作ることができると思います。

[ ]
RE:28338 秀丸ファイル内のタブ区切りデーNo.28339
rosegardenyk さん 10/05/28 14:12
 
>第3パラメータは省略できます。
>省略した場合は、メニューから[編集]→[変換]→[ソート]と選んだときと同じよ
>うにダイアログが出るようになると思います。
>カラムの指定は、第3パラメータの9文字目から12文字目を16進数で表した
>もで、0から数えたもののになっています。
>第1カラムは0000で第16カラムは000Fになります。

テストしたところうまくいきました。ありがとうございます。本当に助かります。


初心者の愚問にもうひとつだけ答えてください。
マクロでディスク上の「既存のtext」ファイルを秀丸エディタに
表示させる方法がわかりません。
filenameが判っているので
openfile filename;
としても新規OPEN扱いになってしまいます。そして今開いてるファイルのあるdirect
oryにfilenameをbasenameとしてできるようです(多分)。
どこかに初心者の落ちやすい穴にはまっていると思いますが、なかなか抜けられませ
ん。
 
以下のマクロで新規オープンではなく「既存のtext」ファイルを秀丸でみれるように
するにはどうしたらよいでしょうか?
#ph_no = findhidemaru($PhFile);
if (#ph_no == -1) { //オープンされてなければ、新規オープン
openfile directory + "\\" + $PhFile;
} else { //オープンなら移動
setactivehidemaru #ph_no;
}

[ ]
RE:28339 秀丸ファイル内のタブ区切りデーNo.28340
秀丸担当 さん 10/05/28 14:52
 

既存のテキストファイルがどこの場所にあるのかがわからないと開くことはでき
ないと思います。

directoryキーワードは現在のフォルダを表していて、状況によって変化します。
現在開いているファイルが「C:\現在フォルダ\現在ファイル.txt」だとすれば
「C:\現在フォルダ」になります。
ショートカットから起動時して新規作成状態のときは、最後に使用したフォルダ
になります。
「新規作成」コマンドで新規作成するときは、実効元の秀丸エディタのフォルダ
を引き継いだりします。

状況によって違うので、目的のファイルが現在のフォルダとは別のフォルダにあ
るのであれば
directory + "\\" + $PhFile とするのはあまり意味が無いかもしれません。

マクロの動作確認のときは、
message directory;
として確認してみるといいかもしれないです。

目的のファイルの場所が事前にわかっているのであればフルパスで書いて、

  $PhFile="C:\\目的フォルダ\\既存のtext.txt"
  #ph_no = findhidemaru($PhFile);
  if (#ph_no == -1) {
    openfile $PhFile;
  }

というようにすればいいかもしれません。

[ ]
RE:28340 秀丸ファイル内のタブ区切りデーNo.28341
rosegardenyk さん 10/05/28 15:37
 

愚問に即答ありがとうございます。
 $PhFile="C:\\目的フォルダ\\既存のtext.txt"
  #ph_no = findhidemaru($PhFile);
  if (#ph_no == -1) {
    openfile $PhFile;
  }

という形はわたしも試していました。
ただし一点を除いての話です。
 $PhFile="C:\\目的フォルダ\\既存のtext.txt";
ではなく、タイプミスを避けるため、ファイルへのショートカット作ってそのプロパ
ティーのフルパスをただそのままコピー&ペーストして
 $PhFile="C:\目的フォルダ\既存のtext.txt";
としていたのでした。
\\と重ねて書くことでテストに成功しました。ありがとうございます。
openfile文に不慣れなせいもあって、単純だけど初心者の私には判りにくい落とし穴
にはまっていました。重ねて御礼を申し上げます。
例示したマクロに"\\"+と書いてありますが上級者の一部をコピーしただけなので、
気が付きませんでした。"xxx"の中の記述は要注意ですね。

[ ]