検索、複写などにつきましてNo.06508
ノノムン さん 11/01/12 22:40
 
tommy こと ノノムンです

お世話になっています
表記の仕方が判らないので、操作する文を「」で区切りました。

ファイルをを検索して
その中の
「;#define TOKEN                               0x0E」
の内から 次ぎに注目(検索)して
「;#define」
下の行に2重に複写してから、
キーワードを「const  byte   = 」に変更したいのですが
マクロではどの様に表記すればよいでしょうか。

複写して変更するのが判りません。

「;#define TOKEN                               0x0E」

上記を -> 下記に変更 したいです。

「;#define TOKEN                               0x0E」
「const  byte  TOKEN                         = 0x0E」

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

[ ]
RE:06508 検索、複写などにつきましてNo.06509
IKKI さん 11/01/12 23:25
 
ノノムンさん (tommy さん?)、こんにちは。ユーザの IKKI です。

「複写して変更」と考えるとややこしいですが、単純に置換一発で済ませてしまえば
いいのではないでしょうか。

検索: 「^;#define (\S+ +)(\S+)$」
置換: 「\0\nconst byte \1 = \2」
正規表現: ON

あえてマクロで書けば
replacedown "^;#define (\\S+ +)(\\S+)$", "\\0\\nconst byte \\1 = \\2", regular;
こんな感じで。

[ ]
RE:06509 検索、複写などにつきましてNo.06510
ノノムン さん 11/01/13 21:16
 
お返事有り難うございました。

テキスト変換のつもりで
asm ソースから JAL変換をしようとしています。

全置換で下記をしてみたのですが、出来ませんでした。

昼間は、以前から大体何かは判っていたので、
「正規表現」を検索しても出てこなかったので
止まっていまして、先ほど検索窓で「正規表現」が出てきました。

また、マクロも書き込んでみたのですがやはりダメでした。
おそらく暗黙の了解事項を(私が)知らないため、
何かを抜かしているのだと思うのですが・・
(マクロの前後の構文など)

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


(2011/01/12 23:25), IKKI wrote:
> ノノムンさん (tommy さん?)、こんにちは。ユーザの IKKI です。
>
> 「複写して変更」と考えるとややこしいですが、単純に置換一発で済ませてしまえば
> いいのではないでしょうか。
>
> 検索: 「^;#define (\S+ +)(\S+)$」
> 置換: 「\0\nconst byte \1 = \2」
> 正規表現: ON
>
> あえてマクロで書けば
> replacedown "^;#define (\\S+ +)(\\S+)$", "\\0\\nconst byte \\1 = \\2", reg
>ular;
> こんな感じで。
>
>

[ ]
RE:06510 検索、複写などにつきましてNo.06511
IKKI さん 11/01/14 00:16
 
ノノムンさん、こんにちは。ユーザの IKKI です。

お使いの秀丸エディタのバージョンはいくつでしょうか?
私の書いた正規表現は秀丸エディタ v8.00 以降でないと使えません。
# ご質問の中に、お使いの秀丸エディタのバージョンが書かれていなかったので、
# 最新の正式版と仮定して回答しました。

マクロは、あの1行だけで完全なマクロになるはずです。
手元で試した限りでは
--------
;#define TOKEN                               0x0E
--------

--------
;#define TOKEN                               0x0E
const  byte  TOKEN                         = 0x0E
--------
に正しく置換できました。
もしソースが上記の通りでなく、行頭にインデントがあったり空白の中にタブ文
字が含まれていたりするのであれば、また違った正規表現が必要になります。

> asm ソースから JAL変換をしようとしています。
私はアセンブラのソースのことはちょっとよくわかりませんで…
ノノムンさんはベテランプログラマの方とお見受けします。釈迦に説法をしてし
まっては失礼と存じますので、私からこれ以上お話を伺うことは控えます。

[ ]
RE:06511 検索、複写などにつきましてNo.06512
ノノムン さん 11/01/14 10:35
 
IKKIさん こんにちは
お返事有り難うございます。

(2011/01/14 0:16), IKKI wrote:
> ノノムンさん、こんにちは。ユーザの IKKI です。
>
> お使いの秀丸エディタのバージョンはいくつでしょうか?
> 私の書いた正規表現は秀丸エディタ v8.00 以降でないと使えません。

バージョンを書かずに済みませんでした。
8.01になっていました。

> # ご質問の中に、お使いの秀丸エディタのバージョンが書かれていなかったので、
> # 最新の正式版と仮定して回答しました。
>
> マクロは、あの1行だけで完全なマクロになるはずです。
> 手元で試した限りでは
> --------
> ;#define TOKEN                               0x0E
> --------
> を
> --------
> ;#define TOKEN                               0x0E
> const  byte  TOKEN                         = 0x0E
> --------
> に正しく置換できました。
> もしソースが上記の通りでなく、行頭にインデントがあったり空白の中にタブ文
> 字が含まれていたりするのであれば、また違った正規表現が必要になります。
>
>> asm ソースから JAL変換をしようとしています。
> 私はアセンブラのソースのことはちょっとよくわかりませんで…
> ノノムンさんはベテランプログラマの方とお見受けします。釈迦に説法をしてし
> まっては失礼と存じますので、私からこれ以上お話を伺うことは控えます。

ベテランと言えば超ベテラン(もう覚える余地が残っていないかも)
もうボケも始まっていまして、
何度でも教えていただくのは気が引けるものの、非常に有り難いです。

今後もよろしくお願いいたします。

原因ははじめにコメントアウトしていたのを、
戻していて仕舞っていたのを忘れて、
#define でやっていました(道理で見つからないとなるはずですね)

他には

;var volatile  byte  bit「at」ポートビットなど定義
;var volatile  byte  bit「=」数値定義
;var volatile  bit  「at」PORT:bit  定義
;const  byte  bit「=」数値,式
;alias  新名  「is」  旧名
のパターンもありまして、違いを見つけなおしています。

それでは有り難う御座いました。

[ ]
RE:06511 検索、複写などにつきましてNo.06513
ノノムン さん 11/01/15 15:45
 
IKKIさん こんにちは

新たに判った問題の報告とご指導のお願いです。

検索文字列のパターンが複数有って上手く行かないのも原因でした。
はじめに書いていたのは
「;#define TOKEN 0x0E」だけでしたが

「キーワード」の後には「識別子」空白「データ」空白「;コメント(空白を含
む)」
例文「;#define TOKEN 0x0E ; coment 」等でした。

「replacedown "^#define (\\S+ +)(\\S+)$", "\\0\\nconst byte \\1 = \\2
, regular;」
下方置き換え,行頭,検索文字列,一行複写,改行,const byte 1文字列 = 2文字
列 正規表現
までは判ったんですが、
2文字列以降の、コメントまでの空白;空白,コメント,空白等、文字数を規定せ
ずに置き換えることは可能でしょうか?

「replacedown "^#define (\\S+ +)(\\S+ +)$", ";\\0\\nconst byte \\1 =
\\2\\3\\4", regular;」
のようにやっても上手く行きませんでした。
マクロの文法を学ぼうと秀丸ヘルプ、マクロヘルプを検索しては読んでいる
んですが、(\\S+ +)
目的の所を見つけることが出来ません。
(特に単語の数が不定の場合です)

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

(2011/01/14 0:16), IKKI wrote:
> ノノムンさん、こんにちは。ユーザの IKKI です。
>
> お使いの秀丸エディタのバージョンはいくつでしょうか?
> 私の書いた正規表現は秀丸エディタ v8.00 以降でないと使えません。
> # ご質問の中に、お使いの秀丸エディタのバージョンが書かれていなかったので、
> # 最新の正式版と仮定して回答しました。
>
> マクロは、あの1行だけで完全なマクロになるはずです。
> 手元で試した限りでは
> --------
> ;#define TOKEN                               0x0E
> --------
> を
> --------
> ;#define TOKEN                               0x0E
> const  byte  TOKEN                         = 0x0E
> --------
> に正しく置換できました。
> もしソースが上記の通りでなく、行頭にインデントがあったり空白の中にタブ文
> 字が含まれていたりするのであれば、また違った正規表現が必要になります。
>
>> asm ソースから JAL変換をしようとしています。
> 私はアセンブラのソースのことはちょっとよくわかりませんで…
> ノノムンさんはベテランプログラマの方とお見受けします。釈迦に説法をしてし
> まっては失礼と存じますので、私からこれ以上お話を伺うことは控えます。
>
>

[ ]
RE:06513 検索、複写などにつきましてNo.06514
秀まるお2 さん 11/01/15 16:59
 
 こちらでテストした限りでは,

検索: 「^;#define[ \t]+([^ \t\n]+[ \t]+)([^\n;]+)(|;.*)$」
置換: 「\0\nconst byte \1 = \2\3」
正規表現: ON

 ならいけると思います。

[ ]
RE:06514 検索、複写などにつきましてNo.06515
秀まるお2 さん 11/01/15 17:05
 
 もっと簡単にできました。

検索: 「^;#define[ \t]+([^ \t\n]+[ \t]+)(.+)$」
置換: 「\0\nconst byte \1 = \2」
正規表現: ON

 でもいいようです。

[ ]
RE:06515 検索、複写などにつきましてNo.06516
ノノムン さん 11/01/15 20:51
 
秀まるお2さん こんばんは

ご解答有り難うございます。

> 検索: 「^#define[ \t]+([^ \t\n]+[ \t]+)(.+)$」
> 置換: 「;\0\nconst byte \1 = \2」
> 正規表現: ON
上記を実行しますと

「#define SIGNATURE           "AVRISP_2"  ;識票文字列」
-> 
「;#define SIGNATURE           "AVRISP_2"  ;識票文字列
const byte SIGNATURE            = "AVRISP_2"  ;識票文字列」
無事に全部変換できました。

必要度が忘れた頃にやってきますので
判る名前を付けてマクロ命というのが一番有り難いです。
今回はソースにコメントで書きました。
(と勝手を申しまして済みません)

自分でも判るようにヘルプで勉強はいたしますものの
”[ \t]とか([^ \t\n]+[ \t]+)とかの意味が”
何故かたどり着けないでいます。

文章記載の文例などはどこかにありますでしょうか?

まだ
「TransferData            res     1       ;USART/SPI用送受信データ」
->
「;TransferData            res     1       ;USART/SPI用送受信データ
var byte TransferData ;USART/SPI用送受信データ」

等が残っていまして、なんとか自分でも作ってみたいと思っています。

(小生現役中はマニュアルなども作っていまして、
言葉や記号に説明からはじめて、操作が判るように工夫していました、
その頃は最終的にマップと名づけた
1枚の紙による説明書でなんとか事足りたのですが
最近のように複雑な事柄が増えていて
それだけでは難しいことも判っています)

なんとか自由にこなしたいとは思っていますが、
覚えるより、忘れる方が多くなってきて困っています。

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

(2011/01/15 17:05), 秀まるお2 wrote:
>  もっと簡単にできました。
>
> 検索: 「^;#define[ \t]+([^ \t\n]+[ \t]+)(.+)$」
> 置換: 「\0\nconst byte \1 = \2」
> 正規表現: ON
>
>  でもいいようです。
>
>

[ ]
RE:06516 検索、複写などにつきましてNo.06517
秀まるお2 さん 11/01/15 22:11
 
 マクロにするには、「マクロ」メニューの「キー操作の記録開始/終了」を実
行してから置換コマンドを実行し、その後「キー操作の記録開始/終了」をもう
一度実行してからさらに「マクロ・キー操作の保存」を実行するとマクロ化出来
ます。

 それか、手作業でマクロを作る場合でも、「\」を「\\」にすることだ気をつ
ければそんなに難しくないと思います。

> 自分でも判るようにヘルプで勉強はいたしますものの
> ”[ \t]とか([^ \t\n]+[ \t]+)とかの意味が”

 [ \t] は、空白またはタブ文字という意味になります。

 [^ \t\n]は、「空白でもタブ文字でも改行でもない任意の1文字」という意味
になります。別に「^ \t]と書いてもいいんですが、今回のケースだとそこの部
分が余計な改行文字にヒットしてしまうケースがあって、あえてこう書かざるを
得ませんでした。

 任意の文字列と任意の文字列を空白またはタブ文字で区切ってるような物にヒ
ットさせるには、例えば

   #define XXXX

 みたいなのにヒットさせたい場合は、

    #define[ \t]+XXXX

 みたいに書く形になります。今回のケースはその「XXXX」の部分が不確定だっ
たので、そこの部分を「[^ \t\\n]+」のような書き方にさぜるを得ませんでした。

 あと、タグ付き正規表現を駆使する形にはなってます。

> 「TransferData            res     1       ;USART/SPI用送受信データ」

検索: 「^TransferData\>[^;\n]*(|;.*)$」
置換: 「;\0\nvar byte TransferData \1」
正規表現: ON

 でいけました。

 今回は「\>」を使いましたけど、別に

検索: 「^TransferData[ \t]*[^;\n]*(|;.*)$」

 と書いてもいいかとは思います。

[ ]
RE:06517 検索、複写などにつきましてNo.06518
ノノムン さん 11/01/15 22:30
 
秀まるお2さま お返事有り難うございます。

キーインで記録して中を見るのは参考になりました。

自分でもっと色々試してみます。

しかし今回のは
「;TransferData            res     1       ;USART/SPI用送受信データ
var byte TransferData ;USART/SPI用送受信データ」
「res」がキーワードでして、「TransferData」は変数になり
変数定義が「var byte」に順番も変化 「;」でコメントアウトするつもりでした。

それでは有り難うございました。


(2011/01/15 22:11), 秀まるお2 wrote:
>  マクロにするには、「マクロ」メニューの「キー操作の記録開始/終了」を実
> 行してから置換コマンドを実行し、その後「キー操作の記録開始/終了」をもう
> 一度実行してからさらに「マクロ・キー操作の保存」を実行するとマクロ化出来
> ます。
>
>  それか、手作業でマクロを作る場合でも、「\」を「\\」にすることだ気をつ
> ければそんなに難しくないと思います。
>
>> 自分でも判るようにヘルプで勉強はいたしますものの
>> ”[ \t]とか([^ \t\n]+[ \t]+)とかの意味が”
>
>  [ \t] は、空白またはタブ文字という意味になります。
>
>  [^ \t\n]は、「空白でもタブ文字でも改行でもない任意の1文字」という意味
> になります。別に「^ \t]と書いてもいいんですが、今回のケースだとそこの部
> 分が余計な改行文字にヒットしてしまうケースがあって、あえてこう書かざるを
> 得ませんでした。
>
>  任意の文字列と任意の文字列を空白またはタブ文字で区切ってるような物にヒ
> ットさせるには、例えば
>
>     #define XXXX
>
>  みたいなのにヒットさせたい場合は、
>
>      #define[ \t]+XXXX
>
>  みたいに書く形になります。今回のケースはその「XXXX」の部分が不確定だっ
> たので、そこの部分を「[^ \t\\n]+」のような書き方にさぜるを得ませんでした。
>
>  あと、タグ付き正規表現を駆使する形にはなってます。
>
>> 「TransferData            res     1       ;USART/SPI用送受信データ」
>
> 検索: 「^TransferData\>[^;\n]*(|;.*)$」
> 置換: 「;\0\nvar byte TransferData \1」
> 正規表現: ON
>
>  でいけました。
>
>  今回は「\>」を使いましたけど、別に
>
> 検索: 「^TransferData[ \t]*[^;\n]*(|;.*)$」
>
>  と書いてもいいかとは思います。
>
>

[ ]