hakeの日記

Windows環境でプログラミングの勉強をしています。

2016-01-01から1年間の記事一覧

PowerShell - 関数(値渡しと参照渡し)

参照渡しの場合、呼び出し側の引数に[ref]をつける、また引数に括弧がないとエラーになった。 関数定義の仮引数の[ref]は無くても良い、関数内では仮引数のValueプロパティにアクセスする。 # 値渡し function byVal($arg){ $arg = "Good Bye" Write-Host "i…

PowerShell - 関数(パイプ)

パイプで渡されるてくるデータの処理用の関数。 開始処理はbeginブロック、終了処理はendブロック、渡されてくるデータの処理はprocessブロックに記述する。渡されてきたデータは変数$_に格納されている。 returnで値を返すと関数の出力になる。 even.ps1 fu…

PowerShell - 関数(可変長引数)

引数は変数$argsという配列にわたされる。 test.ps1 function foo { $args.GetType() foreach( $i in $args ) { Write-Host $i } } 結果 PS C:\> . C:\test.ps1 # 関数読み込み PS C:\> foo 1 2 3 IsPublic IsSerial Name BaseType -------- -------- ---- -…

PowerShell - 再帰関数

function fact($i) { if($i -eq 0) { return 1 } else { return $i * (fact ($i - 1)) } } fact 5 # 120 2017/1/28追記 再帰回数に限界がある模様 Win10 PowerShell 5.1の環境で、以下の関数fooの引数が1000の場合は正常終了しましたが、5000の場合はエラー…

PowerShell - 文字列

変数展開 PS C:\> $a = "Hello " PS C:\> "${a} world" # " "で囲まれた中の変数は展開される Hello world PS C:\> '${a} world' # ' 'で囲まれた中の変数は展開されない ${a} world 部分式 PS C:\> $a = 100 PS C:\> "$($a + 1) is 101" 101 is 101 ヒアド…

PowerShell - 正規表現

match演算子 変数$Matchesでマッチした文字列を取得できる。要素0がマッチした文字列、要素1以降が部分マッチ(キャプチャ)された文字列になる。 ただし最初にマッチしたものしか得られないみたい。 PS C:\> "abcde" -match "(.)(.)" True PS C:\> $Matches…

PowerShell - 制御構造(条件分岐)

if if(条件){ 文 } elseif(条件){ 文 } else { 文 } switch switch($v){ 1 {文; break} 2 {文; break} ($_ -ge 3) {文; break} default {文; break} } # 正規表現 (-matchでないことに注意) $s = "abcd" switch -Regex($s){ "^a" {Write-Host 1;break} # aで…

PowerShell - 制御構造(ループ)

for for($i = 0; $i -lt 5; $i++){ Write-Host $i } 0 1 2 3 4 foreach foreach($i in (0..4)){ Write-Host $i } 0 1 2 3 4 while / do while $i = 0 while($i -lt 5){ Write-Host $i $i++ } 0 1 2 3 4 $i = 0 do { Write-Host $i $i++ }while($i -lt 5) 0 1…

PowerShell - データと変数の型

文字と数値が混ざった式は、左の型に合わせる? でにキャスト?すれば変換できるっぽい PS C:\> 1 + "1" 2 PS C:\> "1" + 1 11 PS C:\> [long]"1" + 1 2 変数の型 最初に使用するときに型の宣言をすれば、その型の変数になる。 使用をやめるときはRemove-Var…

PowerShell - ファイル/フォルダリストの取得

バージョン 5.1 PS C:\> Get-ChildItem -File PS C:\>Get-ChildItem -Directory バージョン 2.0 PSIsContainerプロパティ?がTrueならフォルダ、FalseならファイルなのでWhere-Objectで抽出する。 バージョン5.1でも使用可能。 PS C:\> Get-ChildItem | Wher…

PowerShell - テキストファイルの読み書き

書き込みはOut-Fileを使用する。文字列はパイプで渡すか、-InputObjectでオブジェクトを渡す。-Appendで追加書き込み。 読み込みはGet-Contentを使用する。各行毎の文字列の配列として変数に読み込まれる。ただし1行のみのファイルはStringになるため、GetTy…

PowerShell - 配列

代入 PS C:\> $ary = 1,2,3,4,5 PS C:\> $ary = 1 .. 5 PS C:\> $ary = @() #空配列 PS C:\> $ary = @(1,2,3,4,5) PS C:\> $ary = "abcdefg" -split "" # 1文字ずつに分割(前後に空文字の要素が入る) PS C:\> $ary = "abcdefg" -split "\B" # 1文字ずつに…

PowerShell - 連想配列

代入と参照 PS C:\> $h = @{"a" = 1; "b" = 2} PS C:\> $h["c"] = 3 PS C:\> $h Name Value ---- ----- c 3 a 1 b 2 PS C:\> $h["a"] 1 PS C:\> $h["z"] -eq $null # 存在しないキーでは$nullが返る True キーおよび値の配列取得 PS C:\> $ks = $h.Keys PS C…

PowerShell - 実行環境の設定、その他

次期のWindowsのアップデートでデフォルトがコマンドプロンプトからPowerShellに代わるそうなので学習開始です。 実行ポリシーの変更 デフォルトでは実行できなようになっている為、実行ポリシーを変更する必要がある。 一時的に変更してスクリプトを実行 コ…

EXCEL VBAメモ - UTF-8バイト列を文字に変換する

昨日と逆の変換。 UTF-8バイト列にBOMがなくても変換される模様。 参照:Streamオブジェクト - ADOオブジェクト - MSDN Sub Sample() Dim buf(2) As Byte Dim s As String Dim i As Long buf(0) = &HE3 ' BOMなし buf(1) = &H81 buf(2) = &H82 With CreateOb…

EXCEL VBAメモ - 文字をUTF-8バイト列に変換する

ADODB.Streamオブジェクトにテキストで書き込んで、Typeプロパティをバイナリに変えてByteの配列として読み出す。 なお変換されたUTF-8バイト列にはBOMが付加されている。 参照:Streamオブジェクト - ADOオブジェクト - MSDN Sub Sample() Dim buf() As Byt…

EXCEL VBAメモ - Rangeで指定した範囲のセルの値を配列変数に

範囲が広い場合にはセルを一つずつ操作するよりも、一旦配列にコピーして操作したほうが速い(らしい)。 Sub sample() Dim r As Range, ra As Range Dim a As Variant Dim i As Long, col As Long, row As Long Set ra = Range("A1:D3") ' 初期値書き込み i…

EXCEL VBAメモ - 自作のクラスにイベントを追加する

MyClassオブジェクトのメンバ変数m_dataが5以上になるとOverflowイベントを発生する。 標準モジュールではイベント処理が記述できないので、シートモジュールかユーザーフォームで記述する。 MyClass(クラスモジュール) Private m_data As Long ' Overflow…

EXCEL VBAメモ - 他のブックのオープン・クローズの検出(Applicationイベント)

マクロが書かれているブックではないブック(エクセルファイル)のオープンやクローズをapplicationのイベントとして検出する。クローズはWorkbooks("hoge").Closeだけでなくて、ウィンドウ右上の×クリックによるクローズも検出できる。 VBEのクラスモジュー…

EXCEL VBAメモ - クリップボードのアクセス

クリップボードへのアクセスは、DataObjectを介して行う。 またクリップボードが空か否か、どんなデータが入っているかの確認はApplication.ClipboardFormatsを使用する。 データ種別を示す定数の参照先:XlClipboardFormat 列挙 (Excel) - MSDN ' クリップ…

EXCEL VBAメモ - テキストファイルアクセス

ファイルハンドル?は、#1などと番号を指定しても良いが、FreeFileで空いている番号を取得することもできる。 Sub accessTextFile() Dim fNo As Long Dim fName As String Dim s As String fNo = FreeFile fName = ThisWorkbook.Path & "\sample.txt" ' 1行…

EXCEL VBAメモ - バイナリファイルアクセス

LOFでファイルサイズを取得できる。Get,Put共、第2引数で位置を指定、第3引数のサイズ分だけ読み書きを行う。 読み取り時bufの不足分は0で埋められる。 Sub accessBinFile() Dim fNo As Long Dim fName As String Dim buf(0 To 4) As Byte Dim pos As Long, …

Windows10 Anniversary Update

お盆休みに入ったので、バージョン1607を適用しました。動作は特に問題なし。 8月の月例updateにリストがでなかったので、「更新とセキュリティ」の詳細情報から更新を実施しました。 心持ち、ブラウザの動作が速くなったような……気のせい? メモ 1511のとき…

EXCEL VBAメモ - Windowsライブラリの機能を呼ぶ

こんなこともできるということで、各DLLにどんな機能が入っているか知ってないと使えませんが。。。 64bitと32bit環境で宣言の仕方が微妙に違うので注意。 参考 キー コード定数 (ActiveX コントロール) - MSDN Option Explicit '64bit PC Private Declare P…

PC廃棄の際のHDDデータ消去

古いPC廃棄のためのHDDデータ消去メモ。 Cドライブ以外(起動ドライブ以外や外付けドライブ) cipherコマンドを使用する。 cipher /w:d: Dドライブの場合 起動ドライブを含むHDDのデータ消去 起動USBメモリの作成 Rufus データ消去ツールをUSBメモリから起動…

USBメモリのドライブレターを固定にする。

Windows10 SSDのCドライブの空きを増やす為に補助ストレージとして64GB USBメモリ(USB2.0)を購入。USB3.0の製品もあったけれどもAmazonのレビューをみると書き込み時の温度上昇がヤバそうなのでやめました。SanDisk Cruzer Fit USBフラッシュメモリー 64GB (…

iTunesを新PCへ移動(Windows8.1→Windows10)

移行の基本的手順は前回(Windows Vista→Windows8.1)と同じ。 ただしCドライブに余裕がないので音楽データやバックアップデータは外部ドライブ(Lドライブ、64GB USBメモリ)に退避するようにする。 作業内容 新PCにiTunes(現時点最新Ver12.3.3.17)をダウ…

EXCEL VBAメモ - エラー処理

Option Explicit Sub test() On Error GoTo ErrHandler 'エラー発生時のジャンプ先 Dim a As Long a = 1 / 0 ' エラー発生 MsgBox "エラー発生行の次へジャンプしました。" On Error GoTo 0 ' エラー処理の無効化 Exit Sub Label1: MsgBox "Label1へジャンプ…

EXCEL VBAメモ - クラスの定義と使用

メンバ変数へのアクセスはプロパティで行う。コンストラクタの引数でメンバ変数へ値を設定することはできない。検索すると裏技で対応方法がいろいろ公開されているが、後々意味が分からなくなりそうなので使用せずプロパティで行うこと。 引数の無いプロシー…

EXCEL VBAメモ - タイマー処理

Option Explicit Sub testTimer() Dim sec As Long: sec = 10 ' タイマー時間 Dim targetTime As Date ' 現在時刻 + タイマー時間 targetTime = DateAdd("s", sec, Time) Do ' セルに残り秒数を表示 Range("A1").Value = DateDiff("s", Time, targetTime) Do…