アップデートのお知らせを使いやすくするNo.08074
ノノムン さん 16/02/10 15:11
 
On 2016/02/03 21:21, ノノムン wrote:
ウインドーズ更新アップデート を使いやすくしたいのですが、
? のところがよくわかりません。
どの様にすればよいでしょうか?
それではよろしくお願いします。

// タイトル ウインドーズ更新アップデートの "nnnnnnn" だけを抜き出す
// 特徴は (KBnnnnnnn) と kb/nnnnnnn が有り 次のように成っています。
// Microsoft .NET Framework 3.5.1 のセキュリティ更新プログラム (Windows 7 SP
1 x86 用) (KBnnnnnnn)
// 詳細情報:
// ttp://support.microsoft.com/kb/nnnnnnn
// 応用 次のように使えます
// echo Uninstalling Knnnnnnn (telemetry for Win7/8.1)
// start /w wusa.exe /uninstall /kb:nnnnnnn /quiet /norestart
// コントロール パネル\すべてのコントロール パネル項目\Windows Update\インス
トールする更新プログラムの選択
// disabledraw;   // 表示停止
// openfile "?";   // 更新お知らせを開き
// ?    // 更新日付 を取得  
// #tmp = hidemaruhandle(0);  // ファイルハンドルを取得
// gofiletop;    // ファイル先頭にカーソルを
// while (code != eof) {  // LOOPはじめ からEOFまで繰り返し
// ?     // カーソルから (KB まで検索
// if( !result ) break;  // 無ければ ブレーク
// 1? または   // (KB の手前までを削除
// 2?     // kb/までを削除 判定しにくい
// right;    // )の次に進み
// }     // LOOP 終わり
// ?     // 保存フォルダ D:\!Dats\win7update
// $fname = "D:\\!Dats\\win7update\\"+"更新"+year+month+day+".txt";// ファイ
ルパス名前日付
// saveas $fname, sjis;  // 更新日付.txt 名でセーブ
// enabledraw;    // 表示再開
// setactivehidemaru #tmp;  // ファイルを表示して
// endmacro;    // マクロ終了

[ ]
RE:08074 アップデートのお知らせを使いやNo.08077
秀丸担当 さん 16/02/18 14:50
 

この会議室は基本的にマクロ作者様のための会議室になっていますが、コメント
が無いようなので、ヒントになりそうな点をコメントさせていただきます。
1つ前の翻訳関係についても一緒にコメントさせていただきます。

ある対象となるファイルがあって、その中から一定のルールに従って抽出するに
は、幾つか方法が考えらます。
1つは前の翻訳関係の既にマクロでも行われているように、検索のループをして
細かく制御する方法です。
翻訳関係のほうは、できているということであれば、それでいいのではないかと
思います。

検索しながら不必要な部分を削除する場合は、beginsel;をあらかじめ行ってか
ら、検索し、カーソルが移動したところでendsel;をすると、範囲選択されるの
で、そこでdelete;するといいです。
これはマクロに限らず通常の操作で「選択開始」コマンドしてからの検索の操作
と同じです。

他には、削除ではなく必要な部分をクリップボードに追加していくのが簡単です。
検索でヒットしたら、appendcopy;(追加コピー)を使ってクリップボードに追
加し、後でpaste;すると簡単です。

または、複数選択してコピーを使うとやりやすいです。この場合はまとめて一度
にできるので、抽出ルールが正規表現1つで書ける場合はやりやすいです。

setsearch "kb\\d\\d\\d", 0x10; //kb123 の正規表現の例
selectallfound;
copy;
newfile;
paste;
endmacro;

これらを使っていろいろ試してみてほしいです。

正規表現の書き方についてはヘルプを参照してほしいです。
検索ダイアログの検索文字列右側の「>」ボタンを押すとわかりやすいです。

あと、ファイルの更新日時を取得する直接的な方法は秀丸マクロにはありません。
別途田楽DLLやmacrodllなどを用意して使われることが多いようです。
または、COMを使って、普通はvbsやjsで書くことを秀丸マクロの文法に合わせて
書き直す方法があります。

//COMを使う更新日時取得の例
$file = "c:\\folder\\test.txt";
#objFso = createobject("Scripting.FileSystemObject");
#objFile = member( #objFso,"GetFile",$file );
$a=getpropstr(#objFile,"DateLastModified");
message $a;
endmacro;

Windows Update関係のテキストファイルというものが、そもそも存在するかどう
かや、どこにあるかは、すみませんが秀丸エディタとしてはわからないです。

[ ]
RE:08077 アップデートのお知らせを使いやNo.08078
ノノムン さん 16/02/18 22:49
 
お返事有り難うございます。

UPしましたのは先頭を総て//コメントにしたので分かりづらく失敗したと思っていま
す。

お知らせといいますのはタスクトレーに隠れている「新しい更新プログラムをご利用
できます」のことで時々表示されます。
出ましたページをドラッグコピペしましてnewファイルに張りますと、
KBnnnnnnn と
kb/nnnnnnn が同じ番号で組になって表示されます。
更新日時取得は必要ないかもしれません。

この番号が適正化調べて 不用なものは お知らせページの チェックをはずして、
右クリックから、再通知しないにしますと再度チェックが戻って表示することがない
のが分かりまして、
残った分をインストールしています。
インストールした分の控えを残しておかないと、追加や削除が出来ませんので整理フ
ァイルを作っておこうと思いました。

ヘルプやマクロヘルプを見ながらボチボチやっていますが、なかなか進みません。

お教えいただいた、マクロを使おうと調べましたがやはりヘルプに載っていないみた
いです。
クリップボードは一行ごとに新しいファイルに張り足してゆくのでしょうか?
前の翻訳関連でしていましたので、それでやってみます。
(翻訳アクセスは一度できたのですがマクロをさわっている内動かなくなってしまい
なぜだか分かっていません)

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


On 2016/02/18 14:50, 秀丸担当 wrote:
>
> この会議室は基本的にマクロ作者様のための会議室になっていますが、コメント
> が無いようなので、ヒントになりそうな点をコメントさせていただきます。
> 1つ前の翻訳関係についても一緒にコメントさせていただきます。
有り難うございます

> ある対象となるファイルがあって、その中から一定のルールに従って抽出するに
> は、幾つか方法が考えらます。
> 1つは前の翻訳関係の既にマクロでも行われているように、検索のループをして
> 細かく制御する方法です。
> 翻訳関係のほうは、できているということであれば、それでいいのではないかと
> 思います。
翻訳と言うより、言葉の継ぎ換えが出来ました。

> 検索しながら不必要な部分を削除する場合は、beginsel;をあらかじめ行ってか
beginsel; 分からないので調べます。

> ら、検索し、カーソルが移動したところでendsel;をすると、範囲選択されるの
> で、そこでdelete;するといいです。
endsel; ?
delete; ?
別のファイルの書き込むと消さなくてもよいのが分かりました。

> これはマクロに限らず通常の操作で「選択開始」コマンドしてからの検索の操作
> と同じです。
前は //$s = gettext( foundtopx, foundtopy, foundendx, foundendy ); //範囲検
索,開始xy,終了xy
で取り込んでいました。

>
> 他には、削除ではなく必要な部分をクリップボードに追加していくのが簡単です。
> 検索でヒットしたら、appendcopy;(追加コピー)を使ってクリップボードに追
> 加し、後でpaste;すると簡単です。
これでやってみます。
>
> または、複数選択してコピーを使うとやりやすいです。この場合はまとめて一度
> にできるので、抽出ルールが正規表現1つで書ける場合はやりやすいです。
>
> setsearch "kb\\d\\d\\d", 0x10; //kb123 の正規表現の例
> selectallfound;
このへんが理解できていません。

> copy;
> newfile;
> paste;
> endmacro;
>
> これらを使っていろいろ試してみてほしいです。
いろいろ試してみます。
>
> 正規表現の書き方についてはヘルプを参照してほしいです。
> 検索ダイアログの検索文字列右側の「>」ボタンを押すとわかりやすいです。
>
> あと、ファイルの更新日時を取得する直接的な方法は秀丸マクロにはありません。
> 別途田楽DLLやmacrodllなどを用意して使われることが多いようです。
> または、COMを使って、普通はvbsやjsで書くことを秀丸マクロの文法に合わせて
> 書き直す方法があります。
>
> //COMを使う更新日時取得の例
> $file = "c:\\folder\\test.txt";
> #objFso = createobject("Scripting.FileSystemObject");
> #objFile = member( #objFso,"GetFile",$file );
前に行が分かりません。

> $a=getpropstr(#objFile,"DateLastModified");
> message $a;
> endmacro;
>
> Windows Update関係のテキストファイルというものが、そもそも存在するかどう
> かや、どこにあるかは、すみませんが秀丸エディタとしてはわからないです。
やはりこれは見つかりません。
つぎは余分なコメントアウトを取りました。

// タイトル ウインドーズ更新アップデートの "nnnnnnn" だけを抜き出す
// 特徴は (KBnnnnnnn) と kb/nnnnnnn が有り 次のように成っています。
// Microsoft .NET Framework 3.5.1 のセキュリティ更新プログラム (Windows 7 SP
1 x86 用) (KBnnnnnnn)
// 詳細情報:

// ttp://support.microsoft.com/kb/nnnnnnn
// 応用 次のように使えます

// echo Uninstalling Knnnnnnn (telemetry for Win7/8.1)
// start /w wusa.exe /uninstall /kb:nnnnnnn /quiet /norestart

// コントロール パネル\すべてのコントロール パネル項目\Windows Update\インス
//トールする更新プログラムの選択 newファイルにコピペ し起動します。

 disabledraw;   // 表示停止
 openfile "?";   // 更新お知らせを開き
 ?    // 更新日付 を取得  
 #tmp = hidemaruhandle(0);  // ファイルハンドルを取得
 gofiletop;    // ファイル先頭にカーソルを
 while (code != eof) {  // LOOPはじめ からEOFまで繰り返し
 ?     // カーソルから (KB まで検索
 if( !result ) break;  // 無ければ ブレーク
 1? または   // (KB の手前までを削除
 2?     // kb/までを削除 判定しにくい
 right;    // )の次に進み
 }     // LOOP 終わり
 ?     // 保存フォルダ D:\!Dats\win7update
 $fname = "D:\\!Dats\\win7update\\"+"更新"+year+month+day+".txt";// ファイ
  //ルパス名前日付
 saveas $fname, sjis;  // 更新日付.txt 名でセーブ
 enabledraw;    // 表示再開
 setactivehidemaru #tmp;  // ファイルを表示して
 endmacro;    // マクロ終了

[ ]
RE:08078 アップデートのお知らせを使いやNo.08079
秀丸担当 さん 16/02/19 10:06
 

beginselなどがヘルプで見つからないとしたら、秀丸エディタ本体のヘルプを参
照されているのかもしれないです。
マクロヘルプのほうを見ると、beginselなどがあります。
メニューの[マクロ]→[マクロヘルプ]から開きます。

クリップボードに追加する手法を使う場合は、2つ目の秀丸エディタに貼り足し
ていくということはしないです。
1つの秀丸エディタだけで、メモリ上に存在するクリップボードに足していく感
じです。
以下のようなイメージです。

setclipboard ""; //クリップボードをクリア
while(1){
  :
  searchdown などで何らかの選択操作
  appendcopy; //選択を追加コピー
  :
}

または

setclipboard ""; //クリップボードをクリア
while(1){
  :
  $a = gettext( ... )などで変数に格納
  addclipboard $a;  //変数を追加コピー
  :
}


コントロールパネルのWindows Updateの項目はテキストとしてコピーできるとは
知りませんでした。

もし自分がやるとしたら、最近のバージョンでは複数選択があるので、検索ダイ
アログからの操作で済ませると思います。
新規の秀丸エディタにWindows Updateの情報を貼り付けして、検索ダイアログで
kb/?\d\d\d\d\d\d\d
と入力して、正規表現だけをONにして、「すべて検索」ボタンの「すべて検索 -
複数選択」の操作を行います。(Alt+G)
選択されたら、コピーし、すべて選択、貼り付け、と操作すると抽出ができます。

より正確な正規表現は
(?<=\(KB)(\d\d\d\d\d\d\d)(?=\))|(?<=kb/)\d\d\d\d\d\d\d
としたりするといいかもしれないですが、手作業で調べるときはより簡単な正規
表現を使うことが多いです。

正規表現をマクロで書く場合は、
searchdown "kb/?\\d\\d\\d\\d\\d\\d\\d",regular;
といったように「\」を「\\」と書くので注意が必要です。

[ ]
RE:08079 アップデートのお知らせを使いやNo.08080
ノノムン さん 16/02/19 22:06
 
有り難うございます

// echo Uninstalling KBnnnnnnn (telemetry for Win7/8.1)
// start /w wusa.exe /uninstall /kb:nnnnnnn /quiet /norestart

という具合に使います、KBnnnnnnn は wusa.exe のエコー表示ですから、
実際の動作は /kb:nnnnnnn で行いますので、必要なものは nnnnnnn の番号だけで
2回使っています。

ヘルプファイルはマクロ用を見ていますが、
前は何か違う言葉を入れてしまったようです。
今回は全部出てきました、しかし見てもよく分からない所もあります。
それは 私が 5W2H がよく理解できていないからで 出来れば(例文 答え例)な
どが有ればといつも思っています。
(cmd などでも同じです。 現役時代は 説明書、書きもしていました)
setsearch
selectallfound
copy
newfile
paste
endmacro
createobject
member
getpropstr
message
endmacro
などはありまして内容が分からないのもあります(なにの文字が有効か?)
メタ文字とかは載っていませんでしたのでWebで探しましたが、全部はヒットしにく
いです。

"kb/?\\d\\d\\d\\d\\d\\d\\d" につきまして ふつうは次のようで
「先頭から (KBnnnnnnn)」カッコははっきりしませんが KBの後 番号 番号以外
の文字 で終わりのようで、URLや
内容は決まっていないようです」
searchdown 検索文字列 [,word] [,casesense | nocasesense] [,regular | noregul
ar] [,fuzzy] [,inselect] [,linknext] [, hilight | nohilight]
1回目であると kb/? -> kb/+ でしょうか
\\d\\d\\d\\d\\d\\d\\d 桁数ははっきり決まっていないようで 数字だけの区切り
です。
\d 数字。[0-9]と同じ
\D \d 以外
から
(?<=msgid \").+*(?=\") の例から考えて
(?<=kb/)(\\d)+(?=D\) に成りますでしょうか?

これを検討してからリストにチェックを残してインストールして、

そのぶんは
次のnnの場所に代入して保存して 削除用に備えたいのです。
// echo Uninstalling KBnnnnnnn
// start /w wusa.exe /uninstall /kb:nnnnnnn /quiet /norestart

^  行頭(文字クラスの否定)
$  行末
*  0回以上の繰り返し
+  1回以上の繰り返し
?  0または1回現われる
.  改行を除く任意の1文字
\  エスケープ文字  
\n ニューライン (ASCIIコード10)

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


On 2016/02/19 10:06, 秀丸担当 wrote:
>
> beginselなどがヘルプで見つからないとしたら、秀丸エディタ本体のヘルプを参
> 照されているのかもしれないです。
> マクロヘルプのほうを見ると、beginselなどがあります。
> メニューの[マクロ]→[マクロヘルプ]から開きます。
>
> クリップボードに追加する手法を使う場合は、2つ目の秀丸エディタに貼り足し
> ていくということはしないです。
> 1つの秀丸エディタだけで、メモリ上に存在するクリップボードに足していく感
> じです。
> 以下のようなイメージです。
>
> setclipboard ""; //クリップボードをクリア
> while(1){
>    :
>    searchdown などで何らかの選択操作

>    appendcopy; //選択を追加コピー 
セパレータも追加
ここの内容はクリップボードにですか?あふれが心配
>    :
> }
>
> または
>
> setclipboard ""; //クリップボードをクリア
> while(1){
>    :
>    $a = gettext( ... )などで変数に格納
こちらの方が安心です。
>    addclipboard $a;  //変数を追加コピー
>    :
> }
別ファイルにするか、元ファイルを置き換えればよいですか?

>
> コントロールパネルのWindows Updateの項目はテキストとしてコピーできるとは
> 知りませんでした。
私もやってみるまで知りませんでした。
> もし自分がやるとしたら、最近のバージョンでは複数選択があるので、検索ダイ
> アログからの操作で済ませると思います。
> 新規の秀丸エディタにWindows Updateの情報を貼り付けして、検索ダイアログで
> kb/?\d\d\d\d\d\d\d
> と入力して、正規表現だけをONにして、「すべて検索」ボタンの「すべて検索 -
> 複数選択」の操作を行います。(Alt+G)
> 選択されたら、コピーし、すべて選択、貼り付け、と操作すると抽出ができます。
>
> より正確な正規表現は
> (?<=\(KB)(\d\d\d\d\d\d\d)(?=\))|(?<=kb/)\d\d\d\d\d\d\d
> としたりするといいかもしれないですが、手作業で調べるときはより簡単な正規
> 表現を使うことが多いです。
>
> 正規表現をマクロで書く場合は、
> searchdown "kb/?\\d\\d\\d\\d\\d\\d\\d",regular;
> といったように「\」を「\\」と書くので注意が必要です。
数字だけにセパレータでよいのが分かりました 。

[ ]
RE:08080 アップデートのお知らせを使いやNo.08084
秀丸担当 さん 16/02/22 17:29
 

正規表現の書き方については、いきなりマクロ上で書くよりも、サンプルとなる
テキストを用意して、検索ダイアログで正規表現を書いて、検索できるかどうか
確認されるといいと思います。
このとき、検索ダイアログでは「\」で、マクロでは「\\」となる点に注意が必
要です。

>1回目であると kb/? -> kb/+ でしょうか

「kb/?」の「?」は、「直前のパターンが0回または1回現れる」です。
ヒットするテキストは「kb」または「kb/」になります。

「kb/+」の「+」は、「直前のパターンの1回以上の繰り返し」です。
ヒットするテキストは「kb/」や「kb//」や「kb///」になります。

「kb/」で固定であれあ単に「kb/」そのままでいいと思います。

>(?<=kb/)(\\d)+(?=D\) に成りますでしょうか?

「(?<=kb/)(\d)+(?=D\)」は検索するとエラーになります。
「(?<=kb/)(\d)+(?=\D)」とすると、後方一致で数値以外となります。

[ ]