ちんとんがめ♪色々備忘録・・・

なんか、メモ的な感じで使えればいいなみたいな。。。前検索したけど、忘れて同じもの検索するのって面倒だよね?・・・でも、結局検索するみたいな。。。

PowerShellで、テキストファイルの文字コードを判定したい。。。

最初、「New-Object System.IO.StreamReader("c:\test\test.txt"); 」にすぐ後に、
「$sr.CurrentEncoding.BodyName」してたんだけど、全部「UTF-8」になった。。。
MSNの「StreamReader.CurrentEncoding プロパティ」見たら、
「 StreamReader の Read メソッドを最初に呼び出した後、現在の文字エンコーディングを示す値が異なる場合があります。これは、Read メソッドの最初の呼び出しまでエンコードの自動検出が実行されないためです。」
って書いてあった。

だから、しょうがねぇと思って、間にdummyの処理として、$sr.EndOfStreamを入れてみた。
そしたら、「UTF-8」「UTF-16」が出力されたので、おお~っと喜んでたら、
Shift_JIS」も「UTF-8」と判別されていることに気づいた・・・orz

例)
$sr = New-Object System.IO.StreamReader("c:\test\test.txt");
$flg = $sr.EndOfStream # 直後にCurrentEncodingを取得すると、全部UTF-8になるのでdummy処理を入れた。
Write-Host $sr.CurrentEncoding.BodyName
$sr.Close()


色々、探してたんだけど、やろうと思ったら、めっちゃめんどくさいことになりそうだった
(バイトで取得して、その中のコードをチェックするような・・・)
ので、妥協して「nkfツール」を使用して、文字コードを取得することにした。
これだと、ちゃんと判定できた。。。

例)
nkf.exe -g c:\test\test.txt


むぅ・・・消化不良だ・・・


StreamReader.CurrentEncoding プロパティ (System.IO)

文字コード - 本当は怖くないCP932 - Qiita

PowerShellで入力チェックやってみる。

# ユーザ入力
$str = Read-Host -Prompt "値を入力してください。"


■半角数値のチェック

if (-not([int]::TryParse($str,[ref]$null))) {
Write-host "数値[int]以外の値が入っているため、処理を終了します。"
break
}

※[ref]$nullの部分は普通は存在する変数を入れるっぽいけど(結果が入る)、自分は後で使わないから$nullにしてみた。


■日付のチェック
※共通関数とかにして、呼ぶようにしたほうが楽っぽい

function CheckDate($check_date) {

try {
[Datetime]::Parse($check_date)

# 日付変換できる場合はTRUE
return $True

} catch {
# 日付変換できない場合はFALSE
return $False
}

}

# 処理
CheckDate $str




・・・このブログどうやったら、うまく、スペース入るんだ?

SQLServerで別スキーマ同一テーブルの特定のデータをSelectUpdateしてみる。

なんとなくINNER JOINを使わずにやってみる。。。
・・・う~ん。。。
登録先側も別名つけたいよね。。。


■登録先の情報
スキーマ名:スキーマ
DB名:デビ
テーブル名:テーブルA

■検索元の情報
スキーマ名:スキーマ
DB名:デビ
テーブル名:テーブルA

SQL
UPDATE スキーマ1.デビ.テーブルA
SET
カラム3 = OLD.カラム3
,カラム4 = OLD.カラム4
,カラム5 = OLD.カラム5
FROM
スキーマ2.デビ.テーブルA OLD
WHERE
スキーマ1.デビ.テーブルA.カラム1 = OLD.カラム1
AND スキーマ1.デビ.テーブルA.カラム2 = OLD.カラム2
AND OLD.カラム1 = '001'
AND OLD.カラム2 = '1'

PowerShellでパディングしてみる。

#初期化
$a=1

・普通に左に0入れるだけならフォーマットだけでもいい。
 $a.ToString("0000")
 →[実行結果]0001

・右に入れたいときは「PadRight」使うといい
 ([String]$a).PadRight(4,"0")
 →[実行結果]1000
 ※[String]は$aを文字列にしてるだけ
 ※PadRightの引数は、桁数とパディングする文字列
 ※2番目の引数入れない場合は、空白でパディングされる。

・RightがあるならLeftもあるよってことで
  ([String]$a).PadLeft(4,"0")
  →[実行結果]0001

PowerShellでハッシュを使ってみる。

以前投稿した
PowerShellでコレクションを使ってみる。 - ちんとんがめ♪色々備忘録・・・
ってやつより気軽か。。。

#初期化
$hsAry = @{}

#データ追加
$hsAry.Add("test1", 1)
$hsAry.Add("test2", 2)
$hsAry.Add("test3", 3)

#出力
Write-Host $hsAry["test2"]

【実行結果】
2

続きを読む