Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 数据集需要重新排列并导出为CSV_Powershell_Csv - Fatal编程技术网

Powershell 数据集需要重新排列并导出为CSV

Powershell 数据集需要重新排列并导出为CSV,powershell,csv,Powershell,Csv,我有一组数据,需要用标题重新排列。我认为,PowerShell是一种快速的方法 以数据为例: AAA, 123,53,145, text1 text12,text2,23.00, 21,6,0.21,0.00,2, 1,321,4 BBB,1,421,5, text3 text34, text4,41,22.5,1, 23,674,75,8,5.... AAA, 123,53,145, text1 text12 text23.00, 21,6,0.21,0.00,2, 1,321,4 BBB,1

我有一组数据,需要用标题重新排列。我认为,PowerShell是一种快速的方法

以数据为例:

AAA, 123,53,145, text1 text12,text2,23.00, 21,6,0.21,0.00,2, 1,321,4 BBB,1,421,5, text3 text34, text4,41,22.5,1, 23,674,75,8,5.... AAA, 123,53,145, text1 text12 text23.00, 21,6,0.21,0.00,2, 1,321,4 BBB,1421,5, text3 text34, 文本4,41,22.5,1, 23,674,75,8,5.... 正如您所看到的,“,”分隔了值,点只是值的一部分。AAA和BBB表示名称,AAA的值在BBB之前。我希望CSV文件中的值如下所示,每个值位于一个新单元格中:

Name: AAA abc: 123 def: 53 ghi: 145 jkl: text1 text12 mno: text2 pqr: 23.00 stu: 21 vwx: 6 yz: 0 姓名:AAA abc:123 def:53 ghi:145 jkl:text1 text12 mno:text2 pqr:23.00 斯图:21 vwx:6 yz:0 或者标题类似于:名称abc def等,以及标题下下下一个单元格中的值

总共有16个值,用逗号分隔一个名称(例如AAA)。可能有数百个名称具有随机值


我没有使用排序对象得到结果,因为它会扫描数据并将值按随机顺序排列。

这里有一种方法。它假定有18个属性,每个对象以一条不以逗号结尾的线结尾

生成的集合可以通过
导出CSV
优雅地发送到CSV。[咧嘴笑]


一组数据的开始/结束有什么模式?您的示例显示第1组中有15个项目,第2组中只有14个项目【明显被截断】。//所以您如何知道组的开始和结束位置?开始是名称(AAA),结束是在新名称开始(BBB)之前。对于每个名称,正好有18个值(属性)以“,”分隔,每个属性都有自己的名称(abc)。因此,组以名称开始,在第18个值之后结束,然后新组开始。事实上,我不能把所有的内容都写下来,这就是你看到差异的原因。在你的样本中,
BBB
之前正好有15项,包括
AAA
。你怎么解释?您的样品不符合您的规格。。。您的规格已从16个属性更改为18个属性。//所以实际规格是什么?[皱眉]为什么在第一个例子中,名字前有15个项目如此重要,而我在后面解释的是有18个项目。讨论项目的数量,而我在事后解释确切的数量并不是一个好的讨论点。因此,第一篇文章中的例子是一个估计值,每个名称后面正好有18个项目。每个组中是否真的有换行符,或者每个组在一个单独的行中有一个特定的名称?
# fake reading in a text file as one multi-line string
#    in real life, use Get-Content -Raw
# similar names & properties are NOT part of the data
#    they are there for visually crosschecking the output
$InStuff = @'
Object_A,
A1,A2,A3,
A4 some other stuff,A5,
A6,A7 more extras,A8,A9,A10.00,
A11,A12,A13 thirteen,A14,
A15,A16.666,A17,A18
Object_B,B1.1,B2.2,B3.3,
B4 some other stuff,B5,B6,B7 more extras,B8,B9,B10.00,
B11,B12,B13 thirteen,B14,
B15,B16.666,B17,B18
'@

$ColumnHeaders = ('Name' +
    ' Col_01 Col_02 Col_03 Col_04 Col_05 Col_06 Col_07 Col_08 Col_09 Col_10' +
    ' Col_11 Col_12 Col_13 Col_14 Col_15 Col_16 Col_17 Col_18') -split ' '

$CSV = $InStuff -split "(?<!,)$([environment]::NewLine)" | 
    ForEach-Object {
        $_ -replace ",$([environment]::NewLine)", ','
        }

$Results = $CSV |
    ConvertFrom-Csv -Header $ColumnHeaders

$Results
Name   : Object_A
Col_01 : A1
Col_02 : A2
Col_03 : A3
Col_04 : A4 some other stuff
Col_05 : A5
Col_06 : A6
Col_07 : A7 more extras
Col_08 : A8
Col_09 : A9
Col_10 : A10.00
Col_11 : A11
Col_12 : A12
Col_13 : A13 thirteen
Col_14 : A14
Col_15 : A15
Col_16 : A16.666
Col_17 : A17
Col_18 : A18

Name   : Object_B
Col_01 : B1.1
Col_02 : B2.2
Col_03 : B3.3
Col_04 : B4 some other stuff
Col_05 : B5
Col_06 : B6
Col_07 : B7 more extras
Col_08 : B8
Col_09 : B9
Col_10 : B10.00
Col_11 : B11
Col_12 : B12
Col_13 : B13 thirteen
Col_14 : B14
Col_15 : B15
Col_16 : B16.666
Col_17 : B17
Col_18 : B18