我有一个包含多个用户的文本文件(格式正确):
用户名:t-Hancock
电话号码:555555555
用户名:a-smith
电话号码:987654321
用户名:r-Byer
电话号码:123456789
我正在尝试将所有这些用户放入具有两个属性(名称和电话号码)的对象中。我尝试了Get-Content,还尝试了其他文章中的一些正则表达式,但是由于不了解,所以无法对其进行修改。
怎么办呢?
目前尚不清楚您想要什么-什么样的对象和目的?
我将举例说明您可以做什么...
假设您要将文本文件转换为CSV文件以便于轻松导入Excel,请先阅读文件内容:
$input = Get-Content C:\TextFile.txt
现在,创建一个数组,您将在其中存储创建的每个对象:
$array = @()
现在,我们将进入一个循环,分析文件内容。如果该行以“用户名”开头,则使用冒号作为分隔符来拆分该行,将第二个项目(相对于0,所以第二个项目为第一)放入变量中。
如果该行以“ PhoneNumber”开头,则将$writeobj
变量设置为true(在循环的每次迭代开始时重置为false),并$PhoneNumber
再次使用split存储“ PhoneNumber”值。
然后检查是否$writeobj
为true,如果是,则创建一个新对象,添加一个NoteProperty,其名称为Username,并从文件的上一行存储用户名值。
然后添加一个名称为PhoneNumber且值为的NoteProperty $PhoneNumber
。然后,将对象添加到数组。
这一直重复整个文件内容:
$input | foreach-object {
$writeobj = $false
$obj = New-Object System.Object
If ($_ -match 'username*') {
$Username = ($_ -split ':')[1]
}
If ($_ -match 'PhoneNumber*') {
$PhoneNumber = ($_ -split ':')[1]
$writeobj = $true
}
If ($writeobj){
$obj | Add-Member -type NoteProperty -name Username -value $Username
$obj | Add-Member -type NoteProperty -name PhoneNumber -value $PhoneNumber
$array += $obj
}
}
一旦脱离循环,将数组导出到CSV文件:
$array | Export-Csv -path C:\test.csv -NoTypeInformation
因此,完整的脚本是:
$input = Get-Content C:\TextFile.txt
$array = @()
$input | foreach-object {
$writeobj = $false
$obj = New-Object System.Object
If ($_ -match 'username*') {
$Username = ($_ -split ':')[1]
}
If ($_ -match 'PhoneNumber*') {
$PhoneNumber = ($_ -split ':')[1]
$writeobj = $true
}
If ($writeobj){
$obj | Add-Member -type NoteProperty -name Username -value $Username
$obj | Add-Member -type NoteProperty -name PhoneNumber -value $PhoneNumber
$array += $obj
}
}
$array | Export-Csv -path C:\test.csv -NoTypeInformation
请参见下面在Excel中打开的CSV文件的屏幕截图。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句