一括置換のマクロNo.08052
ノノムン さん 16/01/29 10:57
 
こんにちは ノノムンです。
一括置換のマクロを教えてください。
もう年で思考力がかすんできました。

目標は 文中に 次のように "この中" にあります

msgid "&Save" ;元文
msgstr "&保存" ;表示文

これを一度 英文に戻しまして 

msgid "&Save"
msgstr "&Save"

もう一度 機械翻訳をかけたいのです。

それではよろしくお願いします

[ ]
RE:08052 一括置換のマクロNo.08056
山紫水明 さん 16/01/30 11:05
 
 ノノムンさん,

 ご要望をくみ取れていないかもしれませんが,

検索:^([^"]*\")([^"]+\")(.*\n)([^"]*\")([^"]*\")(.*\n)
置換:\1\2\n\4\2\n
正規表現

でできませんか。

                    山紫水明
                    SANSHISUIMEI

[ ]
RE:08052 一括置換のマクロNo.08058
ノノムン さん 16/01/31 19:07
 
こんにちは ノノムンです

一括置換のマクロについて書き方が未熟でした

文例は「
ほかの言葉・・
msgid "&Save" 
ほかの言葉・・
msgstr "&保存"
ほかの言葉・・EOF
」です。

やりたいことは
msgid "を検索して 次の" まで 例では 「&Save」 を 取得します。
次の 
msgstr "を検索して 次の" まで 例では 「&保存」 を 「&Save」で置換します。

これをEOFまで マクロでしたいのですが、
言葉を探し 次の区切りまで取得、
別の言葉を探し 次の区切りまでを置換、
と複雑になってどうすればよいか、
マクロのhelpやwebページを探したりしましたが結局わかりませんでした。
これができましたら もう一度翻訳をかけて、英語と日本語の テキストを作りたい
と思っています。

それではよろしくお願いします

[ ]
RE:08058 一括置換のマクロNo.08059
山紫水明 さん 16/01/31 20:22
 
 ノノムンさん,

 それでしたら,次のマクロで一度お試し下さい。
//--------------------------------------
setcompatiblemode 0x00000200;
gofiletop;
while( 1 ) {
    searchdown2 "(?<=msgid \").+(?=\")", regular;
    if( !result ) break;
    $s = gettext( foundtopx, foundtopy, foundendx, foundendy );
    right;
    searchdown "(?<=msgstr \").+(?=\")", regular;
    insert $s;
    if( !result ) break;
}
endmacro;
//--------------------------------------

                    山紫水明

[ ]
RE:08059 一括置換のマクロNo.08060
ノノムン さん 16/02/01 13:09
 
 山紫水明さん ノノムンです ありがとうございます。
95%は成功しましたが、書き漏らしていた部分があるのに気がつきました。

マクロ変換後例文

#. Tooltip for '&Slice'
msgid ""
"[Slice] will generate the G-code paths, and [Save] will export them. Many "
"settings will not trigger a reslice as they affect only computations that "
"happen on export."
msgstr "[スライス] Gコードを作成して[保存] します。"

#. Widget


**予備1
その部分は次で 特徴は
#. //項目始まり
msgid "" //認識項目 「空」や「1行に収まらない時」は ""
"[Slice] will generate the G-code paths, and [Save] will export them. Many "
 //数行にわたって続くこともあり

msgstr "" //表示項目 
#. //次の項目
です。

**予備2
正しいのは
#. //項目始まり 改行
の次から msgid「・・・・」msgstr の手前までを
msgstr「の次から 置き換え
貼り付けすればよいようです。
これで英文言語ファイルが出来ます。
考えますと余計にややこしくなってきました。

**目標
実際にしたい msgid "letters" の英文 から msgstr "文字" 和文への変換ですが
よく考えますと、
翻訳機が msgid(メッセージID)を 適当に翻訳してしまいますので
「#」などを行頭にしまして
「全文原稿」から
msgid "letters" //->#letters 抜き出し 
#をつけて、並べて「英文原稿」とします。
数行にわたる場合、途中の""は74文字以下に区切るためのようです。
出来れば "" は削除し開始記号「#(ほかでもよい)」にしたいです。

#英文原稿
#[Slice] will generate the G-code paths, and [Save] will export them. Many s
ettings will not trigger a reslice as they affect only computations that hap
pen on export.

翻訳機に掛けまして、
#文字 として文章を吐き出したテキストをコピペしまして「和文原稿」とします。
場合により前後の順序が変わりますが、手で書き換えます。
次に これを 74文字ごとに区切れるようにして
*和文翻訳
#[スライス] Gコードパスを生成し、[保存]、それらをエクスポートします。多くの
設定は、彼らが輸出に起こるのみの計算に影響を与えるresliceをトリガしません。
*手編集 和文原稿
#[スライス]がGコードを生成し、[保存]でエクスポートします。設定は再スライスを
始めまず、エクスポート時に変換します。
*英和全文原稿
msgstr "文字" //<-#文字 書き込み
として組み込み 「英和全文」にして仕上げたいと思います。

*英和全文原稿 2項目例文 Tooltip for '&Slice' & Widget 
************
#. Tooltip for '&Slice'
msgid ""
"[Slice] will generate the G-code paths, and [Save] will export them. Many "
"settings will not trigger a reslice as they affect only computations that "
"happen on export."
msgstr ""
"[スライス]がGコードを生成し、[保存]でエクスポートします。"
"設定は再スライスを始めまず、エクスポート時に変換します。"

#. Widget
msgid "settings will not trigger a reslice as they affect only computations
that "
"happen on export."
msgstr "設定は再スライスを始めまず、エクスポート時に変換します。"

************まとめ
1マクロ
英または和 全文原稿から msgid 以下の文だけを抜き出し1行ずつにします。
#英文原稿
#[Slice] will generate the G-code paths, and [Save] will export them. Many s
ettings will not trigger a reslice as they affect only computations

2マクロ
#和文原稿
#[スライス]でGコードを生成し、[保存]でエクスポートします。設定は再スライスを
始めまず、エクスポート時に変換します。
和文原稿 を 英または 和 全文原稿 の
msgstr "" 内に 書き込み英和全文原稿にします。
これには
msgid "ENGLISH" と msgstr "日本語" が入っています。
**

ますますややこしくて手に負えません。
よい方法を教えてください。

それではよろしくお願いします。

On 2016/01/31 20:22, 山紫水明 wrote:
>  ノノムンさん,
>
>  それでしたら,次のマクロで一度お試し下さい。
> //--------------------------------------
> setcompatiblemode 0x00000200;
> gofiletop;
> while( 1 ) {
>      searchdown2 "(?<=msgid \").+(?=\")", regular;
>      if( !result ) break;
>      $s = gettext( foundtopx, foundtopy, foundendx, foundendy );
>      right;
>      searchdown "(?<=msgstr \").+(?=\")", regular;
>      insert $s;
>      if( !result ) break;
> }
> endmacro;
> //--------------------------------------
>
>                      山紫水明
>
>

[ ]
RE:08060 一括置換のマクロNo.08066
ノノムン さん 16/02/03 19:25
 
ノノムンです

webで文例を探しまして
何とか次の文を書きました。
検索は「msgid " 〜 "」にしましたが
本当にしたいのは
文章

「msgid "$ / cm^3"
msgstr "$ / cm^3"

#. 」
 
の内 

「 "$ / cm^3"
msgstr "$ / cm^3"



までを切り出したいのに どの様に指定すればよいかがわかりません。
正規表現が「鍵」らしいと思ったのですが、どうにも理解できていません。

そして
はじめはそれなりに動いたのですが、途中から エラーがでるようになりました。

「H.MAC(17):文法エラーです。
(ヘルプ参照)
文:・」
 
とでました、再起動をしても治りません。
少し前、改行を調整したりしますと治ったことがありますが、なぜ治ったかわかりま
せん

17行は
 gofileend;    // 最終行にカーソルを移動
です。
行を変えたりしますと別のエラー行が表示されたりします。(コマンド内容が一定し
ません)
ほかのマクロ文ですとエラーにはなりません??

何かありましたら教えてください。


// 原稿のファイルから検索対象を抜き出しを格納ファイルに「#」をつけて1行ずつ
貼り付ける
#HWND = hidemaruhandle(0);   // 原稿のファイルのファイルハンドルを取得
newfile;     // 格納ファイル作成
#HWND_NEW = hidemaruhandle(0);   // 格納ファイルのファイルハンドルを取得
setactivehidemaru #HWND;   // 原稿ファイルに戻る
gofiletop;     // ファイルの先頭にカーソルを移動
while (code != eof) {    // ファイルの終わりまでループ

 searchdown2 "(?<=msgid \").+(?=\")", regular; // 原稿ファイルで実行,msgid "
 〜 "
 if( !result ) break;   // ファイルの終わり
 $s = gettext( foundtopx, foundtopy, foundendx, foundendy ); //範囲検索結果,
開始xy,終了xy
 right;     // 次へ

 setactivehidemaru #HWND_NEW; // 格納ファイルで実行
// insert "# \""+$s+"\"\n";  // 文字列を挿入
 insert "# "+$s+"\n";//  // 文字列を挿入
 gofileend;    // 最終行にカーソルを移動

 setactivehidemaru #HWND;  // 原稿ファイルに戻る
 movetolineno 1, lineno + 1;  // 次の行に
}     // ループ終了
setactivehidemaru #HWND_NEW;   // 格納ファイルを表示して終了
endmacro;     // マクロ終了



On 2016/02/01 13:09, ノノムン wrote:
>   山紫水明さん ノノムンです ありがとうございます。

[ ]
RE:08066 一括置換のマクロNo.08067
ノノムン さん 16/02/03 19:47
 
On 2016/02/03 19:25, ノノムン wrote:
> ノノムンです
エラーヘルプ 現在v8.54 です、
マクロを実行するとき、文法をうまく解釈できないと
読み込み時の段階でエラーが出ることがあります。

コメントアウト 置き換えで 次はエラーになりません。
17 // gofileend;    // 最終行にカーソルを移動
18 // down;     // 最終行にカーソルを移動

24 //endmacro;    // マクロ終了
25 endmacroall;

それではよろしくお願いします。

[ ]
RE:08067 一括置換のマクロNo.08068
ノノムン さん 16/02/03 20:01
 
On 2016/02/03 19:47, ノノムン wrote:
次もエラーになってしまいます。

15  insert "# \""+$s+"\"\n";  // 文字列を挿入
16 // insert "# "+$s+"\n";//  // 文字列を挿入
17 // gofileend;    // 最終行にカーソルを移動
22 //endmacro;     // マクロ終了
23 //endmacroall;

"# \""+$s+"\"\n" のところは " がややこしいですが、
#_"文章"cr のつもりです(_ は半角スペースのことです)
"# "+$s+"\n" ですと 
#_文章cr です。

それではよろしくお願いします。

[ ]
RE:08067 一括置換のマクロNo.08069
h-tom さん 16/02/03 20:29
 

h-tom です。

>エラーヘルプ 現在v8.54 です、
>マクロを実行するとき、文法をうまく解釈できないと
>読み込み時の段階でエラーが出ることがあります。

マクロファイルのエンコードは何になってます?
有効なのは
・Shift_JIS
・UTF-16LE
・UTF-8のBOM付き
だけです。
対応していないエンコードになっていませんか?

[ ]
RE:08067 一括置換のマクロNo.08070
K'zawa さん 16/02/03 20:29
 
ノノムンさん、こんにちは。
K'zawaです。

gofileend;の後ろに全角スペースがあるみたいです。

[ ]
RE:08070 一括置換のマクロNo.08071
ノノムン さん 16/02/03 21:21
 

On 2016/02/03 20:29, K'zawa wrote:
> ノノムンさん、こんにちは。
> K'zawaです。
>
> gofileend;の後ろに全角スペースがあるみたいです。
確かに全角スペースがありました、判るように
その他、ファイルタイプ、デザイン、場所の一覧 で半角全角スペース記号を生かし
ました。
ここがどこかにあるのを知ってはいましたが、探すとなかなか出ませんでした。
win7を再インストールして、だいぶ失った物があります。
(何をバックアップすればよいのかを間違ってしまいました)
>
>

> h-tom です。
>
>> >エラーヘルプ 現在v8.54 です、
>> >マクロを実行するとき、文法をうまく解釈できないと
>> >読み込み時の段階でエラーが出ることがあります。
> マクロファイルのエンコードは何になってます?
*保存にしてみますと 自動判定 SHIFT-JIS に成っていました。
> 有効なのは
> ・Shift_JIS
> ・UTF-16LE
> ・UTF-8のBOM付き
> だけです。
> 対応していないエンコードになっていませんか?
>
>
ありがとうございました。

次の変化で「"」有り無しを変えれました。
しかし多行にわたると失敗します。

 9 // searchdown "(?<=msgid \").+(?=\")", regular; // 原稿ファイルで実行,msg
id " 〜 "
10  searchdown "(?<=msgid ).+(?=\n)", regular; // 原稿ファイルで実行,msgid "
 〜 "
27 //endmacro;     // マクロ終了
28 endmacroall;

それではよろしくお願いします。

[ ]