入力ファイルは固定幅のtxtファイルです。私のクライアントは通常、Excelでそれを開き、手動で列区切りを指定します。私はCSVとして解析してXLSなどで保存できるように、特定の空白をカンマで置き換えることを望んでいます。固定幅txtファイルをCSV/set-contentまたはout-file -appendに変換しますか?
$columBreaks = 20, 35, 50, 80, 100, 111, 131, 158, 161, 167, 183
[array]::Reverse($columBreaks) #too lazy to re-write array after finding out I need to iterate in reverse
$files = get-childitem ./ |where-object {$_.Name -like "FileFormat*.txt"}
foreach($file in $files)
{
$name = $file.Name.split(".")
$csvFile = $name[0]+".csv"
if (!(get-childitem ./ |where-object {$_.Name -like $csvFile})) #check whether file has been processed
{
$text = (gc $file)
foreach ($line in $text)
{
foreach ($pos in $columBreaks)
{
#$line.Substring($char-1,3).replace(" ", ",")
$line = $line.Insert($pos,",")
#out-file -append?
}
}
}
#set-content?
}
このコンテンツを書くにはどのような方法が最適ですか?私はセットコンテンツを使うことを望んでいましたが、私たちは行単位で処理しているので考えられませんので、セットコンテンツ用の配列を作るか、繰り返しごとに追加します。これを行うより効率的な方法はありますか?
basename tipをありがとう。セット内容は私に空のパイプエラーを与えます。 –
私は最初にif文を見逃しました。 ifブロックの中でset-contentビットを動かすだけでいいはずです(foreach($ text in $ text)の直後) – morgb
foreachからの配管はまったく動作しないと思います。 foreach-objectを使っている例がありますが、それに必要なフォーマットで内部ループを変換するのに苦労しました –