我可以改变文件中文本的列顺序:
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
存储在数组中以循环通过它们。因此,我目前的解决方案很麻烦,而且似乎不正确。
解决方案似乎是:
- 以某种方式拦截
Export-CSV C:testtest6newSqlInsertList.txt -append
以删除双引号&逗号 - 或者找到一种方法,以更好的方式展开所有的列属性比我已经显示
如果有人有什么建议,我将不胜感激。
这是一个简单的方法来获得你想要的东西,说实话,我不明白为什么你想要导出输出的方式,而不是一个合适的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
给出代码正在做什么的上下文:
- 外部
ForEach-Object
循环从集合(Csv)中枚举每个对象。 - 内部
foreach
循环正在获取属性值 - 内循环的所有输出用
$(...)
收集,枚举完成后,所有捕获的输出由一个空格' '
与-join
操作符连接。