◀一般トップへ
  • 2857 改行置換について
    • 2858 Re:改行置換について
      • 2860 Re2:改行置換について
        • 2862 Re3:改行置換について
          • 2863 Re4:改行置換について
            • 2867 Re5:改行置換について
              • 2868 Re6:改行置換について
              • 2900 Re6:改行置換について
  • [2857] 改行置換について comb 2003年04月07日 12:11

    改行の置換に正規表現を用いて
    \r\n->xxx
    としたときにきちんと置換は出来ているようなのですが
    無限に置換を行っているような状態になり
    キャンセルしないと終了できません

    1.3.8.2です
    • [2858] Re:改行置換について MMX 2003年04月07日 15:10

      1行の最大長を越える結果になっていませんか。
      普通のテキスト指向のエディタには限界があります。
      長い行を表示すると、スクロールが極端に遅く
      なったりとか、副作用も多数おきます。
      • [2860] Re2:改行置換について comb 2003年04月07日 17:31

        ▼ MMXさん
        > 1行の最大長を越える結果になっていませんか。
        なっていません。表現が分かりにくいかも知れませんが
        下のような状態でも無限に置換作業を行ってしまうのです。
        うちの環境だけ?(ME)
        _______
        a
        b
        c
        [eof]
        _______

        キャンセルすると
        _________
        abc[eof]


        _________
        みたいな感じにはなっています。
        • [2862] Re3:改行置換について すい 2003年04月07日 23:15

          本件は既知の不具合です。
          過去(2002/5:No.1951)にも もう少し詳しく
          「[EOF]の位置([EOF]の前に改行があるかどうか)で現象が出る/出ない」
          とか報告されていますし、それ以後も何度か報告されています。
          しかしながら本不具合などを直せる人がいないのでそのままになっています。

          ソースを見て修正して頂けると幸いです...が、それが出来ないようでしたら
          残念ながら諦めて他の手段でやってください、としか言いようがないのが現状です。
          # 他のソフトを使うとか、どうしてもサクラエディタでやりたいならマクロを使うとか...

          この件に限らず、正規表現での行頭,行末,改行がらみの検索・置換は色々不具合があります。
          その辺(不具合かある事)を念頭において使って、不具合が出たら諦めて別の方法でやってね、
          としか言いようがないな、と。
          直せる方がいらっしゃるとユーザー一同助かるのですが。
          • [2863] Re4:改行置換について MMX 2003年04月08日 09:25

            ▼ すいさん
            このタイプのバグは昔、秀丸にもありました。
            サクラエディタの現バージョンでの逃げの方法は

            置換範囲を選択してから置換します。
            ちゃんと終了します。
            ファイル全体なら、全選択、全置換です。
            • [2867] Re5:改行置換について すい 2003年04月08日 19:36

              >ファイル全体なら、全選択、全置換です。

              ↑これ、止まりませんよ。 (^^;
              結局のところ、[EOF]直前に改行があって、その“[EOF]直前の改行”を含めて
              [すべて置換] 実行時には止まらないですね。

              選択範囲に対する置換でやるなら
              「 [EOF]直前の改行を含めずに範囲選択してから、すべて置換」
              するしかないかと。
              • [2868] Re6:改行置換について MMX 2003年04月09日 10:25

                ▼ すいさん
                そうでした。残念
                改行コードでループしないものもある。
                ¥rと¥nの単独で改行している場合はOK
                ¥r¥nと¥n¥r で改行はループする
                でした。2つを一度にマッチさせて
                置換するとダメなようです。
                行の再編成の回数とかに関連するか?
                ----
                a\r\n
                b\r\n
                c\r\n
                [EOF}
                に対して [\r\n] → X を全置換すると
                ----
                aX\n
                bX\n
                cX\n
                [EOF}
                になる、再度全置換で 意図どおりになる?
                \r置換直後のカーソル位置が \n 直前ではなく
                \n の直後になるような動作だ?
                \r\n → X 全置換はループ、で → XX 以上はループしない?
                1バイトとそうでない時?漢字1文字はループせず
                \r\n → \r または \n はループしない
                ^と$の正規表現もマッチしているようだが
                挿入点が外れて文字が入らない感じ。
                [EOF]直前の¥r¥n置換後の【行の再編成】
                【再検索点の設定】がおかしいような
                ユーザーが2バイト改行特殊処理するは難しい。
                MIFESのように、0D0A という2バイト文字を立てて
                1度に処理できるようとか。改行が1バイトごと
                見える作りでは難しいか

                改行が¥r¥n ( ¥n¥r) の時
                ¥n(2バイト改行の後半)単独の検索はヒットする、
                カーソル位置は改行文字の直後
                (キーやマウスではできない位置にある)
                この位置でキー入力はできる。

                しかし[EOF]直前では、[SPACE]X¥r¥n[EOF]となり
                [EOF]の前には入らない。Xが漢字では落ちる。
                ¥n(2バイト改行の後半)の単独置換はできない、
                ヒットはするが挿入されてない。

                2バイト改行を1文字扱いのところと、1バイト単位で
                透視できてしまう処理とが競合しているよう。

                とりあえず、2バイト改行は壊れやすいので、\r または \n の
                1バイト改行にしてから全置換などしたほうがよい。
                改行を含む処理では。
              • [2900] Re6:改行置換について 蒔田 信幸 2003年05月11日 02:13

                ▼ すいさん
                > 選択範囲に対する置換でやるなら
                > 「 [EOF]直前の改行を含めずに範囲選択してから、すべて置換」
                > するしかないかと。

                「\r\n」 -> 「」ファイル全体の置き換えですが。
                なるほど、[EOF]の前に\rとか\nが無いと、全置換でも問題ありません。

                そうでない場合、いろいろ試したところ、現れ方はランダムです。
                「置換後」の文字に何も指定しないと、正常に終わる確率が低くなるくらいです。

                Ver. 1.3.9.0 V