如何获得逗号分隔阵列成CSV
我有这样的数据,并且需要得到它变成一个逗号分隔的CSV文件,名为$文件路径如何获得逗号分隔阵列成CSV
$headers = "Meter Ref","Meter CIS Id","Meter Badge Id","Meter Electronic Id","Relationship","Rel Start Date","Rel End Date","Meter ANSI Id","Meter Type","Mfg Serial #","Mfg Lot #","Rel Data Source","Comm Mod Ref","Meter Status","Meter Data Source","Organization(s)"
$psObject = $null
$psObject = New-Object psobject
foreach($o in $headers)
{
Add-Member -InputObject $psObject -MemberType noteproperty -Name $o -Value ""
}
$psObject | Export-Csv $filepath -NoTypeInformation
$TheCSV = Import-Csv $filepath
$tabledata = $driver.FindElementsByTagName("tr") | where {$_.Text -match "Meter"}
$CSV = ""
$apple = @()
$apple += $headers -join ','
Foreach ($row in $tabledata | select -skip 1)
{
$apple += $row.Text -replace '\n',','
}
$apple
内容:
Meter Ref,Meter CIS Id,Meter Badge Id,Meter Electronic Id,Relationship,Rel Start Date,Rel End Date,Meter ANSI Id,Meter Type,Mfg Serial #,Mfg Lot #,Rel Data Source,Comm Mod Ref,Meter Status,Meter Data Source,Organization(s) 1-CAIWFB,PWST441096,PWST441096,PWST441096,Delete,2015-04-21 13:49,2015-04-21 13:49, ,Electric Meter, , ,ORG21672,1-CAIZ66,Installed,ORG21672,SOURCE1 1-CAIWFB,PWST441096,PWST441096,PWST441096,Active,2015-04-21 13:49, , ,Electric Meter, , ,ORG21672,1-CAIZ66,Installed,ORG21672,SOURCE1 1-100FRE,PWST097870,PWST097870,PWST097870,Inactive,2009-11-01 00:00,2015-04-21 13:49, ,Electric Meter, , ,ORG21672,,Installed,ORG21672,SOURCE1
输出$apple
正是我想要这样插入CSV文件。
但是,我不能使用out-file
或export-csv
,因为它被视为一个字符串,因此只输出长度计数,或者垂直输出数据,而不是逗号分隔。
我也不能使用convertto-CSV
,因为它也只显示长度而不是数据。
我不知道如何将Row.Text
的每个记录与Add-Member
一起放入PSObject中。
我想出了一个办法做到这一点。不完全是我怎么想的那样做,但它能够完成任务:
$file = "C:\mtext.txt"
$filepath = "C:\mcsv.csv"
$apple | Out-file $file
$ToCSV = Import-Csv $file -Delimiter ','
$ToCSV | Export-Csv $filepath -NoTypeInformation
让我知道的更好的方法。
我不能对此进行测试,因为我没有访问您取得表数据的网页,但它应该是这样简单:
$headers = "Meter Ref","Meter CIS Id","Meter Badge Id","Meter Electronic Id","Relationship","Rel Start Date","Rel End Date","Meter ANSI Id","Meter Type","Mfg Serial #","Mfg Lot #","Rel Data Source","Comm Mod Ref","Meter Status","Meter Data Source","Organization(s)"
$filepath = "C:\folder\meter.csv"
Add-Content -Path $filepath -Value ($headers -join ',')
$tabledata = $driver.FindElementsByTagName("tr") | where {$_.Text -match "Meter"}
Foreach ($row in $tabledata | select -skip 1)
{
Add-Content -Path $filepath -Value ($row.Text -replace '\n',',')
}
你不需要要创建对象或数据数组,你只能处理简单的字符串数据。然后使用循环将该数据添加到文本文件(使用csv扩展名)。
Add-Content
非常适合此任务,因为它将数据添加到文件中的新行,并且还会创建该文件。
垂直输出数据。我会给你看一张照片。 –
我的代码是以'$ tabledata'的格式输出数据,它的格式与你所看到的格式相同。你所看到的'垂直'数据是'$ tabledata'中的_actually_包含的数据。你的输入数据很混乱,所以你的输出数据也是一团糟。您需要先组织输入数据,然后才能输出干净的数据。我无法帮助你,因为你没有提供你的输入数据的例子。你的答案可能工作,但它是一个非常hacky的解决方案,远不是好的代码。 –
输入数据从网页抓取。这是它的唯一格式。请参阅$ tabledata = $ driver.FindElementsByTagName(“tr”)|其中{$ _。Text -match“Meter”} - 查找元素并获取数据。 –
我不明白?它已经是一个CSV文件。 –
@Bill_Stewart CSV文件为空,所有数据都在数组中 –
您的问题对我来说不清楚。我建议重写它,并显示输入数据的简短示例,以及如何输出它。 –