メガソフト トップサポートユーザーフォーラム > テキストエディタ MIFESフォーラム
テキストエディタ MIFESフォーラム
[フォーラムトップ]
一括表示

文字数が一定しない場合の置換定義ファイルの記述法 - Minori 2011/01/26(Wed) 15:36 No.2688
例えば、

"アルミロッド 50\x00\x00" を"アルミロッド 50CM"と置換する場合は、
^E{アルミロッド ..}{\x00\x00}^A\1CM

"アルミロッド 150\x00\x00" を"アルミロッド 150CM"と置換する場合は、
^E{アルミロッド ...}{\x00\x00}^A\1CM

"." の部分が2の場合も3の場合も一行で表す方法があればご教示の程宜しくお願いします。

Re: 文字数が一定しない場合の置換定義ファイルの記述法 - 田中徹 2011/01/26(Wed) 18:38 No.2689
> ^E{アルミロッド ...}{\x00\x00}^A\1CM
>
> "." の部分が3の場合も4の場合も一行で表す方法があれば..

正規表現でなくワイルドカードによる置換ではいかがですか。
(私の環境では確認済みです)

^Cアルミロッド*\x00\x00^Aアルミロッド\1CM

Re^2: 文字数が一定しない場合の置換定義ファイルの記述法 - Minori 2011/01/27(Thu) 10:31 No.2690
いつも回答ありがとうございます。

> 正規表現でなくワイルドカードによる置換ではいかがですか。
うまくいきそうだと思ったのですが、実際には固定長レコードのファイルの中ででてきますので、レコード毎の改行がありません。
ですので、

アルミロッド 10CM ,,, アルミテープ 10\x00\x00,,,

というようなこともありますので今回はこの方法ではうまくいかない様です。

Re^3: 文字数が一定しない場合の置換定義ファイルの記述法 - 田中徹 2011/01/27(Thu) 10:57 No.2691
> 実際には固定長レコードのファイルの中ででてきますので、レコード毎の改行がありません。

No.2688 からは読み取れませんでした。(陳謝)

> アルミロッド 10CM ,,, アルミテープ 10\x00\x00,,,
> というようなこともありますので

No.2690 から私は
(商品)名, 数値 , 以降 \x00 の連続
というものを想像しています。

データフォーマット(データの固定長など)を示していただき
どのようなデータを(1つでなく適当数)どう変更したいか
お伝えいただければお力になれるかもしれません。

Re^4: 文字数が一定しない場合の置換定義ファイルの記述法 - Minori 2011/01/27(Thu) 14:26 No.2692
回答ありがとうございます。

商品名に半角小英字 (a,b,c,)が混じっていると、その部分が\x00に置き換わって保存されるファイルが相手です。半角英大字 (A,B,C,)
はそのまま保存されます。
元データが "アルミロッド 50cm" だと変換後 "アルミロッド 50\x00\x00"となってしまいます。
このファイルは外から送られてくるので変換前に "cm" を "CM" にできません。
また、商品によっては "cm" でなく、"CM"になっている場合もあります。
fillerは " " です。

極端に書くと次のようなレコードが
アルミロッド 10CM アルミテープ 10\x00\x00 アルミロッド 100\x00\x00 アルミロッド 10\x00\x00

この様になって欲しいのです。
アルミロッド 10CM アルミテープ 10\x00\x00 アルミロッド 100CM アルミロッド 10CM

"アルミロッド" の変換の記述で "アルミテープ" が変換されてはいけません。
"アルミテープ" は "アルミテープ" 用の定義で "MM" に変換します。

うまく伝わったか心配ですが宜しくお願いします。

Re^5: 文字数が一定しない場合の置換定義ファイルの記述法 - 田中徹 2011/01/27(Thu) 15:32 No.2693
> fillerは " " です。

delimiter が半角スペースとして理解します。

> 極端に書くと次のようなレコードが

固定長ファイルになるとは思えませんが...

> アルミロッド 10CM アルミテープ 10\x00\x00 アルミロッド 100\x00\x00 アルミロッド 10\x00\x00
>
> この様になって欲しいのです。
> アルミロッド 10CM アルミテープ 10\x00\x00 アルミロッド 100CM アルミロッド 10CM
>
> "アルミロッド" の変換の記述で "アルミテープ" が変換されてはいけません。
> "アルミテープ" は "アルミテープ" 用の定義で "MM" に変換します。

バイナリ(\x00 のみ)混じりのテキストファイルとして

(1) このファイルを MIFES の置換機能を用いて
  旧文字列:* * (半角で4バイト)
  新文字列:\1 \2\n
  検索方法:ワイルドカード
 を実行して1行1データに整形する。

(2) No.2689 の置換定義ファイルを作成する。
  (アルミテープに関しても記述)

(3) \x00 の置換がすべて終わったら改行を削除すればよいだけなので
  旧文字列:\n
  新文字列:(何も記述しない)
  検索方法:ワイルドカード
 を実行して行末の改行を削除する。

1行の(ものすごい長さの)テキストが完成。
最終の半角スペースはそちらの仕様にあわせてください。

(1) と (3) の操作が潔くないというのなら MIL で記述ということになりそうです。

Re^6: 文字数が一定しない場合の置換定義ファイルの記述法 - Minori 2011/01/27(Thu) 15:50 No.2694
> fillerは " " です。
レコードを固定長に合わせるためにレコードの最後に埋める文字です。

文字数毎に置換定義を追加する事になりそうです。

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

Re^7: 文字数が一定しない場合の置換定義ファイルの記述法 - 田中徹 2011/01/27(Thu) 18:10 No.2695
> 文字数毎に置換定義を追加する事になりそうです。

お力になれず申し訳ありませんでした。

Re: 文字数が一定しない場合の置換定義ファイルの記述法 - matsu 2011/01/28(Fri) 11:56 No.2696
^E{アルミロッド\s[0-9]+}\\x00\\x00^A\1CM
ではどうでしょうか?

Re^2: 文字数が一定しない場合の置換定義ファイルの記述法 - Minori 2011/01/28(Fri) 13:57 No.2697
matsu さん、回答ありがとうございます。
> ^E{アルミロッド\s[0-9]+}\\x00\\x00^A\1CM
> ではどうでしょうか?

この考え方でうまくいきました。

"便利な正規表現 置換 の例" を参照していろいろ試していました。
http://www.megasoft.co.jp/support/mifes/seiki.html?linkid=01#06

次の様な表現でもうまくいくのではないかと思うのですが、エラーになってしまいます。
^E{アルミロッド }{...|..}{\x00\x00}^A\1\2CM
^E{アルミロッド }{|...|..|}{\x00\x00}^A\1\2CM

"|" と "." は一緒に使えないのか、記述が間違っているのか、、、。
ご存じでしたらご教示お願いします。

Re^3: 文字数が一定しない場合の置換定義ファイルの記述法 - matsu 2011/01/28(Fri) 15:10 No.2698
> 次の様な表現でもうまくいくのではないかと思うのですが、エラーになってしまいます。
> ^E{アルミロッド }{...|..}{\x00\x00}^A\1\2CM
> ^E{アルミロッド }{|...|..|}{\x00\x00}^A\1\2CM
>
> "|" と "." は一緒に使えないのか、記述が間違っているの

{}内で|は指定できないようです。
{アルミロッド }{...}{\\x00\\x00}|{アルミロッド }{..}{\\x00\\x00}
でどうでしょうか?

Re^4: 文字数が一定しない場合の置換定義ファイルの記述法 - Minori 2011/01/28(Fri) 15:25 No.2699
> {アルミロッド }{...}{\\x00\\x00}|{アルミロッド }{..}{\\x00\\x00}
> でどうでしょうか?

うまく変換できました。
ありがとうございました。