LoginSignup
0
2

More than 5 years have passed since last update.

【PowerShell】csvから読み込んだPSCustomObjectにNotePropertyとしてindex等を追加する

Last updated at Posted at 2018-04-01

機能

csvにn行1列で納められているstringを読み込み、indexとsubstringをメンバーとして追加します。csvデータは以下のような固定長のものを想定しています。

"C:\Users~~~\Desktop\test\test.csv"

string
58111361
44215590
44123622
23115643

注意点

環境

  • PSVersion 5.1.16299.251
  • Windows 10 Home

手順

  1. csvを読み込んでstringをNotePropertyとして持つPSObjectを作成する。
  2. PSObjectにindexを追加する。
  3. stringから抜きだしたsubstringをPSObjectに追加する。

コード

#csvの格納場所を指定してcsvを読み込む
$csv = Import-Csv "C:\Users\~~~\Desktop\test\test.csv"

#行数を取得する
$csv | Add-Member NoteProperty index 0
for($i = 0; $i -lt ($csv | Measure-Object).Count; $i++){
    $csv[$i].index = $i+1
}

function Add-Submember($TargetObject,$MainString,$MemberName,$SubstringStartIndex,$SubstringCount){
    #stringのNotePropertyを持つPSCustomObjectから、そのstringの一部を切り出して名前を付けて、NotePropertyとして追加する
    #使用例) Add-Submember $csv string age2 1 2 ⇒ $csvのstringの1文字目から2文字を取り出してage2と名付けてNotePropertyに追加 
    $TargetObject | Add-Member NoteProperty $MemberName 0
    for($i = 0; $i -lt ($TargetObject | Measure-Object).Count; $i++){ 
        $TargetObject[$i].$MemberName = $TargetObject[$i].$MainString.ToString().substring($SubstringStartIndex-1,$SubstringCount)
    }
}

#stringの1個めからの2文字を抜き出す
Add-Submember $csv string substring 1 2
#stringの3個めからの4文字を抜き出す
Add-Submember $csv string substring2 3 4

#sort(おまけ)
$csv | Sort-Object {[int] $_.substring} 
$csv | Sort-Object {[int] $_.substring}, {[int] $_.substring2} 

工夫点

  • csvデータの操作について、行を追加する方法はググったらすぐ出てきましたが、列を追加する方法はパッと出てこなかったので書いてみました。

課題・問題点

  • 今回のやり方では、いったんAdd-memberで0を代入してから、再度for文で数値を代入していますが、あまりスマートではないと感じます。

おわりに

  • コメント大歓迎です。

他の参考文献・参考サイト

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2