documents:proglang:powershell:powershell-006
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン | |||
| documents:proglang:powershell:powershell-006 [2026/05/13 07:21] – [ファイル調査3:データを作る] k896951 | documents:proglang:powershell:powershell-006 [2026/05/30 18:20] (現在) – ↷ 移動操作に合わせてリンクを書き換えました。 k896951 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| + | ====== 102.ファイル調査3:データを作る ====== | ||
| + | |||
| + | 2025-09-12\\ | ||
| + | 自分用メモ | ||
| + | |||
| + | ===== これは何? ===== | ||
| + | |||
| + | PowerShellでバイト列をファイルに書き出す手順の簡単な例。 | ||
| + | |||
| + | [[powershell-005]]の続きで、テスト用に1レコード分の新規データファイルを作ってみる。 | ||
| + | |||
| + | |||
| + | ===== バイト配列にデータ格納 ===== | ||
| + | |||
| + | 項目TAGが99のテストデータが必要になったとしよう。 | ||
| + | |||
| + | 既に1レコード14バイトと分かっていて、レコード内項目の構成も分かっている。\\ | ||
| + | 項目IDには0004、項目NAMEにはSJISで" | ||
| + | |||
| + | バイト配列に項目ID、項目NAME、項目TAG、の順に各バイト列を格納していけばいい。 | ||
| + | |||
| + | {{..: | ||
| + | ==== 項目NAMEの生成 ==== | ||
| + | |||
| + | 項目NAMEに格納するSJISの文字列のバイト列変換結果を得るには以下のようなEncoding.GetBytes()を利用すればいい。 | ||
| + | |||
| + | < | ||
| + | PS E:\WK> [System.Text.Encoding]:: | ||
| + | |||
| + | | ||
| + | |||
| + | Offset Bytes Ascii | ||
| + | 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | ||
| + | ------ ----------------------------------------------- ----- | ||
| + | 0000000000000000 8F 48 93 63 8C A2 81 40 | ||
| + | |||
| + | PS E:\WK> | ||
| + | </ | ||
| + | |||
| + | ==== ファイル書き出し ==== | ||
| + | |||
| + | PowerShellのバージョンでオプションが異なるので注意。 | ||
| + | |||
| + | * 新規作成・上書き : Set-Content コマンドレットを使う。 | ||
| + | * 既存ファイルへの追加 : Add-Content コマンドレットを使う。 | ||
| + | |||
| + | |||
| + | ここの例では新規作成のため、Set-Content コマンドレットを使っている。 | ||
| + | ===== PowerShell 7.5 の場合 ===== | ||
| + | |||
| + | Set-Content のオプションが 5.1 のものとは違うので注意。 | ||
| + | |||
| + | < | ||
| + | PS E:\WK> $PSVersionTable | ||
| + | |||
| + | Name Value | ||
| + | ---- ----- | ||
| + | PSVersion | ||
| + | PSEdition | ||
| + | GitCommitId | ||
| + | OS | ||
| + | Platform | ||
| + | PSCompatibleVersions | ||
| + | PSRemotingProtocolVersion | ||
| + | SerializationVersion | ||
| + | WSManStackVersion | ||
| + | |||
| + | PS E:\WK> $enc = [System.Text.Encoding]:: | ||
| + | PS E:\WK> [byte[]]$recdata = (0xF0, 0xF0,0xF4, 0xF0) + $enc.GetBytes(" | ||
| + | PS E:\WK> $recdata | Set-Content -Path SAMPLEBIN2 -AsByteStream | ||
| + | PS E:\WK> Format-Hex SAMPLEBIN2 | ||
| + | |||
| + | | ||
| + | |||
| + | Offset Bytes Ascii | ||
| + | 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | ||
| + | ------ ----------------------------------------------- ----- | ||
| + | 0000000000000000 F0 F0 F4 F0 8F 48 93 63 8C A2 81 40 F9 F9 | ||
| + | |||
| + | PS E:\WK> | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== PowerShell 5.1 の場合 ===== | ||
| + | |||
| + | Get-Content のオプションが 7.5 のものとは違うので注意。 | ||
| + | |||
| + | < | ||
| + | PS E:\WK> $PSVersionTable | ||
| + | |||
| + | Name Value | ||
| + | ---- ----- | ||
| + | PSVersion | ||
| + | PSEdition | ||
| + | PSCompatibleVersions | ||
| + | BuildVersion | ||
| + | CLRVersion | ||
| + | WSManStackVersion | ||
| + | PSRemotingProtocolVersion | ||
| + | SerializationVersion | ||
| + | |||
| + | |||
| + | PS E:\WK> $enc = [System.Text.Encoding]:: | ||
| + | PS E:\WK> [byte[]]$recdata = (0xF0, 0xF0,0xF4, 0xF0) + $enc.GetBytes(" | ||
| + | PS E:\WK> $recdata | Set-Content -Path SAMPLEBIN2 -Encoding Byte | ||
| + | PS E:\WK> Format-Hex SAMPLEBIN2 | ||
| + | |||
| + | |||
| + | | ||
| + | |||
| + | 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | ||
| + | |||
| + | 00000000 | ||
| + | |||
| + | |||
| + | PS E:\WK> | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== 追記:2レコード作りたい ===== | ||
| + | |||
| + | おいおい応用力が足りんぞー | ||
| + | |||
| + | {{..: | ||
| + | |||
| + | PowerShell 7.5 の例を提示する。 | ||
| + | |||
| + | < | ||
| + | PS E:\WK> $PSVersionTable | ||
| + | |||
| + | Name Value | ||
| + | ---- ----- | ||
| + | PSVersion | ||
| + | PSEdition | ||
| + | GitCommitId | ||
| + | OS | ||
| + | Platform | ||
| + | PSCompatibleVersions | ||
| + | PSRemotingProtocolVersion | ||
| + | SerializationVersion | ||
| + | WSManStackVersion | ||
| + | |||
| + | PS E:\WK> $enc = [System.Text.Encoding]:: | ||
| + | PS E:\WK> [byte[]]$recdata = (0xF0, 0xF0,0xF4, 0xF0) + $enc.GetBytes(" | ||
| + | PS E:\WK> $recdata += (0xF0, 0xF0,0xF5, 0xF0) + $enc.GetBytes(" | ||
| + | PS E:\WK> $recdata | Set-Content -Path SAMPLEBIN2 -AsByteStream | ||
| + | PS E:\WK> Format-Hex SAMPLEBIN2 -Offset 0 -Count 14 ← ファイル1レコード目 | ||
| + | |||
| + | | ||
| + | |||
| + | Offset Bytes Ascii | ||
| + | 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | ||
| + | ------ ----------------------------------------------- ----- | ||
| + | 0000000000000000 F0 F0 F4 F0 8F 48 93 63 8C A2 81 40 F9 F9 | ||
| + | |||
| + | PS E:\WK> Format-Hex SAMPLEBIN2 -Offset 14 -Count 14 ← ファイル2レコード目 | ||
| + | |||
| + | | ||
| + | |||
| + | Offset Bytes Ascii | ||
| + | 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | ||
| + | ------ ----------------------------------------------- ----- | ||
| + | 000000000000000E F0 F0 F5 F0 83 7B 81 5B 83 5F 81 5B F9 F9 | ||
| + | |||
| + | PS E:\WK> [byte[]]$bindata = Get-Content SAMPLEBIN2 -AsByteStream ← ファイルSAMPLEBIN2を改めてメモリにバイト配列として確保する | ||
| + | PS E:\WK> $enc.GetString($bindata[4..11]) ← 1レコード目の項目NAME | ||
| + | 秋田犬 | ||
| + | PS E:\WK> $enc.GetString($bindata[18..25]) ← 2レコード目の項目NAME | ||
| + | ボーダー | ||
| + | PS E:\WK> | ||
| + | </ | ||
| + | |||
| + | |||
| + | {{tag> 技術資料 Windows PowerShell System.Text.Encoding Set-Content}} | ||
| + | |||
documents/proglang/powershell/powershell-006.txt · 最終更新: by k896951
