マクロエラー:文字列が長すぎますNo.26360
cent さん 09/03/16 15:56
 
例えば
replaceallfast "abc.*?def", "xyz",regular ;
のような安直なマクロで
タイトルのエラーがたまに出てしまいます。

文字列の長さを事前に推測する労力と
エラーを回避する労力がかかってしまいます。

解決策はございますか?

[ ]
RE:26360 マクロエラー:文字列が長すぎまNo.26361
秀丸担当 さん 09/03/16 16:32
 

「マクロエラー:文字列が長すぎます」のエラーは、文字列型変数で長い文字列
を扱うときなどに出る場合があると思います。

例えば、

 $a = $b + $c;

でとても長くなる場合や、

 $a = gettext(seltopx,seltopy,selendx,selendy);

で大きな範囲を選択して取り込むときなどに出ると思います。

>replaceallfast "abc.*?def", "xyz",regular ;

という一文だけでは、正しく動いているとすれば、このエラーは出ないと思いま
す。
もしこの一文だけで出ているとしたら、何か不具合があるのかもしれません。
正しく動いているとすれば、何か別の箇所で出ているのだと思います。
試しにこのマクロ一文で、サンプルのテキストで

 abcXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXdef

という感じでXXXの部分がとても長いテキストで試してみましたが、エラーは出
ませんでした。

通常であれば、このエラーが出る場合は、変数に格納する前に文字数を数えてか
ら判断するなどの処理を作っていただく必要があると思います。

[ ]
RE:26360 マクロエラー:文字列が長すぎまNo.26362
アルビレオ さん 09/03/16 16:35
 
ユーザーのアルビレオです。

>例えば
>replaceallfast "abc.*?def", "xyz",regular ;
>のような安直なマクロで
>タイトルのエラーがたまに出てしまいます。

エラーになるのは".*?"の部分が正規表現としてヘンテコだからです。
* の直後に ? が来ることは普通ありえません。

できれば秀丸エディタが正規表現解釈の時点で「おかしい」というエラーメッ
セージを出して欲しいところですね。

[ ]
RE:26362 マクロエラー:文字列が長すぎまNo.26363
いいじま さん 09/03/16 16:41
 
ゆーざのいいじまです。

> エラーになるのは".*?"の部分が正規表現としてヘンテコだからです。
> * の直後に ? が来ることは普通ありえません。

*、+ のあとに ? をつけると、最短一致という意味になります。
たとえば、
abcabcabc
という1行があったときに、「a.*c」は9文字全体にマッチしますが、
「a.*?c」の場合は先頭の3文字にだけマッチします。

[ ]
RE:26361 マクロエラー:文字列が長すぎまNo.26364
cent さん 09/03/16 17:00
 

> abcXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXdef
>
>という感じでXXXの部分がとても長いテキストで試してみましたが、エラーは出
>ませんでした。

replaceallfast "abc.*?def", "xyz",regular ;
replaceallfast "abc.+?def", "xyz",regular ;
の意味もヘルプと
出版物で理解した上でお聞きしています。

テストした結果
XXXXXX は約7kbyte位はOKで
XXXXXX は約8kbyte位はNGです

この違いは仕様でしょうか?
もしも仕様なら
XXXXXXX 約7kbyteを1MB位にしていただきたいです。

事前に分かっていればそういったマクロを
作りますが
文字列の長さを事前に推測する労力と
エラー時にエラーを回避する労力がその時に
かかってしまいます。

[ ]
RE:26364 マクロエラー:文字列が長すぎまNo.26365
秀丸担当 さん 09/03/16 17:21
 

>replaceallfast "abc.*?def", "xyz",regular ;

このマクロ一文だけであれば、V7.10でこちらで試した限りでは、エラーは出ま
せんでした。
8KB以上でも、問題なくできています。

もしこのマクロ一文だけでなく、変数に格納したり、関数を使ったり、「+」で
文字列を連結したりとかしている場合、そこで起きているのだと思いますが、そ
こで 8KB 以上でエラーとなるのは仕様です。
変数格納したりするサイズを増やすのは、内部的な都合もあって簡単ではないの
ですが、検討しなければいけないかもしれないです。

[ ]
RE:26364 マクロエラー:文字列が長すぎまNo.26366
Iranoan さん 09/03/16 17:24
 
 cent さん今日は、Iranoan です。
 念の為お断りしておくと、開発者とは何の関わりも無い単なる一ユーザです
が、私も試して見ました。
 環境は OS が Windows XP です。ただし秀丸エディタ Ver.7.11β2 浮動小
数点数版で、HmJre.dll は秀丸メールのβ版には同梱されているけれど、秀丸
エディタにはまだ同梱されていない Ver.1.96 と使っているので、ひょっとす
ると、その辺りの違いがあるかもしれませんが。

 まず
> > abcXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXdef
この X の部文の異常に長い 2 MB ほどのファイルを作成しました。それに対
して、
> replaceallfast "abc.*?def", "xyz",regular ;
> replaceallfast "abc.+?def", "xyz",regular ;
を実行しましたが、エラーは起きませんでした。

 可能ならば、実際に使用している
・マクロ
    書き込まれたのはあくまでサンプルで、実際にエラーになるマクロでは無
    いですよね
・サンプル・ファイル
    これは特定のファイルでのみ起きる時に限りますが...
を書き込まれたほうが解決が早いと思います。

[ ]
RE:26363 マクロエラー:文字列が長すぎまNo.26367
アルビレオ さん 09/03/16 17:51
 
アルビレオです。

>*、+ のあとに ? をつけると、最短一致という意味になります。

そうでした。どうも最短一致とかの拡張正規表現はあまり使わないので忘れるこ
とが多くて(^^;
すみませんでした。

[ ]
RE:26365 マクロエラー:文字列が長すぎまNo.26368
cent さん 09/03/17 01:38
 

>もしこのマクロ一文だけでなく、変数に格納したり、関数を使ったり、「+」で
>文字列を連結したりとかしている場合、そこで起きているのだと思いますが、

ほぼご指摘の通りの使い方を行っています。
変数を工夫し改善はしましたが
やはりエラーを吐いてしまいます。

仕様を考慮して、改善に時間を費やすことは
無意味に感じます。

ところでご質問ですが
Q1 マクロエラー:文字列が長すぎます の意味は何でしょうか?
Q2 Float v 7.10 を使っていますが64bit版では変わりますか?
Q3 エラーの場合プロセスHidemaru.exeを一つずつ終わらせる必要がありますが解決
策はございますか?

よろしくお願いいたします。

[ ]
RE:26368 マクロエラー:文字列が長すぎまNo.26369
秀丸担当 さん 09/03/17 09:47
 

>ほぼご指摘の通りの使い方を行っています。
>変数を工夫し改善はしましたが
>やはりエラーを吐いてしまいます。
>
>仕様を考慮して、改善に時間を費やすことは
>無意味に感じます。

申し訳ありません。
現状では、いろいろ工夫していただくしかないと思います。

>ところでご質問ですが
>Q1 マクロエラー:文字列が長すぎます の意味は何でしょうか?

繰り返しになりますが、文字列型変数で長い文字列を扱うときなどに出と思いま
す。

例えば、

 $a = $b + $c;

でとても長くなる場合や、

 $a = gettext(seltopx,seltopy,selendx,selendy);

で大きな範囲を選択して取り込むときなどに出ると思います。
あと、変数に格納しなくても、関数の結果として長い場合も出ることがありまし
た。

 message gettext(seltopx,seltopy,selendx,selendy);


>Q2 Float v 7.10 を使っていますが64bit版では変わりますか?

64bit版でも変わらないです。

>Q3 エラーの場合プロセスHidemaru.exeを一つずつ終わらせる必要がありますが解決
>策はございますか?

どういうマクロなのか分からないのでなんとも言えないですが、通常であれば、
メッセージが出た後、普通に終了させることができると思います。
もしかしたら、showwindow 0;をしている最中に出た場合は、見えないままのウ
ィンドウが残ってしまうこともあるかもしれません。
見えないウィンドウがある場合、もしかしたら適当に新規作成して、[ファイル]
→[全終了]すると終わらせることが出来る場合もあるかもしれないです。
他にも残ってしまうケースがあるのかもしれないですが、今考えた限りでは思い
つきませんでした。

[ ]
RE:26361 マクロエラー:文字列が長すぎまNo.26745
cent さん 09/06/20 07:45
 
再び上記のエラーで苦しんでいます。


>例えば、
>
> $a = $b + $c;
>
>でとても長くなる場合や、
>
> $a = gettext(seltopx,seltopy,selendx,selendy);
>
>で大きな範囲を選択して取り込むときなどに出ると思います。



> $a = gettext(seltopx,seltopy,selendx,selendy);

上記のケースで 
マクロエラー:文字列が長すぎます 
を出さないようにするにはどうしたらよろしいでしょうか?

仕様でしたら代替回避方法はありますか?
改善の予定はありますか?

$aは 現在 18KBから100KB くらいです。


[ ]
RE:26745 マクロエラー:文字列が長すぎまNo.26749
秀丸担当 さん 09/06/22 10:05
 

>上記のケースで 
>マクロエラー:文字列が長すぎます 
>を出さないようにするにはどうしたらよろしいでしょうか?
>
>仕様でしたら代替回避方法はありますか?

現状では、このエラーが出る場合は、変数に格納する前に文字数を数えてか
ら判断するなどの処理を作っていただく必要があると思います。
centさんの以前のコメントで言われている通り、文字列の長さを事前に推測する
労力とエラー時にエラーを回避する労力が必要、ということになってしまうと思
います。申し訳ありません。

あるいは、どのようなマクロなのかわからないのでなんとも言えませんが、もし
クリップボードにコピーして済ませられるような処理であれば、制限は無いので
クリップボードを使って回避できるかもしれません。
copy文やpaste文のほかにも、setclipboard文やaddclipboard文などの文もありま
す。

>改善の予定はありますか?

centさんからご意見をいただいたことで、V8.00ではより大きな文字列も扱えるよ
うに改善を検討しています。
V8.00はβ版を7月末までには公開を始める予定です。

[ ]
RE:26749 マクロエラー:文字列が長すぎまNo.26752
cent さん 09/06/22 13:04
 

>>改善の予定はありますか?
>
>centさんからご意見をいただいたことで、V8.00ではより大きな文字列も扱えるよ
>うに改善を検討しています。
>V8.00はβ版を7月末までには公開を始める予定です。


毎度、ご丁寧な回答ありがとうございます。

>V8.00はβ版

で推測せずに入れ出しできるversionの
一日も早い公開を期待いたします。


[ ]