Windows PowerShell でファイルを 1 行ずつ読み取る
-
Get-Content
コマンドレット構文の改善 -
switch
を使用して特定の行をロードする -
PowerShell の
[System.IO.File]
クラスを使用してファイルを 1 行ずつ読み取る
Windows PowerShell では、Get-Content
コマンドレットを使用してファイルからファイルを読み取ることができます。ただし、コマンドレットはファイルの内容全体を一度にメモリにロードするため、大きなファイルでは失敗またはフリーズします。
この問題を解決するために私たちにできることは、ファイルを 1 行ずつ読み取ることです。この記事では、その方法を説明します。
始める前に、複数行のサンプルテキストファイルを作成することをお勧めします。たとえば、次の行を含む file.txt
を作成しました。
file.txt
:
one
two
three
four
five
six
seven
eight
nine
ten
Microsoft によると、正規表現はテキストを照合するために使用されるパターンです。リテラル文字、演算子、およびその他の構成要素で構成できます。この記事では、$regex
で示される正規表現と呼ばれる標準変数を含むさまざまなスクリプトを試します。
Get-Content
コマンドレット構文の改善
Get-Content
コマンドレットには、大きなファイルをロードするときに、ファイルのコンテンツを一度にメモリにロードするため、欠陥があることを最初に説明しました。ただし、foreach
ループを使用して行を 1つずつロードすることで改善できます。
サンプルコード:
foreach($line in Get-Content .\file.txt) {
if($line -match $regex){
Write-Output $line
}
}
switch
を使用して特定の行をロードする
$regex
変数を使用して、カスタム $regex
値を作成し、それを switch case 関数で照合することにより、ファイルに特定の行を入力できます。
サンプルコード:
$regex = '^t'
switch -regex -file file.txt {
$regex { "line is $_" }
}
出力:
line is two
line is three
line is ten
この例では、$regex
のカスタム値を定義しました。これは、文字 t
で始まる場合にのみ行を照合して表示します。
PowerShell の [System.IO.File]
クラスを使用してファイルを 1 行ずつ読み取る
.NET ライブラリにアクセスできる場合は、[System.IO.File]
クラスを使用してファイルからコンテンツを読み取ることができます。ファイルを 1 行ずつ処理するために正規表現を必要としないため、Get-Content
の優れた代替手段です。
サンプルコード:
foreach($line in [System.IO.File]::ReadLines("C:\yourpathhere\file.txt"))
{
Write-Output $line
}
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn