ConvertFrom字符串缺少属性



我是ConvertFrom String的新手,需要能够完成以下工作。这只是一个基本的样本,但这正是我所需要的。

我有以下数据需要解析为CSV。

FirstName: John
LastName: Doe
Email: jdoe@hotmail.com
Tel: 666555444
FirstName: Robert
LastName: Smith
url: www.smith.com

两组数据都有"FirstName"one_answers"LastName",但其中一组有电子邮件和电话,另一组没有后者,但有url。在使用ConvertFrom字符串解析为CSV后,我应该得到:

FirstName LastName Email            Tel       url
Johhn     Doe      jdoe@hotmail.com 666555444
Robert    Smith                               www.smith

但我得到的却是:

FirstName LastName Email            Tel       
Johhn     Doe      jdoe@hotmail.com 666555444
Robert    Smith    www.smith.com    www.smith.com

我使用的模板:

$template=@'
FirstName: {FirstNameNombre*:John}
LastName: {LastName:Doe}
Email: {Email:jdoe@hotmail.com}
Tel: {Tel:666555444}
FirstName: {Nombre*:Robert}
LastName: {Apellidos:Smith}
url: {url:www.smith.com}
'@
$listContacts = Get-Content -Path "C:UsersUsuarioDesktopConversor_ABK2CVSPbas.txt"
$listContacts | ConvertFrom-String -TemplateContent $template 

我在谷歌上搜索过论坛,但我发现最接近解决这个问题的方法是:

https://foxdeploy.com/2015/01/13/walkthrough-part-two-advanced-parsing-with-convertfrom-string/

它在哪里提到使用?和用于指示解析器变量是可选的或不需要的,但我不清楚如何使用它们。我在第一个模板集中尝试过{url?:},但在运行脚本时不断出错。

有什么想法可以让它发挥作用吗?这只是一个基本的示例,但其想法是使用我在这里学到的内容来促进>在6个MFP(佳能(到一个新的MFP(夏普(的几个地址簿中的300个联系人。佳能旧型号不提供CSV导出,而是提供与示例类似的格式(有电子邮件和文件夹地址(。

提前感谢您的建议!

--Jorge

我是ConvertFrom-String的超级粉丝,尽管很多人说它有问题。它也已从较新版本的powershell中删除。抛开这些不谈,我认为这不是这份工作的合适工具。您需要相对一致的数据。我想提供一个替代方案。您的示例显示了由空行分割的数据。如果不是这样,请告诉我,我可以调整答案。

样本数据

$text = @'
FirstName: John
LastName: Doe
Email: jdoe@hotmail.com
Tel: 6665554444
FirstName: Robert
LastName: Smith
url: www.smith.com
'@

首先,我们将用空线把各段分开。我们将使用基于呼叫系统[Environment]::newline的两条空线。然后,对于每个部分,我们将使用switch语句基于regex匹配捕获所需的数据。我们需要清除变量,以确保不会从前面的章节中遗留任何内容。最后,在pscustomwobject创建中填充所有匹配项。

$nl = [environment]::NewLine
$data = $text -split "$nl$nl"| foreach {
Remove-Variable first,last,email,tel,url -ErrorAction Ignore
switch -Regex ($_){
'FirstName: (.+)' {$first = $matches.1}
'LastName: (.+)' {$last = $matches.1}
'Email: (.+)' {$email = $matches.1}
'Tel: (.+)' {$tel = $matches.1}
'URL: (.+)' {$url = $matches.1}
}
[PSCustomObject]@{
FirstName = $first
LastName  = $last
Email     = $email
Tel       = $tel
URL       = $url
}
}

$data的内容

FirstName : John
LastName  : Doe
Email     : jdoe@hotmail.com
Tel       : 666555444
URL       : 
FirstName : Robert
LastName  : Smith
Email     : 
Tel       : 
URL       : www.smith.com

$data输出为表

$data | Format-Table
FirstName LastName Email             Tel       URL          
--------- -------- -----             ---       ---          
John...   Doe...   jdoe@hotmail.c... 666555444              
Robert... Smith...                             www.smith.com

剩下的就是导出到CSV

$data | Export-Csv -Path somepathto.csv -NoTypeInformation

编辑

如果从文件中读取,重要的是它都是一个字符串,也是如此

$mydata = Get-Content -Path "C:UsersUsuarioDesktopConversor_ABK2CVSsample2.txt" -Raw

相关内容

  • 没有找到相关文章

最新更新