TSVモードでの[貼り付け]で落ちるNo.04446
naanfushi さん 09/11/13 08:05
 
【概要】
 TSVモードの場合、情報量が多いと貼り付けに時間が掛かります(これは承知の上
での作業です)が、貼り付け中等に当該秀丸をクリックしてしまうと、「共有メモリ
の確立に失敗…」等となり、落ちるようです。

【再現経緯】
 TSVモードで、エクセルで苦労していた文字列系の操作が秀丸で劇的に改善されそ
うなので、実際に移行できるか、色々試験を行っております。
 その中で、現行では「選択した列のみを置換対象にできない」ための対応として、
簡単な置換は当該ファイル上でのマクロで対応していましたが、複雑な処理が必要な
列の文字情報は、ステルス秀丸上で処理をして、改めて元のファイルに[貼り付け]で
対応することにしました。
 500行程度のTSVだと問題なく処理が完了するのを確認。続いて270,000行程度(6項
目、約24M)の試験では、貼り付けのための列削除に1〜2分、実際の貼り付けには7
〜8分(以上?)程度かかりました(Pen-4 3.6GHz RAM:2Gという古い環境での、TSV
への貼り付けなので当然でしょうが…)。
 その過程で、下記の2種の操作で秀丸が落ちることを、特殊なTSVだけでなく比較
的簡単な構造のTSVでも再現することが当方の環境下で確認できました。

【再現手順の前提】
1.名前、ヨミ、郵便番号、住所、電話、メアドという単純なTSVを用意。
 (以前、「[タブ->空白]変換で落ちる」で使ったファイルを複数回コピーして作っ
たファイルでも再現を確認)
2.TSVモードにする
3.郵便番号(半角数字)を列で選択してコピー
4.新規秀丸上で貼り付け
5.全角に変換
6.TSVモードで列選択してコピー
7.元の秀丸上で、郵便番号を列選択して貼り付け

 以上の操作を実施。500行程度の場合は問題なく遂行されますが、少し大きなサイ
ズの場合には、下記の症状が現れました。

【症状1】
 上記7.の[貼り付け]中に、当該秀丸をクリックすると、メニューバーが白くなり、
落ちます。
 具体的には、[貼り付け]作業中の秀丸につい触ってしまう(クリックまたはウィン
ドウ移動)と、メニューバーが白くなり、落ちます。続いてデスクトップ上の秀丸を
ダブルクリックして立ち上げようとすると、下記のダイアログが表示されます。
+-----------------------------------------
秀丸エディタ
 共有メモリの確率に失敗しました。(04)
 何らかの理由により、hidemaru.exeが残留してしまっている可能性があります。
 Ctrl+Shift+Escを押してタスクマネージャーで確認してみてください。
 起動時に渡されたコマンドライン引数
 「なし」
+-----------------------------------------
(このダイアログが秀丸によって出されているものなのか、Windowsが出しているの
かも、私共では不明ですし、ハード依存の可能性も否定できないと思われます)

【症状2】
 何を触らないでいると、完全に貼り付けが完了します。
 これを確認した後、[やり直し]を実行すると、「やり直し中...XXXX個」といった
ダイアログを表示しながらやり直しを実行するのですが、途中で停止してしまいます。
 例えば、よく再現するのが、26400個位をやりなおして、ダイアログも消える、と
いう落ち方。当該ファイルを確認すると、250000行以下では郵便番号が消えており、
それより上の行は、郵便番号がそのままの状態で停止します。
(これまた、メモリ量などの環境依存性の動作かもしれませんが…)

 機種依存性も高いとも思われましたが、一応、ご状況説明のみ、ご報告した次第で
す。
 以上、再現すればご対応をお願い致します。

[ ]
RE:04446 TSVモードでの[貼り付け]で落ちNo.04457
秀丸担当 さん 09/11/13 13:16
 

>【症状1】
> 上記7.の[貼り付け]中に、当該秀丸をクリックすると、メニューバーが白くなり、
>落ちます。
> 具体的には、[貼り付け]作業中の秀丸につい触ってしまう(クリックまたはウィン
>ドウ移動)と、メニューバーが白くなり、落ちます。続いてデスクトップ上の秀丸を
>ダブルクリックして立ち上げようとすると、下記のダイアログが表示されます。

報告ありがとうございます。
おそらく、処理に時間がかかっているため、応答なしになっている状態なのだと
思います。
処理に時間がかかっている場合、Windowsによって応答なしの表示になるのです
が、XPまではタイトルバーに(応答なし)が表示されるだけでしたが、Vista以降
ではウィンドウが白くなるようになりました。
もしかしたら処理が終わるまで待つと回復するかもしれません。

新しく起動しようとした秀丸エディタも、既存の秀丸エディタとのやりとりに失
敗して共有メモリの確立に失敗と出ているのだと思います。。

TSVモードでのカラム幅計算はサイズが大きいと時間がかかりやすいので、ある
程度時間がかかる場合は「計算中」のような表示をして、クリックに対する応答
がある状態にしたほうがよさそうです。
似たような例では、「折り返し計算中...」や「やり直し処理中...」のダイアロ
グが出る例があり、これと同じようなことをすればいいかもしれません。
すぐにはできないかもしれませんが、そのような方向で検討させていただきます。


>【症状2】
> 何を触らないでいると、完全に貼り付けが完了します。
> これを確認した後、[やり直し]を実行すると、「やり直し中...XXXX個」といった
>ダイアログを表示しながらやり直しを実行するのですが、途中で停止してしまいます。
> 例えば、よく再現するのが、26400個位をやりなおして、ダイアログも消える、と
>いう落ち方。当該ファイルを確認すると、250000行以下では郵便番号が消えており、
>それより上の行は、郵便番号がそのままの状態で停止します。
>(これまた、メモリ量などの環境依存性の動作かもしれませんが…)

こちらは、やり直しバッファがいっぱいになって途中までしかできていない状態
だと思われます。
[その他]→[動作環境]→[パフォーマンス]→[詳細]の「やり直しバッファサイ
ズ」でサイズが指定できて、バッファサイズを超えたぶんはやり直しできなくな
ります。
一応これは仕方ない状態なのですが、グループ化されたまとめてやり直しが行わ
れて、それが途中で終わってしまう場合は何らかの警告と理由を表示したほうが
いいかもしれません。
こちらもそういう方向で検討したいと思います。

[ ]
RE:04457 TSVモードでの[貼り付け]で落ちNo.04491
naanfushi さん 09/11/17 15:35
 
>【症状2】
 バッファの問題であれば、仕様と言う事で、現行では仕方ないかもしれません。
 その一方で、多くの秀丸ユーザは秀丸に「絶対的な信頼」を(勝手ではあります
が)持っていると思われます。もちろん500Gbのファイルを0.1秒で開け、と思うユー
ザはいませんが、少なくとも巨大テキストファイルも安全に開閉でき、基本的な編集
作業(「やり直し」や「やり直しのやり直し」など)は、不安無く行える…、と
(ハードやソフトの物理的な仕様限界などは考えもしないで)思い込んでいるユーザ
は極めて多いと思われます。

 その基本操作のひとつである「やり直し」が「やり直し処理中というダイアログま
で表示しつつ、かなり長時間をかけた作業をした後、途中で何も言わないままで停止
する」というのは、やはり厳しい気がします。作業経過を見せる事は、ユーザにとっ
ては「処理が完了した」との安心感を与え兼ねない動作です。バッファオーバーとい
う明確な理由があるにせよ、何らかの手段で現状を改修した方が、『秀丸ブランドへ
の絶対的な信頼性』という観点からも、得策ではと思われます。
 以下に緊急避難的な対策と、望ましい本質的な対策を、素人なりに考えてみました。

【対処案1】
 素人が考える範囲ですが、もっとも簡単な対処案としては、確認メッセージを出し
てユーザに「やり直し不可な作業をする」という注意喚起をする方法があろうかと思
われます。
 具体的には、範囲選択後、範囲選択領域を概算して、バッファを大きく上回るよう
な場合、「切り取り」等を実施しようとすると(実行する前に)、「範囲指定された
データ量は、やり直しバッファを上回っているため、やり直しなどの操作ができませ
ん。このまま処理を続行しますか?」等と確認メッセージを出して、やり直しができ
ない処理であることを告知・確認する方法です。
(この方法は簡単ですが、やり直しができないことには変わりありません)

【対処案2】
 やり直しの量がバッファを超えた場合、一時ファイル等を使うことで、やり直しを
実現しつつ、その処理に時間がかかると思われるため、その選択をユーザに任せる方
法も考えられます。
 例えば、「切り取り」などのやり直しが求められる可能性のある作業で、なおかつ、
現行のやり直しが不可能な巨大な範囲の場合、まず、範囲指定が終了した時点で必要
なら警告を発し、やり直しが求められる処理に対しては、たとえ速度は遅くなっても
(一時ファイルに書き出すなりして)、確実にやり直しが出来る仕様に改造します
(こうした処理が可能かどうかは不明ですが…)。
 イメージとしては【対処案1】の様に、範囲選択された時点で処理量を算出して、
バッファを大きく超えて、やり直しが再現できないと判断される場合は、「やり直し
可能なバッファを超えています。処理を選択して下さい。(1)やり直しを可能にす
るため、処理に時間がかかりますが、一時ファイルに書き出す処理を行う。(2)速
度を優先するため、やり直しをしないことを前提に、このまま処理を実行する」みた
いな確認ダイアログでユーザに操作を選択させる、というのが、ユーザ側の使い勝手
からすると、良いように思われます。
(一時ファイルへの書き出しなどで対応できるのか、全く不明です。ただ、何らかの
処置で、時間がかかってもやり直しを保証することは、エディタとしてのある意味で
生命線であるような気もします)

 ※ バッファを超えて、正常にやり直しができない状態の中途半端なバッファに対
する処理(中途半端だから消去するとか、そのままとか)も、改善する必要があるよ
うに思われます。

 こうした比較的大きな量のやり直しは個人的には必要ないので、現行の仕様でそれ
ほど問題は無いと言えば無いのですが…。ただ、「途中で作業を止めてしまう…」と
いう動作だけは、「絶対的な秀丸への信頼」という観点からも、やはり何らかの手当
が必要と思われます。

[ ]
RE:04491 TSVモードでの[貼り付け]で落ちNo.04496
秀丸担当 さん 09/11/17 17:05
 

やり直しに関して、対策案ありがとうございます。

BOX切り抜き/貼り付けは内部的には、全置換のやり直しの「まとめて」と同じよ
うな扱いになっていて、マクロでいうところのbegingroupundo;〜endgroupundo;
の間に情報の断片が幾つもあるという感じになっています。

通常範囲選択の切り抜き/貼り付けは断片ではないのでこういった問題は起きない
です。

やり直しバッファは、バッファを越えたぶんが古いほうから順に削除されていき
ます。
情報の断片は1つずつ削除されて、BOX切り抜き/貼り付けの場合は途中で切れる
ということがありえる状態になってしまいます。

とりあえず、β26では途中で切れた場合は理由を表示するように修正させていた
だきます。

使う側にとってはBOX選択か通常選択かはどちらでも同じことであって、これはプ
ログラムの都合でしかないので、なんとかうまいことできたほうがいいと思いま
す。
いい解決方法があればいいですが、今後の課題ということにさせていただこうと
思います。

[ ]
RE:04496 TSVモードでの[貼り付け]で落ちNo.04526
naanfushi さん 09/11/20 21:43
 
 内部的には素人には計り知れない複雑な処理が行われているのだろうとは拝察致し
ます。
 個人的には、それほど巨大なファイルを扱う事はないので、喫緊の問題ではないの
ですが、時間はかかっても何らかの方法(例え、時間がかかっても)で対応して頂け
れば、「秀丸エディタへの絶対的な信頼感」が更に強固になると期待します。
 
 なお、BOX系の処理ではなくても、例えば1行が「123−4567」といった文
字列だけの行が27万行あるようなファイルでは、全体を範囲選択して[削除]を実行す
ると、「やり直し」も「やり直しのやり直し」も無効になるようです(メニューも
ツールバーのボタンもグレーアウトします)。これもバッファに関連した症状で、正
当な動きとも言えますが、もう少し複雑な内容のファイルのTSV等で、意外と簡単に
[DEL]とかを何気なくやってみる、といった行為も軽々に行われてると思われます。
それは何にも増して「やり直しができるから」です。
 そうした操作をした跡で、「あ、やり直しができない!」と気づくと、かなり厳し
い感じもします。
 操作性や全体の応答性などの問題もあろうかと存じますが、「やり直し等ができな
くなる操作は実行前に確認表示する」といったオプションも、とりあえずの対処療法
としては必要かもしれません…。

[ ]