●見たい記事や項目に素早く移動して快適に表示する
◎今回の記事は行数の多い[メモ資料]や[メール履歴]のテキストファイルを例として、PSHメモ帳を使って簡単で快適に操作する「テキストマネージャ」を紹介します。具体的には、今回約400行の「PSH文法メモ資料」を利用例として次に説明します(開始画面)。なおこのメモ資料はPSHアプリ作成で利用しているファイルです。
- PSHメモ帳に上記メモ資料を表示し、3行目「&&& ssTagListGet ...」をダブルクリック[WC]すると【移動Tag-List】窓が表示されます(画面の右窓)。
- ここで見たい内容が「PSH文法:配列(ソート/逆ソート)」のとき、その行を[WC]するとその箇所に移動表示します。
- なお メニュ[編集]->TList[##★]取得 でもこのList窓(画面の右窓)を表示します。
◎一方「その3応用編」のまとめとして機能追加ファイル[wndPshPrg201_add.ps1] をバージョンアップします。それにあわせて応用編[3.1]~[3.8]で利用のPSH関数も一式組み込みました。これで、各種マネージャを起動したとき対象行を直接[WC]することができ大変便利になります。「各マネージャファイルの改善点」の項を参照ください。
●開始画面
&FSet& dat\wPshDocRule101.txt ##★[WC][3.8]PSH文法ファイルマネージャ
★注:この記事を最初に閲覧される方は 基本編[2.7][2.8]で「PSHメモ帳」を作成する必要がありますのでご参照ください。
![]() |
テキストマネージャ利用でのPSHメモ帳の画面表示 |
![]() |
PSHメモ帳のタグジャンプ検索機能 |
●TXTファイルの組込み
◎まず、次の2つのファイル名を変更しbackup保存します。
1)wndPshPrg201_add.ps1 --> wndPshPrg221_add.ps1(保存版)
2)wndPshPrg201_usr.ps1 --> wndPshPrg221_usr.ps1(保存版)
<補足>2番目の数字(0->2)はbackup保存用に利用しています。
◎次のコピペListからファイルを作成しtxtファイルは[dat]フォルダに保存ください。
[List3.8.1]-> [wndPshPrg201_add.ps1] 機能追加ファイル更新
[List3.8.2]-> [wPshDocRule101.txt] 上記画面txtファイル[PSH文法メモ]
[List3.8.3]-> [wPshMailLog101.txt] 下記画面txtファイル[メール履歴]
◎今回のフォルダとファイルの構成を次に示します。
[wGuiPsh2]
+[dat] wPshDocRule101.txt wPshMailLog101.txt 今回追加
+wndPshPrg201_add.ps1 今回更新
+wndPshPrg201.ps1
+wPshMemo201.bat
●操作方法/登録方法
(1)操作方法は上記で作成の[wPshMailLog101.txt](メール履歴)を使って説明します。
- [S1]下記にてメール履歴ファイルを表示ください。
&FSet& dat\wPshMailLog101.txt ##★[WC][3.8]Mail履歴ファイルマネージャ
- [S2]メニュ[編集]->TList[##★]取得を押下すると、右図[移動Tag-List]窓が表示されます。そして表示したい行を[WC]するとその行へ移動します。
- [S3][移動Tag-List]窓は常時前面表示モードですが、邪魔のときは[編集]->TList[]前後表示を押下します。
- [S4]メール履歴表示画面の[Top移動][Bottom移動][右端折返し表示]はメニュ[編集]から行います。
- [S5]応用編[3.9]で、PSHメモ帳[wPshPrg201.ps1]をバージョンアップ後、[移動Tag-List]窓内でマウス右釦から[検索窓]機能を利用可能になります。
(2)登録方法は、見出し文の前に[##★]を付けて登録します。なお[##★]を変更する場合は、以下を記述して[WC]すると変更できます([##●]の例)。
&&& $global:szTagListCha="#"+"#●"; dbg $szTagListCha; ##★TagList作成文字
![]() |
PSHメモ帳のタグジャンプ検索機能その2 |
●各マネージャファイルの改善点
##●●Webサイト表示マネージャ(簡易版)
##---------------------------------------------------------------------
##★①[Web表示]のとき次の★行ダブルクリック[WC](各行1行表示+sTag登録+[TagRet]設置)
##
&&& $tBox.WordWrap=$false; ##★[WC]表示モード
; function global:sTag($zcc){ $szSchBox1.Text=($zcc.split(" "))[0];
; $global:szfindPos=($tBox.Text).indexof("[WebTabl"+"e]");
; $tBox.SelectionStart=$tBox.Text.Length; $tBox.ScrollToCaret(); ssSchFind(1); };
; if( $szMenu13 -eq $null ){ ($global:szMenu13=ssDMnMenu "[TagRet]").add_Click({
; $tBox.SelectionStart=0; $tBox.ScrollToCaret(); }); ;}; ##dbg "sTag登録"; };
##★②[Web登録]のとき次の★行[WC](右端折り返し)
## 登録は [!名称XXX; https://xxxxxx ] 注.漢字や特殊文字を含む場合[']でくくる。
##
&&& $tBox.WordWrap=$true; ##★[WC]登録モード
##●●Webサイト表示マネージャ(V2.05対応)
##---------------------------------------------------------------------
&&& $tBox.WordWrap=$false; ##★[WC]表示モード
&&& $tBox.WordWrap=$true; ##★[WC]登録モード(右端折り返し)
##★[Step1] [右釦]へQR処理組込み(szQRSaveMode=1で[QRcd]へQRcode保存)
&&& $tBox.WordWrap=$false; if( $szCMn10 -ne $null ){return;}; ##★[WC]
; $global:szCMn10=ssRbtMenu "[!name;QRcode]生成"; $global:szQrDir="QRcd";##開始時QRDir
; $szCMn10.add_Click({ $ln=((($tBox.Text).substring(0,$tBox.SelectionStart)).split("`n")).count-1;
; $zcm=($tBox.Lines[$ln].replace("`'","")).split(";"); $zFl=$zcm[0].trim(); $zQR=$zcm[1].trim();
; if( $zFl.startsWith("!") -and ($zQR.length -ge 5) ){;}else{return;};
; if( $szQRSaveMode -eq 1 ){ $zFl="$szQrDir\$zFl.png";}else{ $zFl="$home\Desktop\QRcode.png";};
; MsgBox "$zFl`n$zQR";New-QRCodeText -Text $zQR -Width 10 -Show -Out $zFl;
; }); dbg "[右釦]QR登録"
##★[Step2] QR保存先指定
&&& $global:szQRSaveMode=0; ##★DiskTopに保存(最初はこちらで確認)
&&& $global:szQRSaveMode=1; explorer $szQrDir; ##★[固有名.png]で保存->QRDir開く
##★[Step1] [右釦]へQR処理組込み(szQRSaveMode=1で[QRcd]へQRcode保存)
&&& $tBox.WordWrap=$false; ##★[WC]
##★[Step2] QR保存先指定
&&& $global:szQRSaveMode=0; ##★DiskTopに保存(最初はこちらで確認)
&&& $global:szQRSaveMode=1; explorer $szQrDir; ##★[固有名.png]で保存->QRDir開く
●今回の対応概要
(1)応用編[3.1]~[3.7]までで組込んだPSH短文関数を全て追加ファイルへ移動し「ユーザ機能追加ファイル(_usr.ps1)」を何も機能追加無いファイルにしました(実践編での利用想定)。
##★[38]TagListBoxから[WC]で移動 [##★[XXX]]の行へ移動
global:szTagListCha="##★"; ##★TagList作成文字
function global:ssTagListGet($zpam1){.....};
##★[38]Help処理
$global:szHelpDoc="$szToolDir\wPshHelpDoc101.txt";
function global:ssHelpView($zcmd,$zpam){.....};
●コピペ[List3.8.1] -> [wndPshPrg201_add.ps1] ... 機能追加ファイル更新
##V1.20 2024/1001 by ryu
##●●[PSHメモ帳]拡張機能ファイル(その38)
##
##★[ファイル]釦メニューに追加
$global:szMnBas=$szMenu1;
(ssDMnMSet "[<Add編集>]" ).add_Click({ & $szEditor $fladd });
(ssDMnMSet "----").add_Click({;});
(ssDMnMSet "再起動" ).Add_Click({ Restart-Computer -Force });
(ssDMnMSet "電源OFF" ).Add_Click({ Stop-Computer -Force });
(ssDMnMSet "スリープ" ).Add_Click({ [Application]::SetSuspendState(0, $false, $false) });
##★[編集]釦メニューに追加
$global:szMnBas=$szMenu4;
(ssDMnMSet "Top移動[TagRet]").add_Click({ $tBox.SelectionStart=0; $tBox.ScrollToCaret() });
(ssDMnMSet "Bottom移動").add_Click({ $tBox.SelectionStart=$tBox.Text.Length; $tBox.ScrollToCaret() });
(ssDMnMSet "右端折返し切替").add_Click({ if( $tBox.WordWrap ){$tBox.WordWrap=$false;}else{$tBox.WordWrap=$true;}; });
(ssDMnMSet "----").add_Click({;});
(ssDMnMSet "TList[##★]取得").add_Click({ ssTagListGet "720,600" });
(ssDMnMSet "TList[]前後表示").add_Click({ $fmTgBox.TopMost=$false });
##if($fmTgBox.TopMost -eq $True){ $fmTgBox.TopMost -eq $false }else{ $fmTgBox.TopMost -eq $True };});
##★新規登録[Menu9]
$szMenu9=(ssDMnMenu "ツール1" );
(ssDMnMSet "Dir容量表示" ).add_Click({ $zcc0=ssDirVol(1); (ssPshAct 0 $zcc0); });## [0][&]行処理
(ssDMnMSet "DirのTree表示").add_Click({ $zcc0=ssDirVol(0); (ssPshAct 0 $zcc0); });## [0][&]行処理
(ssDMnMSet "----").add_Click({;});
##★新規登録[Menu10]
$szMenu10=(ssDMnMenu "ツール2" );
(ssDMnMSet "[電卓]").add_Click({ calc.exe });
(ssDMnMSet "[画面コピー]").add_Click({ SnippingTool.exe });
(ssDMnMSet "[----]").add_Click({;});
(ssDMnMSet "[Win設定]" ).add_Click({ start ms-settings: });
(ssDMnMSet "[コントロールパネル]").add_Click({ control.exe });
(ssDMnMSet "[----]").add_Click({;});
##★新規登録[Menu11]
$szMenu11=(ssDMnMenu "ツール3" );
(ssDMnMSet "[----]").add_Click({;});
##★新規登録[Menu12]
$szMenu12=(ssDMnMenu "Help" );
(ssDMnMSet "[背景色サイト]" ).add_Click({ start "https://ryupapa008.blogspot.com/p/blog-page_6.html" });
(ssDMnMSet "[HELP操作説明]" ).add_Click({ ssHelpView 0 0 });
(ssDMnMSet "[----]").add_Click({;});
(ssDMnMSet "[Web:Psh入門]").add_Click({ start "https://step-learn.com/article/powershell/index.html" });
(ssDMnMSet "[Web:PSHサイト]").add_Click({ start "https://forsenergy.com/ja-jp/windowspowershellhelp/html/7908faf0-0e08-443d-8060-aac911e5a7e0.htm" });
(ssDMnMSet "[Psh短縮Cmd]").add_Click({ start "https://mseeeen.msen.jp/research-powershell-command-alias" });
(ssDMnMSet "[----]").add_Click({;});
(ssDMnMSet "[<Help編集>]" ).add_Click({ if( Test-Path $szHelpDoc ){ $zcc=$szHelpDoc }else{ $zcc=$fladd }; & $szEditor $zcc });
##★機能追加2(ユーザ予備)
$fladd2=$szTool.replace(".ps1","_usr.ps1"); if( Test-Path $fladd2 ){ . $fladd2; };
##★Dir容量表示【ssDir zcmd】[0]Tree表示//[1]Dir容量表示)
function global:ssDirVol($zcmd){ $zcc0= '$zDir=Read-Host "[DIR名]= "; if($zDir -eq "" ){ $zDir=(pwd); }; echo "[Dir] $zDir" ;'
if($zcmd -eq 0){ $zcc0+='tree $zDir /f ;'; return $zcc0; }; ##★Tree
$zcc0+='$zlist =dir $zDir -Directory |%{ [PsCustomObject]@{ "Name"=$_.Name; "Size"=(dir $_.FullName -File -Recurse |measure -Sum -Property Length).Sum }; };
$zmes =$zlist |measure -Max -Min -Property Size; $zlist |%{ [PSCustomObject]@{ "Name"=$_.Name; "Size"=( ([int]$_.Size).ToString("#,#") ).PadLeft(16);
"Graph"=("*" * [int]($_.Size/($zmes.Maximum)*10)); }; };';
return $zcc0;
};
##★[31]式表計算の処理【 ssKeisan zpam 】
##
function global:ssKeisan($zcmd ){ $zcmd=$zcmd; $dd0=$zcmd; $zcc0="`r`n"; $ss=0;
foreach($cc in ($dd0-replace("[=]","")).split(";`n") ){ ##★式分割
if($cc.startsWith("_") ){ $zcc0+="$cc`r`n"; continue;}; ##★!コメント行
$zcc0+=" "; if($cc.Contains("_") ){ $cc2=$cc.split("_"); $zcc0+=$cc2[0]+"_"; $cc=$cc2[1]; }; ##★
if($cc.length -ge 3 ){ $dd=Iex($cc); $ss+=$dd; $zcc0+="$cc = $dd`r`n"; }else{ $zcc0+="$cc`r`n";};
}; $zcc0+="合計= $ss"; (MsgBox $zcc0);
};
##★[32]キー操作自動化の処理【ssKeyAuto zpam】
##
function global:ssKeyAuto($zcc0){
if((ssMsgYesNo "注" "[英]入力モードを確認し`nキー入力BOXをクリアし、[Y]釦押下し`n素早く入力BOXをクリック")-ne "Yes" ){ return;};
Start-Sleep -m 2500; $zcc0=$zcc0.replace("{T}","{TAB}").replace("{D}","{DELETE}").replace("{E}","{ENTER}");
foreach( $cc in $zcc0.split(";`n") ){ if($cc.length -lt 3){ continue; }; $zcc=$cc.trim();
if( $zcc.startsWith("@Wait") ){ $zdd=[int]($zcc.substring(6)); dbc("[Wait(s)] $zdd"); Start-Sleep -m ($zdd*1000); continue; };
if( $zcc.startsWith("@Stop") ){ $zcc1="送信継続は[Y]押下し素早く入力BOXをクリック`n停止は[N]をクリック";
if( (ssMsgYesNo "停止中" $zcc1)-ne "Yes" ){ return;}; Start-Sleep -m (2*1000); continue; };
[SendKeys]::SendWait("$zcc");
};
};
##★[33][34][35]googleグラフの処理 【ssGraf zType zOption zData zColum zPrg zBody】
##
function global:ssGraf($zType,$zOption,$zData,$zColum,$zAddProg,$zAddBody){ $szfile="$home\Desktop\gChart01.html";
$zcc0='<html><head><script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript"> google.charts.load("current", {packages:["@@Package"]});
google.charts.setOnLoadCallback(drawChart); var chart; var options; var data;
function drawChart(){ chart = new google.visualization.'+$zType+'(document.getElementById("chart_values"));
options='+$zOption+'; ';
if( $zData.startsWith("[") ){ $zcc0+='data =new google.visualization.DataView(
google.visualization.arrayToDataTable( '+$zData+' ) );' }
else{ $zcc0+='data =new google.visualization.DataTable(); '+$zData+'; ' };
$zcc0+=$zColum+';chart.draw(data, options); };'
$zcc0+=$zAddProg+';</script></head><body><div id="chart_values" ></div>'+$zAddBody+'</body></html>' ; $zcc1='corechart';
foreach($cc in 'AnnotationChart','TreeMap','Timeline','Table','VegaChart','GeoChart','Gauge','Sankey','Calendar','WordTree','TreeMap'){
if($cc -eq $zType){ $zcc1=$cc; break; }; }; $zcc0=$zcc0.replace('@@Package',$zcc1);
SC $szfile $zcc0; & $szfile; ##★Web.html起動
};
##★[36]株表示の処理 【 ssKaView zKind zKabNo zUrl】
##
function global:ssKabView($zzcmd,$zzcc,$zzurl){
if($zzurl.length -gt 10){ $zUrl =$zzurl; if( $zzcmd -eq "!KabMany"){ Start ($zzurl.replace("@@@@",$zzcc )); return;}; }
else{
switch($zzcmd){
!KdoraCha{ Start ("https://www.kabudragon.com/s?t="+$zzcc ); return; }
!YahooNow{ Start ("https://finance.yahoo.co.jp/search/?query=$zzcc" ); return; }
!YahooCha{ $zUrl="https://finance.yahoo.co.jp/quote/@@@@.T/chart?";
$zUrl+="styl=lne&frm=mntly&scl=stndrd&trm=1w&evnts=&ovrIndctr=sma%2Cmma%2Clma&addIndctr=slwStchstc"; break; }
!KtanCha { $zUrl="https://s.kabutan.jp/stocks/@@@@/"; break; }
};
};
foreach( $cc in $zzcc.split("+") ){ if( $cc.length -ge 4 ){ Start ($zUrl.replace("@@@@",$cc)); Sleep -m 1000; }; };
};
##★[36]【STag [文字] pm】移動 ## [WebTable] 移行で検索、、、
$global:szsTagIndx="[WebTable]"; ##★sTagの検索開始文字[WebTable]
function global:sTag($zcc,$zpm){ $szSchBox1.Text=($zcc.split(" "))[0]; $global:szfindPos=($tBox.Text).indexof($szsTagIndx);
if( $zpm -eq 0){ $tBox.WordWrap=$false }; $tBox.SelectionStart=$tBox.Text.Length; $tBox.ScrollToCaret(); ssSchFind(1); };
##if( $szMenu13 -eq $null ){ ($global:szMenu13=ssDMnMenu "[TagRet]").add_Click({ $tBox.SelectionStart=0; $tBox.ScrollToCaret(); });
##★[37][右釦]へQR処理組込み(szQRSaveMode=1で[QRcd]へQRcode保存)
$global:szCMn10=ssRbtMenu "[!name;QRcode]生成"; $global:szQrDir="QRcd";##開始時QRDir
$szCMn10.add_Click({ $ln=((($tBox.Text).substring(0,$tBox.SelectionStart)).split("`n")).count-1;
$zcm=($tBox.Lines[$ln].replace("`'","")).split(";"); $zFl=$zcm[0].trim(); $zQR=$zcm[1].trim();
if( $zFl.startsWith("!") -and ($zQR.length -ge 5) ){;}else{return;};
if( $szQRSaveMode -eq 1 ){ $zFl="$szQrDir\$zFl.png";}else{ $zFl="$home\Desktop\QRcode.png";};
MsgBox "$zFl`n$zQR"; New-QRCodeText -Text $zQR -Width 10 -Show -Out $zFl;
});
##★[38]TagListBoxから[WC]で移動 [##★[XXX]]の行へ移動
$global:szTagListCha="##★"; ##★TagList作成文字
function global:ssTagListGet($zpam1){ $zDat=($tBox.Text).replace("`r",""); $zcc0="";
foreach($cc in $zDat.split("`n") ){ if( $cc.startsWith($szTagListCha) ){;}else{ continue;}; $zcc0+=$cc+"`n"; };
$ww=$zpam1; $global:fmTgBox=New-Object Form -Pro @{ Size=$ww; Text="【移動Tag-List】" ; TopMost=$True; };
$global:tgBox=New-Object TextBox -Pro @{ Font="$szFont,14"; Dock="Fill"; Multiline=$True; AcceptsReturn=$True; ScrollBars=[ScrollBars]::Vertical;};
$fmTgBox.Controls.Add($tgBox); $tgBox.Text=($zcc0.replace("`n","`r`n")); $tgBox.SelectionStart=0; $fmTgBox.Show(); $tgBox.WordWrap=$false;
##★[WC]処理
$tgBox.Add_DoubleClick({ $ln=((($tgBox.Text).substring(0,$tgBox.SelectionStart)).split("`n")).count-1;
$zcc=($tgBox.Lines[$ln]).trim(); if( $zcc.length -le 4){ return; };
##$zcc=($zcc.split("[]"))[1]; $szSchBox.Text="##★[$zcc]"; ##dbg $zcc
$szSchBox1.Text=$zcc;
$tBox.SelectionStart=$tBox.Text.Length; $tBox.ScrollToCaret(); ssSchFind(0);##★PSH窓TXT
});
$tgBox.ContextMenuStrip =$global:conMenu =New-object ContextMenuStrip -Pro @{ Font="BIZ UDゴシック,12"; };
(ssRbtMenu "[検索窓]" ).add_Click({ ssSchBoxSet $tgBox }); (ssRbtMenu "[コピー]").add_Click({ $tgBox.Copy() });
(ssRbtMenu "[Top移動]").add_Click({ $tBox.SelectionStart=0; $tBox.ScrollToCaret() });
};
##★[38]Help処理
$global:szHelpDoc="$szToolDir\wPshHelpDoc101.txt";
function global:ssHelpView($zcmd,$zpam){
if( Test-Path $szHelpDoc ){ $zcc=(Cat $szHelpDoc -Raw); }else{ $zcc=(Cat $fladd -Raw); $zcc=$zcc.substring($zcc.indexof("<##★"+"[HELP]")+1); };
$zcc=$zcc.replace("`r",""); MsgBox $zcc "1140,780"; if($mBox -eq $null){ return; };
$mBox.Add_DoubleClick({ $ln=((($mBox.Text).substring(0,$mBox.SelectionStart)).split("`n")).count-1; $zcc=($mBox.Lines[$ln]).trim(); ##dbc $zcc;
if( $zcc.startsWith("!") -and $zcc.contains("http") ){ Iex("Start `'"+(($zcc.split(";"))[1]).trim()+"`'"); return; };
});
};
<##★[HELP]画面 ####################################################
!【サイトマップ】; https://ryupapa008.blogspot.com/p/blog-page_14.html
!【操作説明】; https://ryupapa008.blogspot.com/2024/09/psh.html
----
(1.1) TXTファイル1行目: [#! @BakColor:#F0E0C0 @FntSize:14 @WndSize:1080,740]で指定する。
1)背景色は[@BakColor:#F0E0C0]で指定する。背景色の値は関連Webサイトを参照ください。
2)文字寸法は[@FntSize:14]で指定する。画面寸法(幅,高さ)は[@WndSize:1080,740]で指定する。
----
(2.1) 1)[&]行:PSH起動する。 2)[&&]行:窓無しでPSH起動する。
3)[&&&]行:継続PSH起動する。PSHメモ帳アプリの内部関数(dbg/MsgBox)等を利用可能です。
4)[;]行:&行の行連結。5)[&]行の次の[;]行を連結し、[&]行に対応する各種処理を実行する。
(2.2) 1)[>]行:DOS-CMD起動する。 2)[>>]行:窓無しでDOS-CMD起動する。
3)[> cd Dir名]行で指定フォルダへ移動する。 4)[TopPage]表示で元のフォルダへ戻る。
(2.3) [&FSet& File名]行:TXTファイルのFile名を設定し、表示/編集/[File保存]する。
注.[TopPage]の編集は、[ファイル]->[TopPage]編集でする。
(2.4) [&FSet& Dir名]行: フォルダ管理処理として次の処理をする。
1)フォルダ内に[!readMe.txt]を仮作成し、そのフォルダへ移動する([File保存]押下で保存)。
2)マウス[右釦]>[ツール]>[Dir/File取得]でフォルダ/ファイル名を取得し、[##]コメント記載で管理する。
3)[フォルダ/ファイル名]行をダブルクリックでそのファイルを起動する。
(2.5) [!コメント; Http:xxxxxxxxxxxx]行で、指定Webサイト表示する。
(2.6) 1)explorerからTXTファイル(.txt)をGui窓に[D&Drop]で、表示/編集/[FILE保存]する。
2)PSHファイルをGui窓に[D&Drop]で、PSHファイル(.ps1)を起動する。
3)フォルダ(Dir)をGui窓に[D&Drop]で、(2.4)項のフォルダ管理処理をする。
(2.7) [File]のサブメニュで次の編集をする。
1)[TopPage編集]:起動/TopPageの編集、2)[Psh編集]:PSHメモ帳の編集、3)[Add編集]:追加機能の編集
##★次のPSH処理は_add.ps1(V1.20)に組込まれます。
!3.1_計算表示マネージャ_____その31参照;https://ryupapa008.blogspot.com/2024/09/psh_8.html
&&& ssKeisan '文字列' ##★[WC]
!3.2_自動キー入力マネージャ_その32参照;https://ryupapa008.blogspot.com/2024/09/pshpsw.html
&&& ssKeyAuto '文字列' ##★[WC]
!3.3_PSW管理マネージャ___その32参照;https://ryupapa008.blogspot.com/2024/09/pshpsw.html
&&& ssKeyAuto '文字列' ##★[WC]
!3.4_googleグラフマネージャ_その33参照;https://ryupapa008.blogspot.com/2024/09/google.html
&&& ssGraf $zType $zOption $zData ##★[WC]
!3.5_WEB表示マネージャ___その36参照;https://ryupapa008.blogspot.com/2024/09/pshwebpsh.html
&&& sTag [文字] (pam) ##★[WC]pam=0:表示モード指定後、sTag 移動
&&& $tBox.WordWrap=$true; ##★[WC]登録モード
&&& $tBox.WordWrap=$false; ##★[WC]表示モード
!3.6_QR生成マネージャ_____その37参照;https://ryupapa008.blogspot.com/2024/09/qrpshweb.html
[対象行クリック]->[編集]->[!name;QRcode]生成 ##★QR生成方法
&&& $global:szQRSaveMode=0; ##★[WC]DiskTopに保存
&&& $global:szQRSaveMode=1; explorer $szQrDir; ##★[WC] QRDirに保存->開く
!3.7_テキストマネージャ______その38参照;https://ryupapa008.blogspot.com/2024/09/qrpshweb.html
&&& ssTagListGet "720,600"; ##★[WC]タグリスト取得
&&& $fmTgBox.TopMost=$false; ##★[WC]List[]前後表示
!3.8_その他
1)編集メニュに、Top/Botton/右端折返し/List前後表示を追加する。
##★下記は、PSHメモ帳V2.05で組込み
!3.9_
1)Help画面の[!名称;Url]ダブルクリックでWeb表示する
2)ファイル->[BakUp]切替:File保存時、bakフォルダにバックアップ保存ON/OFFの切替をする
3)窓表示File有効時、[File保存][Fileメモ帳]を青色に設定する
4)[rdMeRet]釦・・・直近の前回フォルダ[!readMe.txt]に戻る
5)フォルダTree、rtfメモ帳の起動対応をする(関連PSHアプリ組込みより)
##>
[ wndPshPrg201_add.ps1 ]
●コピペ[List3.8.2] -> [wPshDocRule101.txt] 上記画面ファイル[PSH文法]
#![管理] @BakColor:#e0ffc1 @FntSize:13 @WndSize:1080,720
&&& ssTagListGet "720,600"; ##★[WC]タグリスト取得
&&& $fmTgBox.TopMost=$false; ##★[WC]List[]前後表示
##★【PSH文法のメモ書き】
#
##★PSH文法: 変換(16進<>10進)
& $nn=0x0A; $nn; ##16進数[0x0A]->10進表示[10]
& "0x{0:X2}" -f 11; ##10進数[11]->16進表示[0x0B]
& "0x" +(12).ToString("X2"); ##10進数[12]->16進表示[0x0C]
##★PSH文法: for文の例
& for( $ii=0; $ii -lt 10; $ii++ ){ echo $ii; };
##★PSH文法: foreach文の例
& foreach( $cc in "!c11","!c22","!c33","!c44" ){ echo $cc; }; ##項目文字の直接指定
& foreach( $cc in @("!c11","!c22","!c33","!c44") ){ echo $cc; }; ##配列項目の指定
& foreach( $cc in "!c11,!c22,!c33,!c44".split(",") ){ echo $cc; }; ##連続文字列の分離指定
# foreach( $cc in (Get-Content FILE.txt) ){ $cc; }; ##FILE.txt を 1行ずつ読込み{}処理する
##★PSH文法: while文/do while文の例
& $ii=0; while( $ii -lt 10){ echo $ii; $ii++; };
& $ii=0; do{ echo $ii; $ii++; }while( $ii -lt 10);
##★PSH文法: if/else文の例
& for( $ii=0; $ii -lt 10; $ii++ ){ ##★DWクリック
; if( $ii -eq 3 ){ echo "Three"; }else{ echo $ii; };
; };
##★PSH文法: switch文の例1(//基本)
& for( $ii=0; $ii -lt 10; $ii++ ){ ##★DWクリック
; switch( $ii ){
; 3 { echo "$ii`:Three"; continue; }
; 4 { echo "$ii`:Four"; continue; }
; 6 { echo "$ii`:Six"; continue; }
; default{ echo $ii; }
; };
; };
##★PSH文法: switch文の例2(//数字Loop //複数選択 //$_利用
& switch( 0..19 ){
; {$_ -in 3,7,13 }{ echo "$_`:あたり"; }
; {$_ -in 4,6,16 }{ echo "$_`:はすれ"; }
; default{ echo "$_"; }
; };
##★PSH文法: 変数( global:広域変数と局部変数)
& $global:szAaa="AAAA"; $global:szBbb="BBBB";
; function ssFnc(){ $szAaa="Fnc:aaaa"; $szAaa; $global:szBbb="Fnc:bbbb"; $szBbb; };
; ssFnc ; $szAaa; $szBbb;
##★PSH文法: 配列(生成)
& $zcc = "aaa", "bbb", "ccc", "ddd"; $zcc;
& $zdd = 11, 12, 13, 14, 15 ; $zddd;
& $zcc = @("aaa") ; $zccc; ##1項のみ
##★PSH文法: 配列(追加)
& $zcc = "aaa", "bbb", "ccc", "ddd"; $zcc+="eee"; $zcc; ##要素追加
& $zcc = "aaa", "bbb", "ccc", "ddd"; $zcc= @("eee") + $zcc ; $zcc; ##先頭に追加
##★PSH文法: 配列(削除)
& $zcc = "aaa", "bbb", "ccc", "ddd"; $zcc =$zcc[0..($zcc.Length-3)]; $zcc; ##2個削除
& $zcc = "aaa", "bbb", "ccc", "ddd"; $zcc =$zcc[2..($zcc.Length-1)]; $zcc; ##2個削除
##★PSH文法: 配列(重複削除)
& $zcc = "ccc", "bbb", "ccc", "abc", "aaa", "bbb"; $zcc=$zcc|select -Unique; $zcc;
##★PSH文法: 配列(ソート/逆ソート)
& $zcc =@("cc:1", "bb:3", "cc:2", "ab:5", "aa:8"); $zcc=$zcc|Sort; $zcc; ##[WC]順列ソート
& $zcc =@("cc:1", "bb:3", "cc:2", "ab:4", "aa:8"); $zcc=$zcc|Sort -D; $zcc; ##[WC]逆列ソート
##★PSH文法: 配列(ソート:2項目で、[:]区切り )
& $zcc =@("cc:1", "bb:3", "cc:2", "ab:5", "aa:8"); ##★[WC]
; $zcc=$zcc|Sort -Pro{ $_.split(":")[1] }; $zcc;
##★PSH文法: 配列(ソート:2項目/少数点値で、[:]区切り )
& $zcc =@("cc:0.1:xx", "bb:-0.3:yy", "cc:2.1:zz", "ab:0.5:ww", "aa:3.1:yy", "dd:0.0:zz"); ##★[WC]
; $zcc=$zcc|Sort -Pro{ [double]($_.split(":")[1]) }; $zcc;
##★PSH文法: ファイル(ソート:3項目/少数点値で、[:]区切り )
& $zfile="zTest.txt"; ##★[WC]
; $zcc =@("cc:1:0.1:xx", "bb:2:-0.3:yy", "cc:3:2.1:zz", "ab:4:0.5:ww", "aa:5:3.1:yy", "dd:6:0.0:zz"); $zcc > $zfile;
;
; cat $zfile |Sort -Pro{ [double]($_.split(":")[2]) };
##★PSH文法: ソート(ラベル有りソート 例: dir,csv-File )
& dir |Sort -Pro LastWriteTime
& dir |Sort -Pro Name
##★PSH文法: ps1アプリのフォルダ名/ファイル名の取得
&&& $zcc=(Convert-Path .) ; dbg $zcc; ##フォルダ名
& $zcc=(Convert-Path .); $zcc; ##フォルダ名
## $zcc=$MyInvocation.MyCommand; ##利用はPSHソースの中で利用
## $zcc=(Split-Path $MyInvocation.MyCommand.Path -Parent); ##利用はPSHソースの中で利用
##★PSH文法: 特殊フォルダの一覧
& [Environment+SpecialFolder]::GetNames([Environment+SpecialFolder]) | Sort-Object
##★PSH文法: 特殊フォルダの取得
& [Environment]::GetFolderPath("Desktop")
##★PSH文法: ファイル関連(読取/保存/配列型or文字列型(-Raw))
## $zAry = Get-Content $szFile ##配列型 ( $zAry=Cat $szFile )
##
## $zCha = Get-Content $szFile -Raw ##文字列型 ( $zAry=Cat $szFile -Raw )
##
## Set-Content $szFile $ccc ##Shift-JIS(ANSI) ( SC $szFile $ccc )
##
## Set-Content $szFile $ccc -Encoding UTF8 ##UTF8 BOM ( SC $szFile $ccc -Encoding UTF8)
##
## $ccc > $szFile ##UTF-16LE
##
## Add-Content $szFile $ccc
##
##★pSH文法: ファイル/フォルダの作成、移動
New-Item ファイルパス -ItemType File [-Force] [-Value コンテンツ]
New-Item フォルダパス -ItemType Directory [-Force]
Move-Item 移動元のパス 移動先のパス [-Force]
##★PSH文法: 関連Webサイト
!サイト表示; https://yanor.net/wiki/?PowerShell/文法
##★PSH文法: 日付/時間の取得(Get-Date)
& Get-Date ## 2023年8月17日 15:33:21
& Get-Date -Format d ## 2023/08/17
& Get-Date -Format D ## 2023年8月17日
& Get-Date -Format f ## 2023年8月17日 15:35
& Get-Date -Format F
& Get-Date -Format g
& Get-Date -Format G
& Get-Date -Format Y ## 2023年8月
& Get-Date -Format M ## 8月17日
& Get-Date -Format T ## 15:36:48
& Get-Date -Format t
##★PSH文法: 日付/時間のFormat指定取得
& Get-Date -Format "yyyy/MM/dd hh:mm:ss"
& Get-Date -Format "yyyy/MM/dd(ddd)" ##曜日の表示(ddd) (dddd)
& Get-Date -Format "yyyyMMdd"
& Get-Date -Format yyyyMM
& Get-Date -Format MMdd
& Get-Date -Format "HHmm"
& (Get-Date "2023/12/13").DayOfWeek
; (Get-Date "2023/12/13").DayOfWeek -as [int] ##曜日の数値0...6
##★PSH文法: 日付/時間のUFormat表示
& Get-Date -UFormat "%Y/%d/%m %B %A %T "
; Get-Date -UFormat "%y/%d/%m %b %a %R "
##★PSH文法: 日付の加算・減算
& $date=get-Date
; $date.AddYears(2)
; $date.AddYears(-5)
; $date.AddMonths(3)
; $date.AddMonths(-1)
; $date.AddDays(15)
; $date.AddDays(-20)
; $date.AddHours(5)
; $date.AddMinutes(5)
; $date.Addseconds(5)
##★PSH文法: 等号 = > < ≧ ≦
& "123" -eq "123" ## =
& "123" -ne "123" ## ne
& 22 -ge 11 ## ≧
& 22 -gt 11 ## >
& 22 -lt 33 ## <
& 22 -le 33 ## ≦
& if( "Hello world" -like "[Hh]ello*world" ){"OK"}else{"NG"}; ##検索
& if( "Hello world" -match "^Hello (.*)" ){"OK"}else{"NG"}; ##検索
& if( @("apple","banana","cherry") -contains "apple" ){"OK"}else{"NG"}; ##検索
& "Apple Banana Cherry " -split "\s+" ##文字列の分割
& '='*30 ##文字数の拡大
& @(1,2,3,4)*3 ##配列数の拡大
##★PSH文法: 文字列フォーマット演算子
& "{0}" -f 5 ## 5 {0}で引数の1番目を参照
& "{0} {1} {2}" -f 5,6,8 ## 5 6 8 {0}{1}{2}で引数の1番目、2番目、3番目を参照
& "{0} {1} {0}" -f 5,6 ## 5 6 5 {0}{1}{0}とすると引数の1番目を2度参照する
##★PSH文法: 文字列の右寄せ/左寄せ
& "COLOR:{0,8}" -f "Red" ## COLOR: Red 8桁で右寄せ
& "COLOR:{0,-8}" -f "Red" ## COLOR:Red 8桁で左寄せ
& "COLOR:{0,8}" -f "Black Black Black" # 桁超えはそのまま
##★PSH文法: 指定桁数で0で埋める(パディング)
& "{0:000000}" -f 1 ## 000001 足りない桁を0パディング
& "{0:000000.0}" -f 1 ## 000001.0 小数点も0パディング
& "{0:00.0}" -f 123.45 ## 123.5 桁超え、整数そのまま、小数点は四捨五入
##★PSH文法: 指定桁でパディング(ツールでは1行目[#]はNG)
& $zcc="" ##★DW
; "{0:##.#}" -f 1.2 ## 1.2 対応桁そのまま
; "{0:##.##}" -f 1.2912 ## 1.29 小数点対応桁を超え四捨五入
; "{0:#}" -f 1234 ## 1234 整数桁を超えそのまま
##★PSH文法: 四捨五入
& "{0:0}" -f 10.9 ## 11
& "{0:0.0}" -f 10.9 ## 10.9
& "{0:0.0}" -f 10.99 ## 11.0
##★PSH文法: "N" 数値 (桁区切り記号)
& "{0:N}" -f 1000 ## 1,000.00 標準
& "{0:N0}" -f 1000 ## 1,000 小数点以下四捨五入
& "{0:N1}" -f 1000 ## 1,000.0 小数点以下1桁で四捨五入
##★PSH文法: 0パディング
& "NUM:{0:000}" -F 2 ## NUM:002 ※3桁0パディング
& "NUM:{0:000}" -F 1.99 ## NUM:002 ※3桁0パディング
& "NUM:{0:0.0}" -F 1.99 ## NUM:2.0 ※小数点1位まで0パディング
& "NUM:{0:0.00}" -F 1.99 ## NUM:1.99 ※小数点2位まで0パディング
& "NUM:{0:#}" -F 1.99 ## NUM:2 ※1桁パディング
& "NUM:{0:#.#}" -F 1.99 ## NUM:2
& "NUM:{0:#.##}" -F 1.99 ## NUM:1.99
##★PSH文法: パーセント表示
& "NUM:{0:0%}" -F 0.33 ## NUM:33%
##★PSH文法: 文字列の変数展開(dir など)
& $zdirs = dir . ;
; $zdirs |%{ "NAME: $($_.FullName)" };
##★PSH文法: 文字列の操作(接続/置換/削除/集結/分割)
& "abc" + "def" ## abcdef ##★接続
& "abcdef" -replace "abc", "ABC" ## ABCdef ##★置換()
& "abcdef".Replace("abc", "ABC") ## ABCdef ##★置換(通常)
& "abc123" -replace "([a-z]+)\d{3}", '000$1' ## 000abc ##★置換(正規表現OK)
& "123123123" -replace "1", "0" ## 023023023
& "123123123" -replace "1", "0$1" ## 023023023
& " abc ".Trim() ## abc ##★前後スペース削除
& $strs = @("abc", "def"); $strs -join "" ## abcdef ##文字列の結合
& $nums = "2016-04-01" -split "-" ; $nums[0], $nums[1], $nums[2] # 2016 04 01 ##文字列の分割
& [convert]::ToString(1234, 16); ## 4d2 ##★10進(1234)⇒16進(4d2)
& [convert]::ToInt32( "FE", 16); ## 254 ##★16進(0xFE)⇒10進(254)
& [convert]::ToInt32( "0xFE", 16); ## 254 ##★16進(0xFE)⇒10進(254)
##★PSH文法: 文字コード: 文字コードから文字の出力
& function ssGetChar( $zcc ){ $wk = [system.Text.Encoding]::GetEncoding("ASCII"); ##[WC]
; foreach($cc in $zcc.split(" ")){ if($cc -eq ""){ continue; }; $wk.getChars( "0x"+$cc ); }; };
;
; $zcc=" 41 42 43 44 45 46 31 32 33 4A"; ssGetChar( $zcc );
;
##★PSH文法: 文字コード: 文字から文字コード出力
& [char]'A'..[char]'Z' |% {[byte]$_} |%{ '0x'+[Convert]::ToString($_,16) };
##★PSH文法: 文字コード: テキスト列を 16 進数にダンプ変換
& $zcc0='ABCDEFG XYZ 12345'; $zcc1=$zcc0.ToCharArray(); ##[WC]
; foreach( $cc in $zcc1 ){ $zcc +=[String]::Format("{0:X2}",[Convert]::ToUInt32($cc))+" "; };
; $zcc0; $zcc;
##★PSH文法: 文字コード: 演算 AND OR XOR NOT (int32での演算)
& $zdd=(0xF0 -bxor 0x33); [Convert]::ToString($zdd,16); ## C3
& $zdd=(0xF0 -bor 0x03); [Convert]::ToString($zdd,16); ## F3
& $zdd=(0xF0 -band 0x23); [Convert]::ToString($zdd,16); ## 20
& $zdd= -bnot 0x23 ; [Convert]::ToString($zdd,16); ## ffffffdc
##★PSH文法: 文字コード: 演算 AND OR XOR NOT (16進文字列での演算)
& $zdd=("0xF0" -bxor "0x33"); [Convert]::ToString($zdd,16); ## C3
& $zdd=("0xF0" -band 0x23 ); [Convert]::ToString($zdd,16); ## 20
##★PSH文法: 文字コード: 文字列 ->1文字配列 ->16進変換 ->文字変換
& $wk = [system.Text.Encoding]::GetEncoding("ASCII"); ##[WC]
;
; $zcc0='ABCDEFGXY Z12345'; $zcc0; ##入力
; foreach($cc in $zcc0.ToCharArray() ){ $dd=[String]::Format("{0:X2}",[Convert]::ToUInt32($cc));
; "$cc = 0x$dd >> "+$wk.getChars( "0x"+$dd );
; };
;
##★PSH文法: フォーム(Form)指定のプロバティ
タイトル Text = "タイトル";
大きさ Size = "200,200";
中心に表示 StartPosition = "CenterScreen";
任意の位置に表示 StartPosition = "Manual"; $form.Location = "100,100";
背景色指定 BackColor = "Black"; or $form.BackColor = "#000000";
文字色指定 ForeColor = "White";
最大化ボタン表示無し MaximizeBox = $False;
最小化ボタン表示無し MinimizeBox = $False;
境界線スタイル FormBorderStyle = "Fixed3D";
None:境界線なし、FixedSingle:一重線の境界線、Fixed3D:3D境界線、FixedDialog:ダイアログ境界線
Sizable:サイズ変更OK境界線、FixedToolWindow:窓境界線、SizableToolWindow:サイズ変更OK窓境界線
透明度指定 Opacity = 1; ##0.0~1.0の間で指定
常に最前面に表示 TopMost = $True
起動時は最前面に表示 TopLevel = $true
タスクバーに表示無し ShowInTaskbar = $False
タイトルバー表示無し FormBoderStyle = "None"
タイトルバー表示無し(境界線) $form.ControlBox = $False
特定色を透明設定 TransparencyKey = "Black"
アイコン指定 Icon = "C:\Pic\fmIcon.ico"
アイコン非表示 ShowIcon = $False
最大化の状態で表示 WindowState = "Maximized"
最小化の状態で表示 WindowState = "Minimized"
最大化のサイズ MaximumSize = "800,800"
背景に画像 BackgroundImage = [system.drawing.image]::FromFile("C:\Pic\fmHaikei.jpg")
背景画像表示方法 BackgroundImageLayout = "zoom"
Center:中央配置、None:左寄せ配置、Stretch:全体に伸縮、Tile:全体に並べ表示、Zoom:拡大表示
##★数学の関数関連
!数学関数; "https://blog.powershell-from.jp/?p=289"
##★数学:三角関数・平方根の計算例(dbg表示の利用)
&&& dbg( [Math]::Sqrt(36) ); ##平方根(ルート)
&&& $drg=[Math]::pi/180; dbg( [Math]::Sin( 90 *$drg) ); ##90度
&&& $drg=[Math]::pi/180; dbg( [Math]::Cos( 60 *$drg) ); ##60度
&&& $drg=[Math]::pi/180; dbg( [Math]::Tan( 45 *$drg) ); ##45度
&&& dbg( [Math]::Sqrt(2) ); ## 1.41421356
&&& dbg( [Math]::Sqrt(3) ); ## 1.7320508
##★数学:データ入力⇒計算(三角関数・平方根)
& $dd=Read-Host "Data="; "Data x 2 ="+([int]$dd)*2; ##データ入力例
& $dd=Read-Host "Sin(角度)="; [Math]::Sin([int]$dd*([Math]::pi/180)); ##Sin(入力角度)
& $dd=Read-Host "Cos(角度)="; [Math]::Cos([int]$dd*([Math]::pi/180)); ##Cos(入力角度)
& $dd=Read-Host "Tan(角度)="; [Math]::Tan([int]$dd*([Math]::pi/180)); ##Tan(入力角度)
& $dd=Read-Host "√(数値)=" ; [Math]::Sqrt([int]$dd); ##平方根(ルート)
[ wPshDocRule101.txt ]
●コピペ[List3.8.3] -> [wPshMailLog101.txt] 下記画面ファイル[メール履歴]
#![管理] @BakColor:#c6ffff @FntSize:13 @WndSize:1080,720
&&& ssTagListGet "720,600"; ##★[WC]タグリスト取得
&&& $fmTgBox.TopMost=$false; ##★[WC]List[]前後表示
##★メールログ履歴(チョット気になるメール保存)
========================================
##★製造業の人手不足を解消、AI技術を用いて業務を高度化
製造業の人手不足が深刻化する中、限られたリソースで業務をこなすためにAI技術
を用いた業務高度化が注目されている。その中の1つとして、高精度なAIによる
画像検査を低コストかつシンプルな操作性で実現できるカメラを紹介したい。
========================================
人手不足が深刻化する昨今、製造業や流通業において労働力の確保が重要課題と
なっている。製造業の現場では、少量多品種から変種変量生産へと生産スタイルが
変化しつつあることから、マンパワーに依存しない検査手法が求められるように
なった。具体的には、従来の画像処理技術だけでは困難だった検査を、AI技術に
よってより容易に行えるソリューションが注目されている。
その1つが、高精度なAI検査を低コストかつシンプルな操作方法で実現できる
検査用カメラだ。従来のAI画像検査では大量のデータによる機械学習が不可欠
となるが、事前学習済みのアルゴリズムを使用することでエッジ上でのAI処理
を実現。導入に当たって必要なのは数枚の画像だけで、専門知識を持たない
作業者でも検査業務を自動化できる。
##★ソフトウェアの劣化を防ぐ、健康的なソースコードを維持
ソフトウェア開発では、新しい機能追加が発生するたびにソースコードが修正
される。アーキテクチャ(要求仕様)を基軸とせず、その製品ライフサイクルの
中で修正や機能追加を重ねたソースコードは、開発者の認識よりも短い期間で
急速に複雑化し、開発者が理解しづらいソースコードになるために開発効率が
悪化しがちだ。さらに追加作業の中で不具合を作り込んでしまいやすい品質に
なってしまう。これが「ソフトウェアの劣化」だ。このソフトウェアの劣化が
進むと、保守/拡張/再利用が時間の経過とともに困難になり、最悪の場合、
不可能になってしまう。
そこで、注目したいのが本資料で紹介する「Axivion Suite」だ。本ツールは、
静的コード解析とアーキテクチャ検証を自動化することで、“健康的”なソース
コードの維持を容易に実現。膨大な数のメトリクスとコーディングガイドライン
をサポートしているので、厳しい安全基準への準拠も担保される他、個別のルール、
コーディングガイドラインの追加も可能だ。
##★インライン検査による品質改善とカメラによる常時監視
不良品のほとんどは、作業のバラツキが原因です。貼り物の位置ずれ、作業順の間違
い、治具の使用方法の間違いなどです。これらの不良品をなくすには、まず、自由度
のない作業方法を定めることですが、特に作業者の入れ替わりの多い中国においては
全作業者が指示とおりに作業できるものではありません。そこで、作業者の動きをカ
メラで完全に把握し、定めた作業から逸脱する作業を認識して、作業者に注意を促す
というやり方が効果を発揮します。カメラによるインライン検査をさらに一歩踏み込
んだカメラの常時監視による品質の現場管理の最前線をお伝えします。
##★手順不遵守が発生する原因と対策
様々な業種・業態の企業において品質不祥事問題が発生しております。これら多くの
品質不祥事問題の大きな共通点の一つは「標準通りに業務を実施していなかった」と
いう点が挙げられます。本セッションでは基本動作の徹底に対する誤った解釈やアプ
ローチ方法、誰もが手順を正しく理解している状態を作り、それを維持するための方
法について解説します。現場でルールが守られない、基本動作の徹底ができていない
などの課題のある方はぜひご参加ください。
##★ 継続的な改善活動でサスティナブルな品質保証業務を
世界的な情勢の変化によって品質管理に求められる要求も年々難しくなってきていま
す。こうした変化に対応するために品質保証に関わる業務をデジタル化し、さらに継
続的に改善を行なうことができる持続可能な品質保証業務を実現するプラットフォー
ムをデモを交えてご紹介します。
[ wPshMailLog101.txt ]