[英]Powershell: Splitting String into CSV
我有一個(希望)簡短的問題,我似乎無法自己解決。
我有一個字符串:
ITEM1數量:12x 355ml瓶價格:$ 23.95 $ 23.50節省$ 0.45
我想拆分並插入CSV文件。 生成的CSV中的列及其值將為:
名稱:(上述字符串中“ Quantity:”之前的所有字符。)
數量:(在數量和x之間)
尺寸: (x和瓶子之間的所有值)
OrigPrice :(價格和第二個$符號之后的所有內容)
SalePrice:(介於OrigPrice和SAVE之間的所有值)
節省:( “保存”之后的所有內容)
我希望所有這些都有意義,如果需要,我可以提供更多信息。
感謝您的幫助!
怎么樣:
$subject = 'ITEM1 Quantity: 12x 355ml bottlePrice: $23.95 $23.50 SAVE $0.45'
if ($subject -cmatch '^(?<Name>.*)Quantity:(?<Quantity>.*)x(?<Size>.*)bottle\s*Price:(?<OrigPrice>.*)\s*(?<SalePrice>\$.*)SAVE(?<Savings>.*)$') {
$result = $matches[0]
} else {
$result = ''
}
"Matches:"
$matches
我無法確定瓶子和價格之間是否確實需要一個空格(它看起來並不像它,但是如果有的話,它將處理)。
如果需要名稱,則可以按以下方式訪問它:
$matches["Name"]
更好的解決方案(實際上是將其轉換為CSV格式的解決方案)將類似於以下內容(感謝@nickptrvc指出了我錯過的內容):
function Read-Data {
[cmdletbinding()]
param(
[parameter(Mandatory)][string]$Path
)
$reader = [System.IO.File]::OpenText($Path)
while(( $subject = $reader.ReadLine()) -ne $null ) {
if ($subject -cmatch '^(?<Name>.*)Quantity:(?<Quantity>.*)x(?<Size>.*)bottle\s*Price:(?<OrigPrice>.*)\s*(?<SalePrice>\$.*)SAVE(?<Savings>.*)$') {
$result = $matches[0]
$obj = [PSCustomObject]@{
Name=$matches["Name"].trim();
Quantity=$matches["Quantity"].trim();
Size=$matches["Size"].trim();
OrigPrice=$matches["OrigPrice"].Trim();
SalePrice=$matches["SalePrice"].Trim();
Savings=$matches["Savings"].Trim()
}
$obj
}
}
}
然后,要使用它,請將其保存到文件中(我稱為我的Read-Data.ps1),提供文件源,然后您有兩個選擇:1)您可以使用ConvertTo-Csv
將對象簡單地轉換為CSV,並且將結果返回到屏幕,或者您可以使用Export-Csv
將其保存到文件中:
. C:\Test\Convert-Data.ps1
Read-Data -Path C:\Test\datafile.dat | ConvertTo-Csv -NoTypeInformation
要么
Read-Data -Path C:\Test\datafile.dat | Export-Csv -NoTypeInformation -Path C:\Test\datafile.csv
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.