置換No.30516
Cyber さん 11/10/27 15:07
 
100万行の文章があります。一番最後の行を一番最初の行へと、同じように順番に繰
り上げる置換は可能ですか?それらの文章は例えば次のような対訳のセットとなって
おります:


aaaa bbbb\n\n
cccccc keowsn\n\n
uipipi /eoxnjfjsljls\n\n

つまり
文章x 文章\n\n
というような感じです。これらが、1ファイルにおよそ100万行あります。可能ですか?

[ ]
RE:30516 置換No.30517
秀丸担当 さん 11/10/27 16:24
 

ファイルの末尾の行をファイルの最初に移動するということかと思います。
置換ではそういうことはできないです。

以下のような操作をするとやりやすいと思います。

Ctrl+Endキーでファイルの末尾に移動します。(標準のキー割り当て)
上矢印キーで[EOF]のよりも1つ上の行に移動します。
任意のキーにキー割り当てした「行を切り抜き」コマンドで切り抜きします。
Ctrl+Homeキーでファイルの先頭に移動します。(標準のキー割り当て)
Ctrl+Vで貼り付けします。

「行を切り抜き」は、キー割り当てでは「クリップボード系」のコマンドとして
あります。

[ ]
RE:30516 置換No.30544
山紫水明 さん 11/11/05 22:23
 
 Cyberさん,

>一番最後の行を一番最初の行へと、同じように順番に繰
>り上げる置換は可能ですか?

 少しわかりにくいのですが,たとえば

111111
222222
333333
444444
555555
666666
777777
888888
999999

を次のように並べ替えることですか?

999999
888888
777777
666666
555555
444444
333333
222222
111111

                         山紫水明(ユーザー)
                          SANSHISUIMEI

[ ]
RE:30544 置換No.30547
Cyber さん 11/11/07 12:18
 
> Cyberさん,
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>                          SANSHISUIMEI


簡単に言えば、そういうことです。

[ ]
RE:30547 置換No.30550
山紫水明 さん 11/11/07 17:14
 
 Cyberさん,

>簡単に言えば、そういうことです。

 そういうことになると,置換では無理でマクロを使用することになります。
 「秀丸エディタマクロライブラリ」に拙作の「行の並べ替え簡易マクロ 」が
あります。http://hide.maruo.co.jp/lib/macro/arrangeline.html
少し修正した最新版は,http://homepage2.nifty.com/12sun/sansui.html
に置いています。
そのマクロを実行して「上下転置」を選べば,並べ替えができます。

もしこれまでマクロを使用されたことがなければ,
ヘルプ→マクロヘルプ→「マクロを初めて作成する方はこちらへ」
の中の「マクロの登録と実行について」を見てください。

                          山紫水明
                          SANSHISUIMEI

[ ]
RE:30550 置換No.30551
Cyber さん 11/11/08 08:53
 
> Cyberさん,
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>                          SANSHISUIMEI


およそ210MBの1ファイルですが、そのマクロを実行するとどれくらいの所要時間にな
るのでしょうか?

[ ]
RE:30551 置換No.30552
山紫水明 さん 11/11/08 20:39
 
 Cyberさん,

>およそ210MBの1ファイルですが、そのマクロを実行するとどれくらいの所要時
>間になるのでしょうか?

 こういう大きなファイルを処理するには秀丸マクロはあまり適していないでし
ょう。多分別の手段があるでしょうが,私は知りません。
 ちなみにこのマクロでは,66MB のファイルで4分,133MB のファイルでは16
分かかりました。PCの能力などの環境によって異なるでしょう。
 まあ,マクロにやらせておいて,その間に食事に行くとか,別の用件を済ませ
るということであれば使えるかも知れませんね。

                          山紫水明
                          SANSHISUIMEI

[ ]
RE:30552 置換No.30555
秀まるお2 さん 11/11/09 16:14
 
 行の上下を反転させる用の変換モジュールを作りました。

 これで間に合うのかどうかいまいち分からないのですが、よかったらお試しく
ださい。

http://hide.maruo.co.jp/lib/hmconv/linereverse100.html

 210メガバイトのファイルでも一瞬で入れ替わります。

[ ]
RE:30555 置換No.30557
山紫水明 さん 11/11/09 18:19
 
 秀まるお2さん,

> 行の上下を反転させる用の変換モジュールを作りました。

 さすがに早い対応ですね。十分に速いです。
 拙作マクロにも使わせていただきます。

                          山紫水明
                          SANSHISUIMEI

[ ]
RE:30555 置換No.30558
Cyber さん 11/11/10 08:37
 
> 行の上下を反転させる用の変換モジュールを作りました。
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
> 210メガバイトのファイルでも一瞬で入れ替わります。


行の末尾にはすべて[  ]がつけられていますが、その変換モジュールでうまく機能し
ますか?


つまり、表現すると
xxxxxxxxxxタブタブ改行
xxタブタブ改行
xxxxxタブタブ改行
xxxxxxxxxxxxxxxxタブタブ改行
xxタブタブ改行
xxxxxxxタブタブ改行


のような感じです。

[ ]
RE:30558 置換No.30559
秀まるお2 さん 11/11/10 09:37
 
 行末に特定の文字があるからという理由でうまく動かないはずは無いと思いま
す。

 実際の結果が期待通りかどうかはご自身で確認してみた方が手っ取り早いと思
います。

[ ]
RE:30559 置換No.30569
Cyber さん 11/11/14 15:28
 
> 行末に特定の文字があるからという理由でうまく動かないはずは無いと思いま
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>います。


zipファイルを解凍したら、LineReverse.hmfがありました。ダブルクリックしたら、
「このファイルは開けません」と表示されます。どうすればいいですか?

[ ]
RE:30569 置換No.30570
秀まるお2 さん 11/11/14 16:48
 
 変換モジュールの登録方法がどこにも書いてないようで、お手数かけてすみま
せん。

 使い方ですが…

 1.ダウンロード&解凍して出てきたLineReverse.hmfファイルを秀丸エディタの
   プログラム用フォルダにコピーする。
   普通だと、C:\Program files\Hidemaruってフォルダになります。

 2.秀丸エディタを起動して、「その他・動作環境...」を実行する。

 3.ウィンドウ左下にある「上級者向け設定」がもしOFFになっているならONに
   する。

 4.設定一覧のツリーから「編集・変換」を選択する。

 5.そこの「追加...」ボタンを押す。

 6.先ほどコピーしたLineReverse.hmfファイルを選択してOKする。

 7.変換モジュールの一覧にLineReverse.hmfが登録されるのでそれを選択して、
   下に出てくる「使用する変換」の「行の上下反転...」がONになってることを
   確認する。もしもOFFになっていたらONにする。

 8.動作環境をOKして確定させる。

 とすることで、変換モジュールが使えるようになります。

 あとは、上下反転させたいファイルを秀丸エディタで開いて、反転させたい範
囲を選択してから「編集・変換・行の上下反転...」コマンドを実行すればいい
です。

[ ]
RE:30570 置換No.30572
Cyber さん 11/11/14 17:19
 
> 変換モジュールの登録方法がどこにも書いてないようで、お手数かけてすみま
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>です。



すばらしい。Nobel Prizeに相当する。

[ ]
RE:30572 置換No.30573
Cyber さん 11/11/14 17:30
 
>> 変換モジュールの登録方法がどこにも書いてないようで、お手数かけてすみま
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>すばらしい。Nobel Prizeに相当する。




容量の小さいファイルでテストしたところ、成功したのですが、210MBのファイルを
テストしようとしたら、「メモリ不足のため処理を中止します」と表示がでました。
どうすればいいですか?

[ ]
RE:30573 置換No.30574
秀まるお2 さん 11/11/14 17:59
 
 こちらでもテストしてみたんですが、たしかにファイルサイズが210
メガバイト以上くらいにもなるとメモリ不足でエラーになってしまうようでした。
大変失礼しました。

 メモリ不足になってしまうのを解決するのはちょっと難しいので、とりあえず
の回避策として、ファイルを2つに分割して処理していただくしか無いように思
います。

 やり方を簡単に説明させていただきますと…

 1.問題のファイルを開く。

 2.カーソルをファイルの真ん中付近の適当な行の行頭に移動させる。

 3.CtrlキーとShiftキーの両方を押さえながらHomeキーを押す。そうすると、
   先ほどのカーソル位置からファイルの先頭までが範囲選択される。

 4.そのまま「編集・切り抜き」を実行する。

 5.秀丸エディタを1つ新規作成して、そこに「貼り付け」とする。

     で、こうすると、ファイルの内容が2つに分割されて、
     それぞれ2つの秀丸で編集してる状態になります。

 6.この状態で、2つの秀丸それぞれで、「すべて選択」としてから
  「編集・変換・行の上下反転...」を実行する。

 7.先ほど「切り抜き+貼り付け」で移動した方の秀丸の内容を、
   今度は「すべて選択」、「コピー」してから元の秀丸のファイル末尾に
   「貼り付け」とする。

 で、これで結果として、ファイルの中身が全部上下反転するはずだと思います。

 という作戦でどうでしょうか。

 もしこれでもメモリ不足が起きるとしたら、3分割作戦、それでもダメなら
4分割するしか無いかと思います。

[ ]
RE:30574 置換No.30575
秀まるお2 さん 11/11/14 18:05
 
 今テストしてみたんですが、210メガバイトのファイルを2分割した程度で
は、まだメモリ不足になってしまうようです。

 マクロを作るので少々お待ちください。

[ ]
RE:30575 置換No.30576
秀まるお2 さん 11/11/14 18:29
 
 マクロ作りました。

 問題のファイルを開いてこのマクロを実行すれば、例えファイルサイズが
300メガバイトあってもうまく変換してくれるはずだと思います。(最高で
10分割するので大丈夫なはずだと思います)

 マクロを実行すると、途中で「行の上下反転をします」のメッセージが何回も
出てきてしまいますが、OKを押し続けてください。

 マクロを実行しても「行の上下反転をします」のメッセージが1回も出てこな
い場合はマクロがうまく動いてないことになります。

 マクロの作り方や実行方法が分からない場合はまた連絡ください。


//--------------------マクロ始まり--------------------
    #hideOrigin = hidemaruhandle(0);
    #count = linecount;
    #div = linecount / 10000;
    if( #div > 10 ) {
        #div = 10;
    } else if( #div < 2 ) {
        #div = 2;
    }
    question str(#div) + "分割して上下反転処理します。よろしいですか?";
    if( result != yes ) {
        endmacro;
    }
    #count2 = #count / #div;
    if( #count2 == 0 ) {
        endmacro;
    }
    #i = 0;
    while( #i < #div ) {
        gofiletop;
        beginsel;
        if( #i == #div - 1 ) {
            gofileend;
        } else {
            moveto 0, #count2;
            golinetop2;
        }
        cut;
        newfile;
        #hideTemp[#i] = hidemaruhandle(0);
        paste;
        gofiletop;
        beginsel;
        gofileend;
        filter "LineReverse.hmf" , "LineReverse";
        setactivehidemaru #hideOrigin;
        #i = #i + 1;
    }
    gofiletop;
    beginsel;
    gofileend;
    delete;
    #i = #div;
    while( #i > 0 ) {
        #i = #i - 1;
        setactivehidemaru #hideTemp[#i];
        gofiletop;
        beginsel;
        gofileend;
        copy;
        setactivehidemaru #hideOrigin;
        paste;
        gofileend;
    }
    #i = 0;
    while( #i < #div ) {
        closehidemaruforced #hideTemp[#i];
        #i = #i + 1;
    }
    message "上下反転完了です。";

//--------------------マクロおわり--------------------

[ ]
RE:30576 置換No.30577
Cyber さん 11/11/14 21:25
 
> マクロ作りました。
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>//--------------------マクロおわり--------------------





もとのファイルAと変換後のファイルBを比較したところ、上下の反転ができていませ
ん。なぜですか?マクロはうまく作成できましたが、なぜですか?

[ ]
RE:30577 置換No.30578
秀まるお2 さん 11/11/14 22:50
 
 変換モジュールの場所が秀丸エディタのプログラム用ファイルとは別の所にあ
ると、マクロがうまく動かないです。

 1.1行だけのファイルを作成して、それを開く。
 2.すべて選択する。
 3.「マクロ・キー操作の記録開始/終了」コマンドを実行する。
 4.「編集・変換・行の上下反転...」コマンドを実行する。
 5.「マクロ・キー操作の記録開始/終了」コマンドを実行する。
 6.「マクロ・キー操作の保存...」を実行して、何か適当な名前
   のマクロファイルに保存する。

 としてみて、それで出力されたマクロの中身をここの会議室に書き込んでいた
だけないでしょうか。その内容が分かれば、Cyberさんの所でもうまく動く
マクロがこちらで作成出来ると思います。

[ ]
RE:30578 置換No.30579
Cyber さん 11/11/15 08:41
 
> 変換モジュールの場所が秀丸エディタのプログラム用ファイルとは別の所にあ
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>マクロがこちらで作成出来ると思います。




ご要望の出力したマクロをメールにて送信しました。検証してください。

Cyber

[ ]
RE:30579 置換No.30580
秀まるお2 さん 11/11/15 09:13
 
 送っていただいたマクロだと、たしかにLineReverse.hmfが秀丸エディタの
プログラム用フォルダにインストールされているようで、だとしたら、僕の書い
たマクロでうまく上下反転してくれるはずだと思います。

 なぜマクロがうまくいかないのか、すみませんがちょっと分からなくなりまし
た。

 マクロを実行すると、「10分割して上下反転処理します。よろしいですか?」
の問い合わせが出てから、「行の上下反転をします。」の確認メッセージが
トータル10回出てくるはずなんですが、そういうメッセージ類は出てこなかっ
たでしょうか。

 メッセージが出てきてるなら、一応上下反転してるはずだとは思うんですけど
も…。

 もうちょっとマクロを見直してみます。

[ ]
RE:30580 置換No.30581
Cyber さん 11/11/15 09:35
 
> 送っていただいたマクロだと、たしかにLineReverse.hmfが秀丸エディタの
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
> もうちょっとマクロを見直してみます。



メッセージは1回だけでした。

[ ]
RE:30581 置換No.30582
秀まるお2 さん 11/11/15 10:32
 
 以下のマクロでどうでしょうか。もしこれでもダメでしたら、何らかの
メッセージが出るはずなので、それの内容を教えて欲しいです。

//--------------------マクロ始まり--------------------
    #hideOrigin = hidemaruhandle(0);
    #linecount2Origin = linecount2;
    if( linecount2 < 100 ) {
        message "行数が少なすぎます。このマクロを使う必要はありません。";
        endmacro;
    }
    #div = 10;
    question str(#div) + "分割して上下反転処理します。よろしいですか?";
    if( result != yes ) {
        message "マクロ終了1";
        endmacro;
    }
    #count2 = linecount2 / #div;
    if( #count2 == 0 ) {
        message "マクロ終了2";
        endmacro;
    }
    #i = 0;
    #lineno = 1;
    gofiletop;
    while( #i < #div ) {
        beginsel;
        if( #i == #div - 1 ) {
            gofileend;
        } else {
            #lineno = #lineno + #count2;
            movetolineno 1, #lineno;
            if( lineno != #lineno ) {
                message "指定した行への移動に失敗しました。";
                endmacro;
            }
        }
        copy;
        if( selecting ) escape;
        newfile;
        #hideTemp[#i] = hidemaruhandle(0);
        if( #hideTemp[#i] == #hideOrigin ) {
            message "エラー1";
            endmacro;
        }
        paste;
        gofiletop;
        beginsel;
        gofileend;
        clearupdated;
        filter "LineReverse.hmf" , "LineReverse";
        if( !updated ) {
            message "上下反転に失敗しました。1";
            endmacro;
        }
        setactivehidemaru #hideOrigin;
        #i = #i + 1;
    }
    gofiletop;
    beginsel;
    gofileend;
    delete;
    #i = #div;
    while( #i > 0 ) {
        #i = #i - 1;
        setactivehidemaru #hideTemp[#i];
        gofiletop;
        beginsel;
        gofileend;
        copy;
        setactivehidemaru #hideOrigin;
        paste;
        gofileend;
    }
    #i = 0;
    while( #i < #div ) {
        closehidemaruforced #hideTemp[#i];
        #i = #i + 1;
    }
    message "上下反転完了です。";
//--------------------マクロおわり--------------------

[ ]
RE:30582 置換No.30583
Cyber さん 11/11/15 11:02
 
> 以下のマクロでどうでしょうか。もしこれでもダメでしたら、何らかの
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>//--------------------マクロおわり--------------------




元のファイルAと変換後のファイルBを少し比較しました。100万行以上あるので、全
部を比較できませんが、最初と最後の5行程度を比較したら、上下反転していました。

昨日と違った点は2つ。

一つは、、昨日は作成したマクロを秀丸マクロ専用フォルダーではなく、ひとつ外側
のフォルダーに置いていたようです。今日は秀丸マクロ専用フォルダーに挿入してみ
ました。
二つ目は、マクロ文章の最初と最後の---------と---------の文章をきっちり入れま
した。昨日はマクロ文章の最初と最後の---------と---------の文章をカットしてい
ました。


10回のメッセージ「行の上下反転します」が表われ、「完了」の表示もでました。

ありがとうございます。

[ ]
RE:30583 置換No.30584
秀まるお2 さん 11/11/15 11:44
 
 前回のマクロがうまくいかなかった原因は僕もよく分かりませんが、とりあえ
ず今回のマクロでうまくいったということで、良しとさせていただきます。

[ ]
RE:30584 置換No.30589
Cyber さん 11/11/15 20:13
 
> 前回のマクロがうまくいかなかった原因は僕もよく分かりませんが、とりあえ
>ず今回のマクロでうまくいったということで、良しとさせていただきます。


別のPCではできません。なぜでしょうか?

 1.1行だけのファイルを作成して、それを開く。
 2.すべて選択する。
 3.「マクロ・キー操作の記録開始/終了」コマンドを実行する。
 4.「編集・変換・行の上下反転...」コマンドを実行できません。

つまり、この4番目の項目の「上下反転コマンド」が表われません。

キー割り当てを行ってみても「失敗」と表示されます。なぜでしょうか?

[ ]
RE:30589 置換No.30590
Cyber さん 11/11/15 20:16
 
>> 前回のマクロがうまくいかなかった原因は僕もよく分かりませんが、とりあえ
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>キー割り当てを行ってみても「失敗」と表示されます。なぜでしょうか?


当該マクロを送信しました。

[ ]
RE:30590 置換No.30591
Cyber さん 11/11/15 20:18
 
>>> 前回のマクロがうまくいかなかった原因は僕もよく分かりませんが、とりあえ
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>当該マクロを送信しました。


このPCには他にいろんなマクロが入っており、それらと同じ場所に、「上下反転マク
ロ」を設置しております。なぜ、失敗するのでしょうか?

[ ]
RE:30591 置換No.30593
秀まるお2 さん 11/11/15 22:51
 
 送っていただいたマクロは僕がここの会議室に書き込んだマクロそのまんまで
して、それをメールで送っていただいても仕方がないような気がします。


 マクロがうまく動かないのは、そもそも「編集・変換・行の上下反転...」っ
てコマンドが出てこないということで、つまり、LineReverse.hmfの変換
モジュールがうまくインストールされてないんじゃないでしょうか。

 LineReverse.hmfのインストール方法は、30570番発言に書いてあります。

 ここの一連の発言をもう一度見直して、うまくいってる方のパソコンでやった
のと同じことを、うまくいかない方のパソコンでもやればいいんじゃないかと思
います。

[ ]
RE:30593 置換No.30597
Cyber さん 11/11/19 17:25
 
> 送っていただいたマクロは僕がここの会議室に書き込んだマクロそのまんまで
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>います。



30570番発言通りにやると、できました。

[ ]