- - PR -
ANTで改行を含む文字列の置換
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-11-24 15:13
・・・え??改行コードじゃ無い可能性もあるんですか? | ||||
|
投稿日時: 2005-11-25 00:18
文字コードが違うとか。
・UTF-8かなんかで出力されたファイルを開いてコピー、テキストエディタに貼り付け(Shift_JIS) って感じで上手くいっているのでは? (あくまでも想像ですが....) まぁ、いずれにしろバイナリエディタで違いを比べてみるのが確実かと思います。 | ||||
|
投稿日時: 2005-11-25 11:11
inaさん、ご返答ありがとうございます。
アドバイスどおりバイナリエディタで確認してみたところ、行末の文字コードが 違ってました。自動生成したファイルはLF(ラインフィールド)のみで改行、 ECLIPSEで作成したファイルはCR+LFで改行を表現してるようです。 CRは改行コードではなくて復帰コードと呼ぶこともWEBで知りました。 MMXさんがおっしゃる改行コード以外のコードはこのコードのことだったのですね、 勉強になりました。 しかしながらまだ解決には至っていません。LFのみの改行コードをANTが無視してる 感じがします。以下に実験結果とソース、ANTファイルの一部を載せます。 ************** test.java ********************* 置換する文字列 , damie); これをバイナリエディタのデータでは 2C 0D 0A 64 61 6D 69 65 29 3B ANTでの定義 <replace dir="${toBuildDir}" value=";"> <include name="test.java" /> <replacetoken>,
damie;</replacetoken> </replace> 以上のようにTESTファイルは問題ないです。ちなみにANTのreplacetokenのところを <replacetoken>,
damie;</replacetoken> のようにLFだけにしても改行として判断されるようですね。junさんの実験 でもこのあたりはご指摘いただいています。今度はLFのみで改行を表現する ファイルを操作してみると失敗しました。 ************** MainAction.java ********************* 置換する文字列 , damie); これをバイナリエディタのデータでは 2C 0A 64 61 6D 69 65 29 3B ANTでの定義 <replace dir="${toBuildDir}" value=");"> <include name="*Action.java" /> <replacetoken>,
damie;</replacetoken> </replace> できませんでした。ちなみに、文字列を全部16進数にして、 <replacetoken>,
damie);</replacetoken> これでもできませんでした。testファイルは文字列を全部16進数にしても 大丈夫です。OSによって改行の表現が違うというのは分かったのですが、 windowsではLFのみの改行は文字では無いので無視するのでしょうか・・・。 日本語を含んだファイルではないので、結局は文字コードを変換する操作 で解決しそうな感じです。参考にしたサイトにやり方が載ってました。 テキスト・ファイルの行末コードを変更する 単純な操作ながら、Xdocletで自動生成されるクラスは100近くあるので 大幅な修正後のジェネレートも考えると手動で操作するのは現実的では なさそうです。置換ができそうでできないのがなんとももどかしいですが、 何か他にいい方法は無いものでしょうか? もしありましたら引き続きよろしくお願いします。 | ||||
|
投稿日時: 2005-11-25 13:34
ヘルプを読んだのですが、AntのReplaceタグのマルチライン置換は
「プラットフォーム依存の改行コード」にのみ対応するようですね。 探して回るより、JavaのString#replace()などを利用して、正規表 現でマッチをかけて置換するようなツールアプリを自作するのが一 番の近道かもしれません。 | ||||
|
投稿日時: 2005-11-25 15:26
シュンさん、ご返答ありがとうございます。
お手数かけまして申し訳ないです。 その方が早いかなとはうすうす感じていたのですが、なかなか諦め が悪いたちだったもので・・・。 自作して対応することにします。 皆様のご返答&閲覧に感謝いたします。ありがとうございました。 |