2016-12-09 2 views
0

非常に大きなCSV(100万行)を100個のCSVに分割するスクリプトを作成しようとしています。ファイルが非常に大きいので、私はインポートよりもむしろStreamReaderを使用しています。 が、私はコードを開始しました:Powershell StreamReader、各レイドラインから変数を作成

$src = "c:\TestCSV.csv" 
$reader = New-Object IO.StreamReader($src) 
$header = Get-Content -Path $src | select -First 1 

while(($line = $reader.ReadLine()) -ne $null){ 
$data = $line -Split ',' 
$NiNumber = $data[9] 
$Char6 = $NiNumber.Substring(6,1); 
$Char7 = $NiNumber.Substring(7,1); 
$Group = $Char6 + $Char7 
Write-Host "▸▸ Adding Line to Group $Group " -NoNewline -ForegroundColor Yellow 
$stream =[System.IO.StreamWriter] "c:\test$Group.csv" 
$stream.WriteLine($line) 
$stream.Close() 
Write-Host -Object '✔' -ForegroundColor green 
} 
$reader.Close() 

私のCSVは、ヘッダーと13列があり、私はサブ糸引きによって9列目からグループ番号を取得しています。私はそのグループ名で新しいCSVにすべての行を出力する必要があります。これは1行で動作しますが、それ以上CSVに行を追加していないようです。 (新しいCSVを作成して既存のCSVを上書きするかどうかはわかりません)。 誰でも私がこれを完了するのを助けることができるので、csvに複数の行を追加し、可能であれば各csvにヘッダーを追加しますか?どのような助けも非常に感謝しています。

+0

喜んで解決策を投稿する必要があります。私はここに実際に質問があるか分からないが。 –

+0

HI Jimはこのサイトを初めてお見せしましたが、コメントを早めに追加しましたが、CSVに各行を追加するようになりましたが、複数の行を追加するのではなく、毎回新しいファイルを作成するようです既存のファイルは上書きされます。つまり、すべてのCSVファイルには1つの行しかありません。 – John

+0

ジョン、私はあなたがあなたの質問をより明確にする必要があると思う、私はあなたが求めているか分からない。また、csvファイルのサンプルを投稿すると便利です。 –

答えて

1

ストリームライターを呼び出して$ trueを追加する方法を変更することで、上書きの問題を修正することを管理しました。

$src = "c:\TestCSV.csv" 
$reader = New-Object IO.StreamReader($src) 
$header = Get-Content -Path $src | select -First 1 
while(($line = $reader.ReadLine()) -ne $null){ 
$data = $line -Split ',' 
$NiNumber = $data[9] 
$Char6 = $NiNumber.Substring(6,1); 
$Char7 = $NiNumber.Substring(7,1); 
$Group = $Char6 + $Char7 
Write-Host "▸▸ Adding Line to Group $Group " -NoNewline -ForegroundColor Yellow 
$GroupPath = "c:\test$Group.csv" 
$stream = New-Object IO.StreamWriter($GroupPath,$true) 
$stream.WriteLine($line) 
$stream.Close() 
Write-Host -Object '✔' -ForegroundColor green 
} 
$reader.Close() 
+0

サイズ/時間が問題になる場合は、$グループを取得するのに3つのコマンドではなく3つのコマンドを使用する理由を教えてください。 '$ Group = $ NiNumber.Substring(6,2)' – LotPings

+0

偉大な@ジョン。あなたの最初の10のポインターをおめでとうございます。私はあなたが作ったアプローチを本当に愛していました。 –

+0

ああ良い点!私は2の代わりに1つの変数を使用するとは思っていなかった最終目標にとても集中していました。私は文書全体でコードを実行し、それを夜間実行して残し、それはうまくいった。 – John

関連する問題