2017-10-04 84 views
-2

我有这样的数据,并且需要得到它变成一个逗号分隔的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-fileexport-csv,因为它被视为一个字符串,因此只输出长度计数,或者垂直输出数据,而不是逗号分隔。

我也不能使用convertto-CSV,因为它也只显示长度而不是数据。

我不知道如何将Row.Text的每个记录与Add-Member一起放入PSObject中。

编辑:输出使用时添加内容 Output of data when use Add-Content

+0

我不明白?它已经是一个CSV文件。 –

+0

@Bill_Stewart CSV文件为空,所有数据都在数组中 –

+0

您的问题对我来说不清楚。我建议重写它,并显示输入数据的简短示例,以及如何输出它。 –

回答

0

我想出了一个办法做到这一点。不完全是我怎么想的那样做,但它能够完成任务:

$file = "C:\mtext.txt" 
$filepath = "C:\mcsv.csv" 

$apple | Out-file $file 

$ToCSV = Import-Csv $file -Delimiter ',' 

$ToCSV | Export-Csv $filepath -NoTypeInformation 

让我知道的更好的方法。

0

我不能对此进行测试,因为我没有访问您取得表数据的网页,但它应该是这样简单:

$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非常适合此任务,因为它将数据添加到文件中的新行,并且还会创建该文件。

+0

垂直输出数据。我会给你看一张照片。 –

+0

我的代码是以'$ tabledata'的格式输出数据,它的格式与你所看到的格式相同。你所看到的'垂直'数据是'$ tabledata'中的_actually_包含的数据。你的输入数据很混乱,所以你的输出数据也是一团糟。您需要先组织输入数据,然后才能输出干净的数据。我无法帮助你,因为你没有提供你的输入数据的例子。你的答案可能工作,但它是一个非常hacky的解决方案,远不是好的代码。 –

+0

输入数据从网页抓取。这是它的唯一格式。请参阅$ tabledata = $ driver.FindElementsByTagName(“tr”)|其中{$ _。Text -match“Meter”} - 查找元素并获取数据。 –