■ 質問はここへ ■

283 にジャンプ
No. 282投稿者: とっても初心者日付: 2001/10/22 11:19:09
題名 : \nが変換出来ないんですけど

元MIFESユーザーです。
QX Ver6.6とねこみみさんの複数ファイル一括文字列変換(カレントファイル)を多用しています。
それでちょっと戸惑っています。

置換える文字列がひとつだと"\n"の変換が出来るのに文字列が複数になると出来なくなってしまい、変換自体が化けてしまいます。

あと"^"と"$"はなぜ正規表現なのでしょう。
別に非難しているつもりはありませんが、他のエディタとはちょっと違うので・・・理由を教えて下さい。
おねがいします。

No. 283 (282へのコメント)投稿者: かぶねこ HP日付: 2001/10/22 15:03:13
題名 : Re:\nが変換出来ないんですけど

これは ねこみみ さんのマクロの問題なので、検索・置換文字列がマクロによっ
てどのように格納されるのか、というあたりにかかわってくるのだと思います。
このへんは ねこみみ さんのほうに質問していただけますか。

ねこみみ さんが読んでいるのが確実なのはニフティの FWINAL のエディタ会議
室だけなので、ここは直接メールで連絡していただくのがいいかと思います。

\n が入ったときに複数文字列の置換ができない、というのは、QX 自体の問題で
はありません。また、「^」と「$」については QX では「正規表現対応」をオン
にしなくても使える「特殊文字」となっていますが、「^」と「$」は sed、awk、
perl などでも使われている正規表現でもあります。「*」だけはちょっと複雑で、
正規表現がオフのときとオンのとき、それぞれ「特殊文字」と「正規表現」にな
るのですが、意味がまったく違います。

「他のエディタとちょっと違う」ということであれば、それはそちらのエディタ
のほうが標準的な特殊文字なり正規表現なりを採用していないのかと思うのです
が、複数のエディタでそうなんでしょうか。

また、これはお願いですが、ハンドル(ウェブ上の名前)は、「とっても初心者」
というようなものでなく、できればもっと「個人」として特定できるものにして
ください。

No. 284 (283へのコメント)投稿者: しげお日付: 2001/10/22 18:02:42
題名 : Re^2:\nが変換出来ないんですけど

>これは ねこみみ さんのマクロの問題なので、検索・置換文字列がマクロによっ
>てどのように格納されるのか、というあたりにかかわってくるのだと思います。
>このへんは ねこみみ さんのほうに質問していただけますか。
>\n が入ったときに複数文字列の置換ができない、というのは、QX 自体の問題で
>はありません。

->SiさんのREPMULTI.MAC(複数文字列一括置換マクロ)でも同じ結果になったので、QXの問題かなと思ったのですが・・・。

また、「^」と「$」については QX では「正規表現対応」をオン
>にしなくても使える「特殊文字」となっていますが、「^」と「$」は sed、awk、
>perl などでも使われている正規表現でもあります。「*」だけはちょっと複雑で、
>正規表現がオフのときとオンのとき、それぞれ「特殊文字」と「正規表現」にな
>るのですが、意味がまったく違います。
>
>「他のエディタとちょっと違う」ということであれば、それはそちらのエディタ
>のほうが標準的な特殊文字なり正規表現なりを採用していないのかと思うのです
>が、複数のエディタでそうなんでしょうか。
>

->「^」と「$」については MIFES・MMXでは正規表現ON時のみ対応でした。

>また、これはお願いですが、ハンドル(ウェブ上の名前)は、「とっても初心者」
>というようなものでなく、できればもっと「個人」として特定できるものにして
>ください。

->申訳ありません。ハンドルネーム変えました。

No. 285 (284へのコメント)投稿者: かぶねこ HP日付: 2001/10/22 19:53:28
題名 : Re^3:\nが変換出来ないんですけど

しげお さん、ハンドル変更ありがとうございました。

いま気がついたのですが、もしかして「\n」というのは、QXで検索・置換に使
う特殊文字の(改行の意味の)「\n」ではなくて、そのものの文字列の「\n」こ
とだったのでしょうか。だとすると、特殊文字をエスケープするために「\\n」
と表記しなければいけないのですが。

>SiさんのREPMULTI.MAC(複数文字列一括置換マクロ)でも同じ結果になったので、
>QXの問題かなと思ったのですが・・・。

Si さんのマクロも引っぱり出してきました。これはテーブルファイルを作って
おくんですね。途中に「\n」(改行)を含む文字列を複数指定しても、うちの環
境では問題ないようです。すみませんが、具体的にどのような文字列を、マクロ
実行直前に置換ダイアログの設定がどうなっているかを添えて、教えていただけ
ませんか。

また、QX で複数文字列を置換するマクロのもっとも基本的なかたちはこんな感
じです。

proc main
@@ReplaceStringMulti "文字列1", "置換文字列1"
@@ReplaceStringMulti "文字列2", "置換文字列2"
@ReplaceStringMultiExec 1
end proc

ここの文字列のところにテストする文字列を入れて実行すると、もっとも基本的
な状態でのテストができます。

>「^」と「$」については MIFES・MMXでは正規表現ON時のみ対応でした。

なるほど、そういう意味でしたか。たしかに。特殊文字であることに気がつかな
いと予想した動作をしなくて驚くことがあるかもしれません。

QX は古いバージョンでは正規表現に対応していませんでした。だんだん便利な
機能がついていくなかで、正規表現より先に「特殊文字」関係が採用されたので、
正規表現オンにしなくても使う設計になっているのだと思います。じつはわたし
が初めて QX に触れたころには、改行(\n)の置換もなかったんですが、あれよ
あれよという間にタグつき正規表現まで対応されてしまいまして。

No. 286 (285へのコメント)投稿者: しげお日付: 2001/10/22 23:06:10
題名 : Re^4:\nが変換出来ないんですけど

回答ありがとうございます。

問題無く動いているということは使い方が悪いのでしょうね。

こんなテキストを
$1001:A^1,B^2,C^3;
$1002:D^4,E^5,F^6,
G^7,H^8,I^9;
$1003:J^10,K^11,L^12,M^13,
N^14,O^15;
$1004:P^16,Q^17,R^18;

こんな形式に変換したかったのですが
$1001={A-1,B-2,C-3};
$1002={D-4,E-5,F-6,G-7,H-8,I-9};
$1003={J-10,K-11,L-12,M-13,N-14,O-15};
$1004={P-16,Q-17,R-18};

パラメータは
SearchStr01=:
ReplaceStr01=={
SearchStr02=\^
ReplaceStr02=-
SearchStr03=;
ReplaceStr03=};
SearchStr04=,\n
ReplaceStr04=,
です。

パラメータをひとつずつ単独で実行すると置換が正常に出来るのに,
4つのパラメータを一括で実行すると化けてしまいます。
どこがいけないのでしょう?
教えて下さい。

No. 287 (286へのコメント)投稿者: かぶねこ HP日付: 2001/10/22 23:58:51
題名 : Re^5:\nが変換出来ないんですけど

いただいた例をマクロに入れてやってみたところ、\n では問題が生じるのをこ
ちらでも確認しました。む、バグか、と思いつつ、マクロヘルプを読んでいたら、
@@ReplaceStringMulti の項目に、「文字列に、改行(\n)を含めることはできま
せん」という1文がありました。

というわけで、QX の一括文字列置換では「\n」は扱えない、が正しかったわけ
です。最初のわたしのレスは、したがって間違いです。すいませんでした。わた
しのところで置換が可能だったのは、ひじょうにシンプルな例のみをやってみた
からかもしれません。

となると、複数文字列一括置換では \n を含むものだけは除外しておいて、別途
改行だけ処理することになってしまいますね。あ、そう言えば、複数文字列一括
置換は、ある行を読み込んで、そのなかで同時に指定された複数の文字列を探す
わけですから、しくみからも \n には対処できないのかもしれません。

マクロでやるなら、改行だけは @ReplaceString2 を使えばうまくいきます。

proc main
@UndoBlock=1
@@ReplaceStringMulti ":", "={"
@@ReplaceStringMulti "\^", "-"
@@ReplaceStringMulti ";", "};"
@ReplaceStringMultiExec 1
@MoveFileTop
@ReplaceString2 ",\n", ",", 1
@UndoBlock=0
end proc

No. 290 (287へのコメント)投稿者: しげお日付: 2001/10/23 09:26:30
題名 : Re^6:\nが変換出来ないんですけど

自分もヘルプは確認していませんでした。
まさか"\n"が使えないとは・・・。
分かりました。マクロは直せそうもないので文字列を工夫するように気を付けます。
ありがとうございました。

No. 291 (290へのコメント)投稿者: しげお日付: 2001/10/23 09:40:41
題名 : Re^7:\nが変換出来ないんですけど

>自分もヘルプは確認していませんでした。
>まさか"\n"が使えないとは・・・。
>分かりました。マクロは直せそうもないので文字列を工夫するように気を付けます。
>ありがとうございました.

スイマセン。マクロじゃなくてコマンドの制約事項でした。
勘違いでした。

ところで、"\n"を使える様には出来ないんでしょうか?
やっぱり使いたい・・・。

No. 292 (291へのコメント)投稿者: かぶねこ HP日付: 2001/10/23 11:48:20
題名 : Re^8:\nが変換出来ないんですけど

>ところで、"\n"を使える様には出来ないんでしょうか?
>やっぱり使いたい・・・。

@@ReplaceStringMulti で「\n」を置換することについては、このコマンドが、
ある行を読み込んで、そのなかで同時に指定された複数の文字列を探す、という
動作をするものなので、この動作を変更してもらうように要望しても、実現はむ
ずかしいのではないかと思います。(これはわたしの意見にすぎないのですが。
なお、作者への要望はメーリングリストのほうにお願いします。)

マクロで「\n」も置換するためには、@ReplaceString2 を使う必要があります。
しげお さんが必要とする置換作業が一定の内容であれば、No. 287 で挙げたよ
うなマクロを個別に作って使用する、という方法があります。パターンがいろい
ろあって、やはり ねこみみ さんのマクロを使いたい、ということでしたら、ね
こみみ さんに相談してみてください。

あるいは、ねこみみ さんのマクロほど高機能でなくてもいいけれど(複数ファ
イルを一括処理しなくていい、など)、最低限こういうことができるものがほし
い、ということでしたら、わたしも多少なら対応できるかもしれません。また、
マクロメーリングリスト http://qxmac.com/ml/ というのがありますので、そち
らで要望を出すとたぶんどなたかが作ってくれると思います。


ヘッダのみ表示
順番に表示(No. 283 から)


メールアドレスを表示するにはURLの後ろに &m=29159987 をつけてください。
ユーザー フォーラム一覧

http://www2k.biglobe.ne.jp/~araken/
http://0ban.com/araken/