目次

ニュース

日記カテゴリ

書庫

PowerShellでファイル読んで変数に入れたりする時にGet-Contentを使うと思いますが(違う?)何を血迷ったのか330万行を超えるファイルを読んでみました。

さすがにそんなの一気に読めないので(300MB位のファイル)-readcount 10とかで読んでみます。

で、一行ずつ処理がしたかったのですがforeachでやってみるとちょっと面白いことに。

$lines = Get-Content ?path * ?readcount 10

なんて形で読んで

foreach($line in $lines)
{
  #なんかの処理
}

って形にしようと思ったんですけどこれ$lineがstringじゃないんですよね。
$line.GetType()なんてやってみたらobject[]なんて表示されたりする。

$lineってreadcount分の行が入ってるような気もするのですがなんだろう。

今のところどういう挙動なのかまでは把握してません。

投稿日時 : 2011年9月11日 21:04
Feedback
  • # re: Get-Content
    mutaguchi
    Posted @ 2011/09/12 2:47
    -readCountを指定しない場合(-readCountが0)、
    改行コードで区切られた文字列の配列(object[])が返却されます。

    -readCountを指定した場合(-readCountが1以上)、
    まず改行コードで区切られた文字列の配列(object[])が作られ、さらにその配列をreadCountずつ分割したジャグ配列(object[][])が返されます。

    要するに-readCountは一度に読み込む行数であると同時に、パイプラインに一度に書き出す行数を指定するものですね。-readCountを大きくするとパイプラインを渡る回数が減るのでその分全体の処理は早くなります。が、ループ1回分の時間は指定してない時より長くなります。

    そういう挙動なので-readCountを指定した場合は、値を取り出し1行ずつ処理するときは、2重ループを組む必要があります。
  • # re: Get-Content
    taka
    Posted @ 2011/09/14 23:21
    >mutaguchiさん
    やっぱりそういう挙動なんですね。
    解説ありがとうございます。
  • # This is the perfect way to break down this ifnromaiton.
    Nur
    Posted @ 2012/10/18 5:19
    This is the perfect way to break down this ifnromaiton.
タイトル
名前
Url
コメント 

Blog 利用状況