特殊な?文字の扱いNo.12690
YKN さん 02/08/09 14:58
 
ディスプレー上でみると、黒いベタ塗りの長方形の中に、ABCDなどのアルファベット
が白抜きで現れる文字が、「普通の」文字列とともに入ったファイルがあります。こ
の特殊な?文字部分をすべて削除して、「普通の」文字列だけにしたいと思っていま
す。
ためしに、以下の操作をしました。
この文字の入力のしかたがわからないので、そのファイルから問題の文字1つを、CT
RL+Cで「文字置換」の置換前のところにコピーし、置換後には「何もなし」の状態に
して全置換しました。
ここまでは問題なくできます。
しかし、問題の文字をできるだけたくさん集めてきて、置換前のところに一括して並
べ、それを[ ]でくくって、「正規表現」にチェックを入れて置換したところ、「括
弧の対応が間違っている」などという警告が出て、うまくいきません。
中間的に?問題の文字を二つか三つだけ並べ[ ]でくくり、「正規表現」に
チェックを入れると、うまくいく(場合もある?)ようです。
効率的にこれらの文字を削除する方法はないものでしょうか。
ちなみに、windows98を使っています。
以上よろしくご教示のほどお願い申し上げます。

[ ]
RE:12690 特殊な?文字の扱いNo.12691
たけのこ さん 02/08/09 15:20
 
たけのこです。

12302からのスレッドが参考になるかな? 会議室で検索をクリックして12302の
題名を検索してみてください。

[ ]
RE:12691 見てみましたが...No.12695
YKN さん 02/08/09 17:37
 
早速のご教示ありがとうございました。ご教示のところを見てみました。
無知のため、理解できていないところが多いのですが、私の問題のファイ
ルは、
・中国語などの外国語の文字が含まれているわけではない。
・「テキスト+キーワード+書式?+検索関係の情報?」が入ったファイル
のようです。従って何かのプログラムに関わるものかもしれません。

というような状態です。もし何かの手だてがあるとありがたいのですが...

[ ]
RE:12695 見てみましたが...No.12699
encodingshiftjis さん 02/08/09 22:32
 
>というような状態です。もし何かの手だてがあるとありがたいのですが...

バイナリーのDUMP表示を出すとか
バイナリーエディタで眺めて、検討してみましょう
コードの範囲がわかるかもしれません。

こういう生の状態はテキストエディタの領域とは
チョットずれているのでは。
テキストエディタは真っ当な文字でないものは
扱えなくとも責任ありません。
バイナリーのモードがあるエディタもありますが。

[ ]
RE:12699 お礼No.12702
YKN さん 02/08/10 16:45
 
ありがとうございました。バイナリーの扱えるエディター
をダウンロードして、ファイルをちょっと覗いてみました。
ただ、たまたまダウンロードしたものは、正規表現(のようなもの?)
は使えないようで、どうもなかなかラチがあきません。こういった
ファイルは「プロ」でないとむずかしいのでしょうね。
というわけで、当面このファイルを加工することは断念せざるをえない
ようです

ところで、まっとうでない文字が混じったままのファイルについて、秀
丸でgrepや検索・置換を行った場合、何かマズイことが起こるのでしょ
うか。素人のバカな質問ですが、教えて頂けるとありがたいのですが。


[ ]
RE:12702 お礼No.12703
encodingshiftjis さん 02/08/10 21:55
 
>ところで、まっとうでない文字が混じったままのファイルについて、秀
>丸でgrepや検索・置換を行った場合、何かマズイことが起こるのでしょ
>うか。素人のバカな質問ですが、教えて頂けるとありがたいのですが。

縁石ギリギリを走ったらどうなるか、に注意する態度は良いです。

製品の作り方としては、範囲内は保証、範囲外はビックリしない
程度のことが起こる。を社会契約として想定するのがいいのでは。

情報量0かもしれませんが、検証(バリデート)は困難です。

テキストエディタの経験では、不正文字はほとんど見えない
扱いになるようです。プログラムは不正文字では異常終了
しないように作ります、それまで存在したテキストが消えると
損害が大ですから。

ただ、不正文字があるテキストを開いて保存したとき
不正文字が消えたり変化しても、ありえる事です。
バイト数の変化でわかりますが。

不正文字を完全保存するタイプのエディタを探すと
データの調査には役に立ちます。
(普通ではそういう機会はめったにないが)

[ ]
RE:12703 お礼No.12704
YKN さん 02/08/10 23:12
 
非常に有益なご教示ありがとうございました。
私がやろうとしていることは「縁石ギリギリを走る」行為なのですね。
教えて頂いたことを頭に入れて、作業をしてみたいと思います。

[ ]
RE:12704 特殊な?文字の扱いNo.12705
山紫水明 さん 02/08/11 20:52
 
 YKNさん,こんばんは。

》ディスプレー上でみると、黒いベタ塗りの長方形の中に、ABCDなどのアルファベ
》ットが白抜きで現れる文字が、「普通の」文字列とともに入ったファイルがあり
》ます。この特殊な?文字部分をすべて削除して、「普通の」文字列だけにしたい
》と思っています。

 もしかしたら,外しているかもしれませんが,

検索文字列:[\x01-\x08\x0b-\x0b\x0e-\x1f]+
置換文字列:(なし)
正規表現 ON

で置換してみたらどうなるか試してみてください。

     では, (^^)/~
                                        山紫水明

[ ]
RE:12705 特殊な?文字の扱いNo.12711
YKN さん 02/08/13 15:46
 
山紫水明様

昨日は留守にしておりまして、お礼が遅れました。
さきほどフォーラムをのぞき、早速に試してみたところです。御教示のとおりにやり
ましたら、全部の文字は消えませんが、かなりの量の文字が消えて、ファイルサイズ
はだいぶ小さくなるようです。ありがとうございました。なお、例えば、画面上の
「黒ベタ塗りの中のA」のすべてがなくなるわけではなくて、残るものもあり、もと
もとなかった普通のアルファベットなどが残るものもありという感じです。
ちなみに、残った記号のSHIFT-JISのコードを秀丸でいくつか見てみると、0XFB02,0X
E701,0XF620,0X9805,0X9201,0X9003
などなどでした(私の調べ方が正しいのか自信がありませんが...)   

取り急ぎ御礼まで。                    YKN

[ ]
RE:12711 特殊な?文字の扱いNo.12729
山紫水明 さん 02/08/16 16:55
 
 YKNさん,こんにちは。

》昨日は留守にしておりまして、お礼が遅れました。

 こちらもその後留守にしていました。(^^;

》ちなみに、残った記号のSHIFT-JISのコードを秀丸でいくつか見てみると、
》0XFB02,0XE701,0XF620,0X9805,0X9201,0X9003

置換文字列を,
[\x01-\x08\x0b\x0e-\x1f\xfb\x02\xe7\x01\xf6\x20\x98\x05\x92\x01]+
にしてみてください。

 コード番号 0x9003 は特殊なものらしく,この方法では消せません。
 どなたか,詳しい方のフォローをいただければ幸いです。

     では, (^^)/~
                                        山紫水明

[ ]
RE:12729 特殊な?文字の扱いNo.12730
山紫水明 さん 02/08/16 20:55
 
 追伸です。

置換文字列を,

[\x01-\x08\x0b\x0e-\x1f\xfb\x02\xe7\x01\xf6\x20\x98\x05\x92\x01]+|(\x90\x03)
+

にして試してください。

     では, (^^)/~
                                        山紫水明

[ ]
RE:12730 特殊な?文字の扱いNo.12731
YKN さん 02/08/17 13:18
 
山紫水明様

再度の御教示ありがとうございました。完全とはいきませんが、さらに
たくさんの文字列が消えて、ファイルサイズはずいぶん小さくなりまし
た。検索などもだいぶスピーディーにできます。非常に助かりました。
これで何とかなりそうです。

ところで、通常の文字のコード番号は素人にも調べればわかるのですが、
こういう妙な文字と、そのコード番号の関係の一覧表みたいなものはど
こかにあるのでしょうか。
                              YNK



[ ]
RE:12731 特殊な?文字の扱いNo.12732
山紫水明 さん 02/08/17 20:00
 
 YKNさん,こんばんは。

》ところで、通常の文字のコード番号は素人にも調べればわかるのですが、
》こういう妙な文字と、そのコード番号の関係の一覧表みたいなものはど
》こかにあるのでしょうか。

 一覧表は見たことはありません。多分ないのではないかと思います。
 秀丸で一つ一つ調べていくのが,結局早道かもしれません。
 わかり次第検索文字列に加えていけば,だんだん完全に消せるようになる
と思います。

     では, (^^)/~
                                        山紫水明

[ ]
RE:12732 特殊な?文字の扱いNo.12733
Arimac さん 02/08/18 00:06
 
> 秀丸で一つ一つ調べていくのが,結局早道かもしれません。

2バイト文字の2バイト目は0x40〜0x7E、0x80〜0xFCで
なければならないので、かなり沢山あると思います・・・

バイナリーデータの場所によっては本来は可読な文字列データが
化けている可能性があるのでご注意を・・・

[ ]
RE:12733 特殊な?文字の扱いNo.12736
山紫水明 さん 02/08/18 21:12
 
 Arimacさん,こんばんは。
 ご教示ありがとうございます。

》2バイト文字の2バイト目は0x40〜0x7E、0x80〜0xFCで
》なければならないので、かなり沢山あると思います・・・

 これは今まで知りませんでした。確かにコード表をちょっと眺めたところでは
そうなっているようです。
 ということは,次のようなマクロで,不可読文字が一応消せると考えてよろし
いでしょうか(もう少しスマートなコーディングがありそうですが)。

//--------------------------------------------------------//
disabledraw;
replaceallfast "[\x01-\x08\x0b\x0e-\x1f]+", "", regular;
while( 1 ) {
    if( code == eof ) break;
    if( code & 0xff00 == 0 ) {//1バイト文字ならスキップ
        right;
        continue;
    }
    #bite = val( "0x" + rightstr( hex( code ), 2 ) );
    if( #bite < 0x40 || #bite > 0xfc ) delete;
    else if( #bite == 0x7f ) delete;
    else right;
}
endmacro;
//--------------------------------------------------------//

YKNさん,もしよろしければ,このマクロ試してみてください。

》バイナリーデータの場所によっては本来は可読な文字列データが
》化けている可能性があるのでご注意を・・・

 何かいい対策はありますか?
 テキストエディタでこれ以上のことをやるのは危険かな?

     では, (^^)/~
                                        山紫水明

[ ]
RE:12736 特殊な?文字の扱いNo.12738
Arimac さん 02/08/19 00:33
 
> ということは,次のようなマクロで,不可読文字が一応消せると考えてよろし
>いでしょうか(もう少しスマートなコーディングがありそうですが)。

文字が割り当てられてないコードは残ります・・・

>》バイナリーデータの場所によっては本来は可読な文字列データが
>》化けている可能性があるのでご注意を・・・
>
> 何かいい対策はありますか?
> テキストエディタでこれ以上のことをやるのは危険かな?

実際のフォーマットの解析が必要でしょう。
フォーマットによってはテキストエディタでできる可能性も
あるとは思います。

[ ]
RE:12738 特殊な?文字の扱いNo.12739
アルビレオ さん 02/08/19 06:18
 
アルビレオです。

>>》バイナリーデータの場所によっては本来は可読な文字列データが
>>》化けている可能性があるのでご注意を・・・
>>
>> 何かいい対策はありますか?
>> テキストエディタでこれ以上のことをやるのは危険かな?
>
>実際のフォーマットの解析が必要でしょう。
>フォーマットによってはテキストエディタでできる可能性も
>あるとは思います。

できる可能性はありますが、もうとっくにテキストエディタの守備範囲を超えている
と思います。
無理矢理マクロを使って試行錯誤するよりは perl か何かでフィルタを作った方が簡
単だと思いますから。

しかしどんな方法を使うにしろ、
・バイナリデータなのに値としては文字コードの範囲内なので削除されない場合があ
る。
 例: '0x4241' というバイナリデータが、テキストの 'AB' と区別できない。
・「テキスト」がどこから始まっているか特定できなければ、マルチバイト文字は
 正確に判定できない。
という問題は、元ファイルのフォーマットを正しく知らなければどうしようもないで
す。

ちなみに私の環境では
searchdown "\\x02",regular;
を実行すると、秀丸がページ違反で100%異常終了します。
文字列検索では文字コードの0-31は正しく検索できないという仕様です。
そういう経験もあるので、秀丸エディタでバイナリデータを編集することは
やめた方がいいといっておきます。

[ ]
RE:12732 特殊な?文字の扱いNo.12753
YKN さん 02/08/19 16:40
 
山紫水明さん・Arimacさん・アルビレオさん

皆さんいろいろ詳しく教えていただいてほんとうにありがとうございます。
やはり相当の知識がないと難しそうですね。

因みに、今回のデータは、まだMSDOSが、ある程度元気だったころに作られ
たもののようですが、このような、テキスト部分と「不正文字」部分が分
かれている(つまりテキストだけいじりたい人間にとって、まだしも都合
がよい)ものは少なくなっているのでしょうね。

遅くなりましたが重ねてお礼申し上げます。
                                                 YKN



[ ]
RE:12739 特殊な?文字の扱いNo.12756
山紫水明 さん 02/08/19 20:28
 
 Arimacさん,アルビレオさん,こんばんは。

》文字が割り当てられてないコードは残ります・・・

 それはそうですよね。

》ちなみに私の環境では
》searchdown "\\x02",regular;
》を実行すると、秀丸がページ違反で100%異常終了します。

 こちらでも同じでした。

》そういう経験もあるので、秀丸エディタでバイナリデータを編集することは
》やめた方がいいといっておきます。

 なまじ,マクロをちょっとかじっていると,悲しいかな,何でもやってみたく
なるんですよね。
 達人の目から見ると,「子供の火遊び,見ちゃおれん」というところでしょう
か(^^; 「生兵法は怪我のもと」,肝に銘じておきます。ありがとうございまし
た。

     では, (^^)/~
                                        山紫水明

[ ]
RE:12739 特殊な?文字の扱いNo.12757
Arimac さん 02/08/19 20:48
 
>ちなみに私の環境では
>searchdown "\\x02",regular;
>を実行すると、秀丸がページ違反で100%異常終了します。

実際にはJRE32.DLL側の障害?のようで、
BRegIf.DLL+BREGEXP.DLLだとちゃんと
検索できてしまいます(^^;

#自分もテキストエディタの守備範囲を超えてるとは思ってるんですがね(^^;

[ ]
RE:12753 特殊な?文字の扱いNo.12758
encodingshiftjis さん 02/08/20 01:18
 
拡張子辞典などで、ワープロ種別とかを判定したほうが
早いのでは。昔の機種の変換ソフトは今でも販売されています。
8インチや5.25インチ・ハードセクタFDや
CP/MやMP/M(三菱)で動いていた時代のは難しいですが
(読むハードが入手困難)
3.5インチの時代のはたいてい変換ソフトがある。
オフィスコンピュータの文書ソフトは絶望ですが。

[ ]
RE:12753 スキャナで読み取って「文字認識No.12759
番頭++ さん 02/08/20 03:21
 
>因みに、今回のデータは、まだMSDOSが、ある程度元気だったころに作られ
>たもののようですが、このような、テキスト部分と「不正文字」部分が分
>かれている(つまりテキストだけいじりたい人間にとって、まだしも都合
>がよい)ものは少なくなっているのでしょうね。

たぶん、テキストと何らかの書式 ??? (構造体) なのでしょうか。正規表現で検
索するより、その構造を見分けて、不要と思われる部分を削除する。そんなマク
ロを作成するのも案です。そいえば、昔 OASYS の書式をとる Vz のマクロを ...

昔のソフトは、 .txt にする機能 (テキストの取出し) が無いとか貧弱なので、
苦労します。いっそのこと、昔のソフトがあえば、印刷して、コピー機でその原
稿を拡大して、スキャナで読み取って「文字認識」みたいな案も、あるのかも知
れません。「構造体」を探し出すより、手っ取り早いかも ...

# 「読んでみ秀丸」そんなマクロ、理想かも ...

[ ]
RE:12758 特殊な?文字の扱いNo.12770
YKN さん 02/08/20 21:56
 
拡張子辞典というのがあるのですね。googleで検索したら引っかかりました。ありが
とうございます。ただ、今回のものは拡張子が付いていないの
が残念です(ある新聞の記事を集めたものです)。


[ ]
RE:12759 スキャナで読み取って「文字認識No.12771
YKN さん 02/08/20 22:00
 
なるほど、最初から眼中にありませんでしたが、そういう手もありますね。このごろ
のスキャナー・OCRソフトはずいぶん賢くなっていますし。
ただそれを決行するには、テキストの分量が多すぎるようです。

[ ]
RE:12753 特殊な?文字の扱いNo.12779
Arimac さん 02/08/21 09:35
 
>因みに、今回のデータは、まだMSDOSが、ある程度元気だったころに作られ
>たもののようですが、このような、テキスト部分と「不正文字」部分が分
>かれている(つまりテキストだけいじりたい人間にとって、まだしも都合
>がよい)ものは少なくなっているのでしょうね。

多分固定レコード長、固定フィールドのファイルなんでは?
恐らくプログラムのできる人が見れば簡単にコンバータが
出来てしまいそうな感じですね(^^;

[ ]
RE:12770 特殊な?文字の扱いNo.12790
encodingshiftjis さん 02/08/21 23:30
 
マイナーの度合いが強よそうですね
新聞CTSや記事DBなら、メーカーに頼むと高額な請求が来るでしょうね。
ハッカー級の眼力で16進リストを読まないと、がんばってください。

直近の関係ソフトメーカーが集まるのは

プリンテック・東京グラフィックスフェア合同展
http://www.printek-tokyo-graphics.com/
です。機械メーカーが主体でソフトは少ないですが。
IGAS(国際グラフィックアーツ展)と
JANPS(新聞製作技術展)は2年毎で今年はありません

[ ]
RE:12690 専用のソフトがあったのでしょうNo.12793
番頭++ さん 02/08/22 07:03
 
># 簡単な、エスケープシーケンスだと、期待して ...

専用のソフトがあったのでしょう !!! <== 難しい ...

案その壱: 必要な文字を、サーチして、
searchdown "著作権者:□□□□□95.*(全.*文字) +\\[95[0-9]+\\]", regular;
copy; その後、クリップボードか他の秀丸に貼る、
insert "\n\n"; こんな処理をループさせるとか、ではダメですか ???

注:95 は西暦でしょう、□ は社名に置き換えて、と思います。
また、この投稿には全角の空白を含んだマクロがあります。
ブラウザから Copy & Paste してください。

[ ]
RE:12793 専用のソフトがあったのでしょうNo.12797
YKN さん 02/08/22 16:48
 
>案その壱: 必要な文字を、サーチして、
>searchdown "著作権者:□□□□□95.*(全.*文字) +\\[95[0-9]+\\]", regular;
>copy; その後、クリップボードか他の秀丸に貼る、
>insert "\n\n"; こんな処理をループさせるとか、ではダメですか ???

ありがとうございました。秀丸ではキーボードマクロしか使ったこと
がないのですが、著作権者:□□□□□95.*$ →ナシで置換すると
そこそこ行くのですが、「もっと簡単にしてください」と叱られてしまい
ました。



>
>注:95 は西暦でしょう、□ は社名に置き換えて、と思います。
>また、この投稿には全角の空白を含んだマクロがあります。
>ブラウザから Copy & Paste してください。

[ ]
RE:12797 専用のソフトがあったのでしょうNo.12798
YKN さん 02/08/22 16:51
 
すみません。書きかけのコメントを間違って投稿してしまいました。
以下、もう少し作業をしてから再度投稿します。お詫びまで。
削除できればいちばんいいのですが。

[ ]
RE:12797 専用のソフトがあったのでしょうNo.12800
番頭++ さん 02/08/22 18:38
 
「□□□□社」はそのように変更します。はい。

//*1 *** Macro for 「秀丸エディタ」***
//*1    QC12.mac - 番頭++ - 2002 / 熱帯夜

//*1 【使用方法】
//*1    ・「秀丸エディタ」の「マクロの使用方法」は「ヘルプ」等を参照してくだ
さい。
//*1    ・「データ」と「コピー先」の 2 つのファイル (窓) 、だけ、を開いてお
いて、
//*1    「データ」ファイル (窓) を開いて、このマクロを実行してください。    
//  手抜き !!!

//*1 【注意】
//*1    ・このマクロは全角の空白文字「 」を含んでいます。
//*1    ・このマクロを見る時には、
//*1    [その他] - [ファイルタイプ別の設定] - [表示]
//*1    - 全角空白を記号で表示] を指定してください。    //  お勧めです。
//*1    ・「マクロの登録」を行うと便利かも。    //  お勧めです。
//*1    ・このマクロを実行する時には、
//*1    [その他] - [動作環境] - [ユーザーインターフェース]
//*1    - [検索での表示] - [範囲選択] を指定してください。  //  手抜き !!!

//*2 【自力による変更箇所】
//*2    このマクロの次の行を、「自力で変更」してください。
//*2    // はコメントの始まりです。
//*2    ・西暦を指定する。
    $yy = "95"; //*2    西暦 (多分) を指定する。    <== 変更して !!!
//*2    ・会社名を指定する。
    $kk = "□□□□社"; //*2    会社名を指定する。  <== 変更して !!!
//*2    これが「検索文字列」になります。
    $wk9 = "著作権者:" + $kk + $yy + ".*(全.*文字) +\\[" + $yy + "[0-9]+
\\]";
//*2    searchdown $wk9, regular;   //  「正規表現」での検索です。

//*2 【わからん !!!】
//*2    最後に、「コピー先」ファイルで、この処理が必要かも、知れません !!!
//*2    replaceall "\\].\\x01\\n", "]\\n", regular, ask;

//* $searchbuffer = searchbuffer;   #searchoption = searchoption;
    #selectfound = getininum("hidemaru.ini","Env","SelectFound");
    if( ! #selectfound ){
    //  writeininum "hidemaru.ini", "Env", "SelectFound", 1;
    //  envchanged;
        message "[検索での表示] - [範囲選択] に指定してください。";
        endmacro;   //  手抜き !!!
    }
    if( hidemarucount != 2 ){
        message "「秀丸」の窓は、\n「データ」と「コピー先」の 2 つにしてくだ
さい。";
        endmacro;   //  手抜き !!!
    }
    if( updated ){
        message "「データ」は更新されています。";
        endmacro;   //  更新されている、そく中止 !!!
    }

    escape; //  [Esc]
    $file_name1 = filename2;
//* gofiletop;  //  ファイルの先頭から処理します。か ???
    if( ! readonly ){   //  上書き禁止 ???
        readonlyswitch; //  Bug 防止、回避、対策 !!!
    }
    nexthidemaru;
        #ws = tickcount + 200;  //  wait ??? - 2001/09/01
        while( #ws > tickcount ){   #wt = tickcount;    }
    escape; //  [Esc]
    $file_name2 = filename2;
    gofileend;  //  「コピー先」ファイルの最後に追加します。
    config "w80";   //  仮に、とりあえず、80 byte で折り返し
    if( $file_name2 == "" ){
        message "「コピー先」ファイル名を指定しておいてください。";
        endmacro;   //  そく中止 !!!
    }
    showwindow 0;   //  ウィンドウ非表示、処理が速いかも ...
//* showwindow 1;   //  ウィンドウ非表示では、処理が遅いかも ...
    gofileend;
    if( (x+y) == 0) {   insert "\n\n";  }   //   意味不明
    nexthidemaru;
        #ws = tickcount + 200;  //  wait ??? - 2001/09/01
        while( #ws > tickcount ){   #wt = tickcount;    }
//* message "「データ」: " + $file_name1 + "\n" + "「コピー先」: " + $file_n
ame2;

    searchdown $wk9, regular;
    while( result ){
        #seltopx = seltopx; #seltopy = seltopy;
        #selendx = selendx; #selendy = selendy;
        if( #result != 04 ){
            #result = 99;
        }
        while( #result == 99 ){
            mousemenu "この文字列を Copy しますか ???", //  01
                "(&Y) - Yes",   //  02
                "(&N) - No",    //03
                "(&U) - メニューがうるさい : 無条件の連続処理", //  04
                "(&C) - Cancel : 処理中止";     //  05
            #result = result;
        //* if( #result == 00 ){    escape; endmacro;   }   //  [Esc]
            if( #result <= 01 ){
                #result = 99;
            }
        }
        if( #result == 05 ){    escape; endmacro;   }   //  "(&C) - Cancel"
        if( #result == 02 || #result == 04 ){   //  "(&Y) - Yes" または "(&
U) - うるさい"
            escape;
            moveto #seltopx, #seltopy;  beginsel;   moveto #selendx, #selendy;
            copy;   escape;
            #i = hidemaruhandle(findhidemaru($file_name2));
            setactivehidemaru #i;
            #ws = tickcount + 150;  //  wait ??? - 2001/09/01
            while( #ws > tickcount ){   #wt = tickcount;    }
            paste;
            call pp_wakaran_1a; //  なんで !!!
            insert "\n\n";  //  とりあえず、[改行] を二個入れる ... 案。
            #i = hidemaruhandle(findhidemaru($file_name1));
            setactivehidemaru #i;
            #ws = tickcount + 150;  //  wait ??? - 2001/09/01
            while( #ws > tickcount ){   #wt = tickcount;    }
        }
        escape;
        finddown;
//*     searchdown $wk9, regular;
    }
    escape;
//* replacedown "^\\@#", "", regular;   //  AD 1995 年 吉日 - 番頭++
//* setsearch "", 0x00; setclipboard "";    //  記憶にありません !
endmacroall;

pp_wakaran_1a:  //  判らん ...
    escape;
    left;
    if( code != ']' ){
        delete;     //  なんで、その 1A - !!!
    }
    gofileend;
return;

[ ]
RE:12800 専用のソフトがあったのでしょうNo.12802
Arimac さん 02/08/22 20:32
 
元ネタが分からないので他の人にはチンプンカンプンでは?

[ ]
RE:12802 専用のソフトがあったのでしょうNo.12804
番頭++ さん 02/08/23 02:22
 
ご無沙汰しております。

>元ネタが分からないので他の人にはチンプンカンプンでは?

確かにそうですね。投稿された方は「不要な文字を取り除きたい」でした。でも、
データを見ると、完璧に、コンピュータで処理されるデータで、制御データとい
うか、書式データ (???) は、「テキスト群」の前後 (???) についていました。
しかも、ある基準で書いてあるんです。

「著作権者:□□□□社yymmddnnn」で始まり、...
「(全xxx文字)       [yymmddnnn]」で終わる。

と言うことは、それを正規表現で検索したほうが、投稿された方の「本来の要望
」に合っているのではないかと、思いました。

投稿されたかは、あまり秀丸のマクロは解からない、みたいなので、マクロを作
って見ました。ただ、バイナリーデータを含んだテキストを含んだ「正規表現の
検索」ですから、「わからん」のコードが必要でした。なにが「おかしい」のか
不明です。

あとは、
    #ws = tickcount + 150;  //  wait ??? - 2001/09/01
    while( #ws > tickcount ){   #wt = tickcount;    }
この辺の、問題ですか、始めに Pentium 350 MHz の PC で作成したのですが、
そこではこんなコードは不要でした。800 MHz の PC になると、
マクロは正常 (???) な動きをしません。2.x GHz だとどんな動きをするのか、
環境がないので試せません。

こんな説明で、判りますか。

[ ]
RE:12804 「案」 vs 「余計なお世話」 ...No.12805
番頭++ さん 02/08/23 03:20
 
山紫水明さん、Arimacさん、encodingshiftjis さんは、
すでにおなじみの「コメント屋」さんだと思います。

YKNさんの許可があれば、番頭++ から、データとマクロを送ります。
番頭++ - xxxxxxxxx@hotmail.com

守秘義務を前提にして、試して見るのも案です。秀丸が死ぬことも「あり」ます。

自分でも「掲示板」はありますが、ここでの投稿、コメントがよいのでは ...
と思います。

[ ]
RE:12805 「案」 vs 「余計なお世話」 ...No.12806
YKN さん 02/08/23 08:57
 
>YKNさんの許可があれば、番頭++ から、データとマクロを送ります。
>番頭++ - xxxxxxxxx@hotmail.com
>
>守秘義務を前提にして、試して見るのも案です。秀丸が死ぬことも「あり」ます。
>
>自分でも「掲示板」はありますが、ここでの投稿、コメントがよいのでは ...
>と思います。

以上の条件でデータ・マクロを送って頂くこと、もちろん結構です。
もはや、私などの出る幕ではありません。
なお、番頭++さんのマクロ、サンプルデータについて実行してみましたら、
うまく動きます。皆さん本当にありがとうございます。 YKN



            

[ ]
RE:12806 「案」 vs 「余計なお世話」 ...No.12808
YKN さん 02/08/23 09:42
 
番頭++様

その後、元のファイルを30MBずつに分割してマクロを実行しました。
およそ1/4ほど?は無事にやってくれましたが、そこで「もっと簡単にしてくださ
い」といって行き詰まります。

このファイルについて、マクロではなく、普通の「置換」のところで作業をしても、
置換前の文字列が短いと終わりまで無事にやってくれるのですが、正規表現を使った
りして置換前文字列が長くなると、巨大ファイルの途中までは機嫌良く作業してくれ
るのですが、途中から「もっと簡単にしてください」が出て行き詰まります。
ファイルを分割してサイズを小さくする以外には方法がないのでしょうか。
またこの現象はまっとうなテキストファイルでも起こる現象なのでしょうか。
                                YKN

[ ]
RE:12808 「案」 vs 「余計なお世話」 ...No.12812
番頭++ さん 02/08/23 15:35
 
すみません、前のマクロではダメなんです。

//*2    これが「検索文字列」になります。
//*2A   $s_s = "著作権者:" + $kk + $yy + ".*(全.+文字) +\\[" + $yy + "[0
-9]+\\]";
//*2B   $s_s = "著作権者:" + $kk + $yy + ".*\\[" + $yy + "[0-9]+\\]";
    $s_s = "著作権者:" + $kk + $yy + ".*\\[" + $yy + "[0-9]+\\]";

検索文字列をかえました。

あまり大きくなると、なにが起きるのか、わかりません。
ファイルの切り替えも、少し「遅らせ」てみました。でも ...

こんな感じで、「ツールの特徴を、生かしながら、殺しながら ...」、
少しでも、「個人のヒマが出来れば ...」、
「道具」って、「使いよう。」かも知れません。

CPU は、何メガヘルツですか、P x.xx MHz とか。
Windwos はなんですか。95, 98, Me, XP, 2000, XP Pro. とか。

[ ]
RE:12812 「案」 vs 「余計なお世話」 ...No.12820
YKN さん 02/08/23 18:46
 
メールと両方で、何度もお手数をかけ、本当に申し訳ありません。

>あまり大きくなると、なにが起きるのか、わかりません。
>ファイルの切り替えも、少し「遅らせ」てみました。でも ...

>こんな感じで、「ツールの特徴を、生かしながら、殺しながら ...」、
>少しでも、「個人のヒマが出来れば ...」、
>「道具」って、「使いよう。」かも知れません。

なるほど。そうですね。何でもかんでもいっぺんに全部やってもらおうと
いうのはあまりにもムシがよすぎますね。
今回のもの、ずいぶん有り難いと思っています。

>CPU は、何メガヘルツですか、P x.xx MHz とか。
>Windwos はなんですか。95, 98, Me, XP, 2000, XP Pro. とか。

pentiumU500MHz windows98です。
ハードディスクは10GBですが、空き容量は現在700MB前後です。

素人に長時間お相手頂いて、本当に恐縮です。
こちらも勉強してマクロの中身を理解できるようになると良いの
ですが。
重ねてお礼申し上げます。
                           YKN

[ ]
RE:12820 改訂版のマクロNo.12821
番頭++ さん 02/08/24 02:26
 
//*1 *** Macro for 「秀丸エディタ」***
//*1    KZ_QC12B.mac - 番頭++ - 2002 / 熱帯夜

//*1 【使用方法】
//*1    ・「秀丸エディタ」の「マクロの使用方法」は「ヘルプ」等を参照してくだ
さい。
//*1    ・「データ」と「コピー先」の 2 つのファイル (窓) 、だけ、を開いてお
いて、
//*1    「データ」ファイル (窓) を開いて、このマクロを実行してください。    
//  手抜き !!!

//*1 【注意】
//*1    ・このマクロは全角の空白文字「 」を含んでいます。
//*1    ・このマクロを見る時には、
//*1    [その他] - [ファイルタイプ別の設定] - [表示]
//*1    - 全角空白を記号で表示] を指定してください。    //  お勧めです。
//*1    ・「マクロの登録」を行うと便利かも。    //  お勧めです。
//*1    ・このマクロを実行する時には、
//*1    [その他] - [動作環境] - [ユーザーインターフェース]
//*1    - [検索での表示] - [範囲選択] を指定してください。  //  手抜き !!!

//*2 【自力による変更箇所】
//*2    このマクロの次の行を、「自力で変更」してください。
//*2    // はコメントの始まりです。
//*2    ・西暦を指定する。
    $yy = "95"; //*2    西暦 (多分) を指定する。    <== 変更して !!!
//*2    ・会社名を指定する。
    $kk = "□□□□社"; //*2    会社名を指定する。  <== 変更して !!!
//*2    これが「検索文字列」になります。
//*2A   $s_s = "著作権者:" + $kk + $yy + ".*(全.+文字) +\\[" + $yy + "[0
-9]+\\]";
//*2B   $s_s = "著作権者:" + $kk + $yy + ".*\\[" + $yy + "[0-9]+\\]";
    $s_s = "著作権者:" + $kk + $yy + ".*\\[" + $yy + "[0-9]+\\]";
//*2    searchdown $s_s, regular;   //  「正規表現」での検索です。

//*2 【わからん !!!】
//*2    最後に、「コピー先」ファイルで、この処理が必要かも、知れません !!!
//*2    replaceall "\\].\\x01\\n", "]\\n", regular, ask;

//*2 【CPU の速さ、に依存、かも ...】
//*2    調整が必要かも !!!
    #ws_w = 0250;   //  wait する、「同期のサクラ」、tickcount の単位。

//* $searchbuffer = searchbuffer;   #searchoption = searchoption;
    #selectfound = getininum("hidemaru.ini","Env","SelectFound");
    if( ! #selectfound ){
    //  writeininum "hidemaru.ini", "Env", "SelectFound", 1;
    //  envchanged;
        message "[検索での表示] - [範囲選択] に指定してください。";
        endmacro;   //  手抜き !!!
    }
    if( hidemarucount != 2 ){
        message "「秀丸」の窓は、\n「データ」と「コピー先」の 2 つにしてくだ
さい。";
        endmacro;   //  手抜き !!!
    }
    if( updated ){
        message "「データ」は更新されています。";
        endmacro;   //  更新されている、そく中止 !!!
    }

    escape; //  [Esc]
    $file_name1 = filename2;
//* gofiletop;  //  ファイルの先頭から処理します。か ???
    if( ! readonly ){   //  上書き禁止 ???
        readonlyswitch; //  Bug 防止、回避、対策 !!!
    }
    nexthidemaru;
        #ws = tickcount + #ws_w;
        while( #ws > tickcount ){   #ws_t = tickcount;  }
    escape; //  [Esc]
    $file_name2 = filename2;
    gofileend;  //  「コピー先」ファイルの最後に追加します。
    config "w80";   //  仮に、とりあえず、80 byte で折り返し
    if( $file_name2 == "" ){
        message "「コピー先」ファイル名を指定しておいてください。";
        endmacro;   //  そく中止 !!!
    }
    showwindow 0;   //  ウィンドウ非表示、処理が速いかも ...
//* showwindow 1;   //  ウィンドウ非表示では、処理が遅いかも ...
    gofileend;
    if( (x+y) == 0) {   insert "\n\n";  }   //   意味不明
    nexthidemaru;
        #ws = tickcount + #ws_w;
        while( #ws > tickcount ){   #ws_t = tickcount;  }
//* message "「データ」: " + $file_name1 + "\n" + "「コピー先」: " + $file_n
ame2;

    searchdown $s_s, regular;
    while( result ){
        #seltopx = seltopx; #seltopy = seltopy;
        #selendx = selendx; #selendy = selendy;
        if( #result != 04 ){
            #result = 99;
        }
        while( #result == 99 ){
            mousemenu "この文字列を Copy しますか ???", //  01
                "(&Y) - Yes",   //  02
                "(&N) - No",    //  03
                "(&U) - メニューがうるさい : 無条件の連続処理", //  04
                "(&C) - Cancel : 処理中止";     //  05
            #result = result;
        //* if( #result == 00 ){    escape; endmacro;   }   //  [Esc]
            if( #result <= 01 ){
                #result = 99;
            }
        }
        if( #result == 05 ){    escape; endmacro;   }   //  "(&C) - Cancel"
        if( #result == 02 || #result == 04 ){   //  "(&Y) - Yes" または "(&
U) - うるさい"
            escape;
            moveto #seltopx, #seltopy;  beginsel;   moveto #selendx, #selendy;
            copy;   escape;
            #i = hidemaruhandle(findhidemaru($file_name2));
            setactivehidemaru #i;
            #ws = tickcount + #ws_w;
            while( #ws > tickcount ){   #ws_t = tickcount;  }
            paste;
            call pp_wakaran_1a;
            insert "\n\n";  //  とりあえず、[改行] を二個入れる ... 案。
            #i = hidemaruhandle(findhidemaru($file_name1));
            setactivehidemaru #i;
            #ws = tickcount + #ws_w;
            while( #ws > tickcount ){   #ws_t = tickcount;  }
        }
        escape;
        finddown;
//*     searchdown $s_s, regular;
    }
    escape;
//* replacedown "^\\@#", "", regular;   //  AD 1995 年 吉日 - 番頭++
//* setsearch "", 0x00; setclipboard "";    //  記憶にありません !
endmacro;

pp_wakaran_1a:  //  解からん 1A !!!
    escape;
    left;
    if( code != ']' ){
    //* showcode;
        delete;
    }
    gofileend;
return;

endmacroall;
// end of macro.

[ ]
RE:12820 「案」 vs 「余計なお世話」 ...No.12822
番頭++ さん 02/08/24 03:27
 
> //*1    KZ_QC12B.mac - 番頭++ - 2002 / 熱帯夜
の説明、改造 (案) です。

> Pentium U 500MHz, Windows98 です。

だとすると、
//*2 【CPU の速さ、に依存、かも ...】
//*2    調整が必要かも !!!
    #ws_w = 0250;   //  wait する、「同期のサクラ」、tickcount の単位。
の値は、
    #ws_w = 0100;   //  wait する、「同期のサクラ」、tickcount の単位。
でも、うまくいきそうな気がします。これは処理速度に影響します。
単位は「ミリ秒 - m sec.」です。

    if( hidemarucount != 2 ){
        message "「秀丸」の窓は、\n「データ」と「コピー先」の 2 つにしてくだ
さい。";
        endmacro;   //  手抜き !!!
    }
は、秀丸の動作を安定させるために、あえて、そうしています。

    if( updated ){
        message "「データ」は更新されています。";
        endmacro;   //  更新されている、そく中止 !!!
    }
は、マクロがおかしく動作したときに、オリジナルのデータを失いたくない、
そんな意図で、あえて、そうしています。
行の先頭に // を入れてコメントにしても、問題はありません。

    if( ! readonly ){   //  上書き禁止 ???
        readonlyswitch; //  Bug 防止、回避、対策 !!!
    }
も、マクロがおかしく動作したときに、オリジナルのデータを失いたくない、
そんな意図で、あえて、そうしています。
行の先頭に // を入れてコメントにしても、問題はありません。

「簡単にしてください」で、処理が中断される、に関してですが、
//*2A   $s_s = "著作権者:" + $kk + $yy + ".*(全.+文字) +\\[" + $yy + "[0
-9]+\\]";
//*2B   $s_s = "著作権者:" + $kk + $yy + ".*\\[" + $yy + "[0-9]+\\]";
    $s_s = "著作権者:" + $kk + $yy + ".*\\[" + $yy + "[0-9]+\\]";
これ $s_s を、簡単にするのが、案ですが、
データを限り、「 ] 」の文字は無いのかも、しれません。
//*2C   $s_s = "著作権者:" + $kk + $yy + ".*[0-9]+\\]";
    $s_s = "著作権者:" + $kk + $yy + ".*[0-9]+\\]";
このような検索でも、いけると思いますが。変更してみてください。

それでも、問題 (???) があるようでしたら、処理の継続についての案、
データは「著作権者: ...」で始まり、例:「[95mmddnnn]」で終わる、
わけですから、
処理済みの「コピー先」ファイルの最後の [95 ...] の文字列を、
「データ」ファイルで検索すると、
マクロがデータ処理を開始する「位置」が決まる。
そのようにして、処理を再開する。

30 M byte とかのデータを処理すると、
あちきの環境では、想像が出来ない事も起きるのでしょう ...

[ ]
RE:12822 「案」 vs 「余計なお世話」 ...No.12823
番頭++ さん 02/08/24 04:32
 
この後はマクロの質問になるので、
[ 4.秀丸エディタ マクロ作者会議室 ]、に投稿してくだいませ ...

# 遅すぎる、提案かも ...
# このコメントは後で、削除します。

[ ]
RE:12823 「案」 vs 「余計なお世話」 ...No.12824
YKN さん 02/08/24 11:23
 
了解しました。4番会議室のほうに投稿させて頂きます。YKN

[ ]