アップ中のマクロと関連してNo.03187
kendo さん 02/06/15 09:46
 
kendoです。いつもお世話になります。

 「鶴亀メール」のマクロライブラリーに

 「テキストソート・同一行整理マクロ」

という便利なマクロがあらたにアップされています。(私の場合、「秀丸」で使用す
ることも多いです。実際に作者の方も「秀丸」用のマクロとしてのアップも考えてい
たようです。)

 さて、アドバイス願いたいのは次のことです。

 この便利なマクロを使い始めてちょっと連想したのですが、かつてdosのプログラ
ムで『ftag』という便利なものがありました。(ヴェクターでは http://www.vecto
r.co.jp/soft/dos/business/se012028.html?site=n )

 これはある「タグ」で始まる、複数行もありうる文字列を一つのセットと考えまし
て、それをソートするというものでした。

 たとえば、「@」を各単位のはじまりのタグとしまして、次のテキストがあるとし
ます。

@やまだしげる 山田茂  28歳  板橋区 野球が趣味
750万円

@いいだおさむ 飯田修  30歳
630万円
ときどきカラオケに行く
競馬も好き
 
....

 こうした@で始まる複数行をそのままセットにして、「列」でソートしたり(たと
えば2つ目の列で「山田茂」と「飯田修」を使ってみたり、3つ目でしたら年齢で、
というわけです)、行で(1行目はもちろんですが、2行目の「年収」で)ソートし
たりも可能というものです。
(なお、文字列の区切りは「タグ」だったり、「スペース」だったり、optionで設定
できたような気がします。自信がありませんが。)

 このように、これはテキストファイルでデータベースを操作する上でとても便利だ
ったのですが、最近はdos窓でvzエディタなどを動かすこともなくなり、dosで仕事を
することもなくなりました。

 ですが、windowsのエディタの環境でこうしたことがしたいという気持ちはずっと
ありました。ですから、標題のマクロを使用させていただいて、そんなことを強く思
ったしだいです。
 
 どなたか、「あるタグで始まる、複数行もありうる文字列を一つのセットと考え、
それをソートする」秀丸マクロやwindowsプログラムを知っている方はいらっしゃら
ないでし

[ ]
RE:03187 アップ中のマクロと関連してNo.03188
アルビレオ さん 02/06/15 13:19
 
アルビレオです。

> どなたか、「あるタグで始まる、複数行もありうる文字列を一つのセットと考え、
> それをソートする」秀丸マクロやwindowsプログラムを知っている方はいらっしゃ
>らないでし

こういう場合は最初に1レコードをひとつの行にまとめて、ソート終了後にレコード
内の改行を元に戻すと簡単です。

// レコード中の改行文字を代替文字に置き換え
replaceallfast "\n[^@]", "\x1c\1", regular;

<行単位のソート処理>

// レコード中の代替文字を改行に戻す。
replaceallfast "\x1c", "\n", regular;

ここではレコード先頭記号を"@"、改行の代替文字として"\x1c"を使っています。
以下に理由を書きますが、"\x1c"以外は使わない方がよさそうです。
(通常のテキストキャラクタを代替文字に使うのならOKですが)

>秀まるお様
JRE32.DLLの問題だとは思いますが、
searchdown "\x00",regular;
searchdown "\x01",regular;
が正しく機能しません。
searchdown "\x02",regular;
だと「不正な処理」で落ちてしまいました。
--------
HIDEMARU のページ違反です。
モジュール : JRE32.DLL、アドレス : 017f:014f15d8
Registers:
EAX=006d0554 CS=017f EIP=014f15d8 EFLGS=00010203
EBX=004e3c02 SS=0187 ESP=006df4e0 EBP=006df534
ECX=00000554 DS=0187 ESI=004e8aac FS=5d17
EDX=00000004 ES=0187 EDI=00000000 GS=0000
Bytes at CS:EIP:
80 3c 31 03 75 f5 66 40 85 ff 75 9d 5f 5e 5b c3
Stack dump:
004e8ca4 004e8aac 004e3c64 014f1293 004e3c64 004e8aac 006df5b0 00000000 004e
3c64 004e8aac 014f36e4 004c0000 014f1a4d 004e8aac 004e3c64 006df534
--------
"\x03"以降はテストしていません。
秀丸 Version 3.16 です。

[ ]
RE:03187 アップ中のマクロと関連してNo.03189
きいろいまふらあ さん 02/06/15 17:15
 
> この便利なマクロを使い始めてちょっと連想したのですが、かつてdosのプログラ
>ムで『ftag』という便利なものがありました。(ヴェクターでは http://www.vecto
>r.co.jp/soft/dos/business/se012028.html?site=n )

> どなたか、「あるタグで始まる、複数行もありうる文字列を一つのセットと考え、
>それをソートする」秀丸マクロやwindowsプログラムを知っている方はいらっしゃら
>ないでし

それこそ、秀丸からそのftagを呼び出して使ってやってはいかがでしょう?
編集中のテキストを対象にするなら、プログラム実行で
ftag …… < CON > CON
などとしてみるとよいと思います。
……にはftagに渡すパラメータ(タグとかフィールドの指定とか)が入ります。

っと、ftagについて全然わからないのに適当に(想像で)書いてます。
#パラメータを渡す順番など違うかもしれません。

[ ]
RE:03189 アップ中のマクロと関連してNo.03190
kendo さん 02/06/15 17:20
 
きいろいまふらあさん、kendoです。ありがとうございます。
>> どなたか、「あるタグで始まる、複数行もありうる文字列を一つのセットと考え、
>>それをソートする」秀丸マクロやwindowsプログラムを知っている方はいらっしゃら
>>ないでし
>
>それこそ、秀丸からそのftagを呼び出して使ってやってはいかがでしょう?
>編集中のテキストを対象にするなら、プログラム実行で
>ftag …… < CON > CON
>などとしてみるとよいと思います。
なるほど。そういう手がありましたですね。
>……にはftagに渡すパラメータ(タグとかフィールドの指定とか)が入ります。
>
>っと、ftagについて全然わからないのに適当に(想像で)書いてます。
>#パラメータを渡す順番など違うかもしれません。
 でも、ファイル名が長いときは...... そこがちょっと気になるところですが。
 

[ ]
RE:03188 正規表現検索で異常終了No.03195
アルビレオ さん 02/06/19 02:35
 
アルビレオです。

>秀まるお様
>JRE32.DLLの問題だとは思いますが、
>searchdown "\x00",regular;
>searchdown "\x01",regular;
>が正しく機能しません。
>searchdown "\x02",regular;
>だと「不正な処理」で落ちてしまいました。

たぶんそうだろうとは思っていましたが、ヘルプにちゃんと
「(文字コード32未満のキャラクタ)は検索できません。」
と書かれていますね。
すみません、見落としていました。

ただ、正しく検索できないのはともかく、"\x02"で秀丸が異常終了してしまうのは
問題だと思います。
場当たり的な対策ですが、正規表現ONで検索文字列に"\x02"が含まれていた場合は
何か他の文字に置き換えるなどの方法で、少なくとも異常終了だけは回避しておいた
方がよいのではないでしょうか。

[ ]