簡體   English   中英

Powershell:將字符串拆分為CSV

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM