PowerShellは、システム管理やデータ処理において非常に強力な自動化ツールです。
日常的な業務の中で、CSV(Comma Separated Values)ファイルを扱う機会は非常に多いでしょう。
しかし、実際の業務では「CSV」と言いつつも、カンマではなくタブやセミコロンで区切られたデータに遭遇することが多々あります。
そのような場合でも、PowerShellの標準コマンドレットを使用すれば、区切り文字を自由自在に指定して読み書きすることが可能です。
本記事では、PowerShellでCSVの区切り文字を指定して効率的にデータを操作する具体的な手法について詳しく解説します。
Import-Csvコマンドレットで区切り文字を指定して読み込む
PowerShellでCSVファイルを読み込む際に最も頻繁に使用されるのが、Import-Csvコマンドレットです。
このコマンドレットはデフォルトでカンマ(,)を区切り文字として認識しますが、特定のパラメータを指定することで柔軟に対応できます。
-Delimiterパラメータの基本操作
区切り文字を指定するためには、-Delimiterパラメータを使用します。
このパラメータの後に、使用したい区切り文字をシングルクォーテーションまたはダブルクォーテーションで囲んで記述します。
例えば、セミコロン(;)で区切られたファイルを読み込む場合は以下のように記述します。
# セミコロン区切りのCSVファイルを読み込む例
$data = Import-Csv -Path "C:\data\users.csv" -Delimiter ';'
# 読み込んだ内容を表示
$data
Name Department Email
---- ---------- -----
Tanaka Sales tanaka@example.com
Sato IT sato@example.com
このように、-Delimiterを指定するだけで、PowerShellは指定された文字を境界としてデータをオブジェクト形式に変換してくれます。
タブ区切りファイル(TSV)を読み込む方法
実務では、タブ文字で区切られた「TSVファイル」を扱うケースも少なくありません。
PowerShellでタブ文字を指定する場合、特殊なエスケープシーケンスである「`t」(バッククォート + t)を使用します。
# タブ区切りのファイルを読み込む
$tsvData = Import-Csv -Path "C:\data\log.tsv" -Delimiter "`t"
# データの先頭3件を表示
$tsvData | Select-Object -First 3
ここで注意が必要なのは、タブ文字を指定する際には必ずダブルクォーテーション(”)で囲む必要があるという点です。
シングルクォーテーションを使用すると、エスケープシーケンスとして解釈されず、単なる「`」と「t」という2文字として扱われてしまうため注意しましょう。
Export-Csvコマンドレットで区切り文字を指定して書き出す
データの読み込みと同様に、ファイルへの書き出し時にも区切り文字を自由に指定することができます。
これには、Export-Csvコマンドレットを使用します。
任意の区切り文字でファイルを出力する
デフォルトではカンマ区切りで出力されますが、-Delimiterパラメータを付与することで、出力形式を変更できます。
以下の例では、配列オブジェクトをセミコロン区切りのテキストファイルとして保存しています。
# サンプルデータの作成
$users = @(
[PSCustomObject]@{ID="001"; Name="Suzuki"; Role="Admin"}
[PSCustomObject]@{ID="002"; Name="Takahashi"; Role="User"}
)
# セミコロン区切りで出力
$users | Export-Csv -Path "C:\output\processed_users.csv" -Delimiter ';' -NoTypeInformation -Encoding utf8
出力されたファイルをメモ帳などで確認すると、各フィールドがセミコロンで連結されていることがわかります。
また、-NoTypeInformationスイッチを付けることで、ファイル先頭に出力される型情報(#TYPE…)を省略でき、他のアプリケーションとの互換性が高まります。
2026年現在のエンコーディングに関する注意点
PowerShell 7(Core)以降、デフォルトのエンコーディングは「UTF-8(BOMなし)」となっています。
しかし、古いバージョンのExcelや日本のレガシーなシステムでファイルを読み込む場合、Shift-JISやBOM付きUTF-8が求められることがあります。
その場合は、-Encodingパラメータを明示的に指定することが重要です。
| エンコーディング名 | 主な用途 |
|---|---|
| utf8 | モダンなアプリケーション、クラウドサービス、Linux環境 |
| utf8BOM | 古いWindowsアプリや、日本語環境のExcelで文字化けを防ぐ場合 |
| default (Shift-JIS等) | 日本の古いシステムとのデータ連携 |
高度なテクニック:特殊な状況での区切り文字指定
基本的な読み書きだけでなく、現場ではもう少し複雑な対応が必要になる場面があります。
ConvertFrom-Csvを使った文字列データのパース
ファイルではなく、Web APIから取得したテキストデータや変数内の文字列をCSVとして処理したい場合があります。
その際はConvertFrom-Csvコマンドレットを使用します。
# 文字列データを定義
$rawText = "ID|Name|Price`n101|Apple|100`n102|Orange|150"
# パイプ記号(|)を区切り文字としてオブジェクトに変換
$items = $rawText | ConvertFrom-Csv -Delimiter '|'
# 内容の確認
$items
ID Name Price
-- ---- -----
101 Apple 100
102 Orange 150
このように、ファイルを経由せずにメモリ上で直接データを変換できるため、処理の高速化に寄与します。
データの値に区切り文字が含まれる場合
データの中に、区切り文字と同じ文字が含まれている場合は注意が必要です。
例えば、住所データの中に「,(カンマ)」が含まれている場合、単純にカンマで区切るとデータがズレてしまいます。
PowerShellのExport-Csvは、デフォルトですべてのフィールドをダブルクォーテーション(”)で囲むため、この問題を自動的に回避します。
もしダブルクォーテーションを付けたくない、あるいは特定の囲み文字が必要な場合は、環境に応じた微調整が必要となりますが、基本的にはPowerShellの標準仕様に任せるのが安全です。
PowerShell 7系での-UseQuotesパラメータ
PowerShell 7以降では、-UseQuotesパラメータが追加されており、囲み文字の制御がより柔軟になりました。
「必要な場合のみ囲む」といった指定が可能になり、ファイルサイズを抑えたい場合に有効です。
# 必要な箇所だけ引用符を付ける(PowerShell 7.x以上)
$users | Export-Csv -Path "C:\output\smart.csv" -UseQuotes AsNeeded
まとめ
PowerShellでCSVの区切り文字を指定する方法について、読み込みから書き出しまで詳しく見てきました。
Import-CsvおよびExport-Csvの-Delimiterパラメータを使いこなすことで、あらゆる形式のテキストデータを柔軟に扱うことができます。
特にタブ区切りの場合は「`t」という特殊な記述が必要であることを覚えておきましょう。
また、文字コード(Encoding)の設定も、データの受け渡し先での文字化けを防ぐために非常に重要な要素です。
これらのテクニックを組み合わせることで、データのインポート・エクスポート作業を劇的に効率化し、ミスのない自動化プロセスを構築できるようになります。
まずは身近なデータを使って、様々な区切り文字での操作を試してみてください。
