使用Powershell CSV对象将文本文件转换为文本文件字符串



我可以改变文件中文本的列顺序:

001 AALTON Alan 25 Every Street 
002 BROWN James 101 Browns Road
003 CAMPBELL Colin 57 Camp Avenue

将名字列在姓氏之前,使用以下命令:

$Data = Import-CSV C:testtest6sqlInsertList.txt -Delimiter ' ' -Header "Col1","Col2","Col3","Col4","Col5","Col6"
# attempt to output with Surname/FirstName (columns 2 & 3) reversed 
[array]$fileStore = $Data | Select-Object Col1,Col3,Col2,Col4,Col5,Col6 | Export-CSV C:testtest6newSqlInsertList.txt -append

输出为:

"Col1","Col3","Col2","Col4","Col5","Col6"
"001","Alan","AALTON","25","Every","Street"
"002","James","BROWN","101","Browns","Road"
"003","Colin","CAMPBELL","57","Camp","Avenue"

但是如果我要将此输出处理为字符串格式,我就会尝试扩展每个Colx属性,如:

$Data = Import-CSV C:testtest6sqlInsertList.txt -Delimiter ' ' -Header "Col1","Col2","Col3","Col4","Col5","Col6"
# attempt to output with Surname/FirstName (columns 2 & 3) reversed 
[array]$fileStore = $Data | Select-Object Col1,Col3,Col2,Col4,Col5,Col6 

# first attempt worked 
$test = $fileStore[1] | Select-Object -ExpandProperty Col1
$test += ' '
$test += $fileStore[1] | Select-Object -ExpandProperty Col3
$test += ' '
$test += $fileStore[1] | Select-Object -ExpandProperty Col2
$test += ' '
$test += $fileStore[1] | Select-Object -ExpandProperty Col4
$test += ' '
$test += $fileStore[1] | Select-Object -ExpandProperty Col5
$test += ' '
$test += $fileStore[1] | Select-Object -ExpandProperty Col6
$test

输出:

002 James BROWN 101 Browns Road

我不能将对象Colx存储在数组中以循环通过它们。因此,我目前的解决方案很麻烦,而且似乎不正确。

解决方案似乎是:

  1. 以某种方式拦截Export-CSV C:testtest6newSqlInsertList.txt -append以删除双引号&逗号
  2. 或者找到一种方法,以更好的方式展开所有的列属性比我已经显示

如果有人有什么建议,我将不胜感激。

这是一个简单的方法来获得你想要的东西,说实话,我不明白为什么你想要导出输出的方式,而不是一个合适的Csv。

$headers  = "A","B","C","D","E","F"
$newOrder = "A","C","B","D","E","F"
Import-CSV C:testtest6sqlInsertList.txt -Delimiter ' ' -Header $headers | ForEach-Object {
$(foreach($i in $newOrder) { $_.$i }) -join ' '
} | Set-Content newfile.someextension

给出代码正在做什么的上下文:

  1. 外部ForEach-Object循环从集合(Csv)中枚举每个对象。
  2. 内部foreach循环正在获取属性值
  3. 内循环的所有输出$(...)收集,枚举完成后,所有捕获的输出由一个空格' '-join操作符连接。

最新更新