2016-11-17 72 views
1

我試圖導入一個包含虛構的地方和小時,每週這些虛構的地方是開放的每一天的CSV。Powershell不分裂字符串從函數返回

時間爲5:00-4:00格式。有些有空間。我創建了一個函數來刪除空格。在該函數運行之後,PowerShell將無法對返回的字符串執行任何進一步的操作(即-split)。

的CSV:

Node,SAT,SUN,MON,TUE,WED,THU,FRI 
PizzaPlace,9:00 – 4:30,0,8:00-3:30,7:00 – 10:00,10:00 – 4:00,10:00 – 4:00,10:00 – 4:00 
BigPharma,0,5:00 – 4:00,7:00-6:00,7:00-6:00,0,0,7:00-6:00 
GreenHouse,12:00-8:00,0,12:00-7:30,12:00-7:30,12:00-7:30,12:00-7:30,12:00-7:30 
Portapoty,12:00-8:00,Closed,10:00-6:00,10:00-7:30,10:00-6:00,10:00-7:30,10:00-6:00 

的PS1腳本:

function Unk-AMPM ($openStr) { 
    $openStr -replace " "; 
} 

$csvInputs = Import-CSV SampHours.csv; 

$srPRBN = "Our hours for"; 
$srPRAN = "are"; 

$dsWed = "Wednesday"; 

foreach ($csvLine in $csvInputs) { 

    $retailer = $csvLine.Node; 

    [string] $openWed = Unk-AMPM $csvLine.WED; 

    Write-Host "Value of openWed before split: "$openWed; 

    $openWedA = $openWed -split "-"; 

    Write-Host "Value of openWedA[0]: "$openWedA[0]; 
    Write-Host "Value of openWedA[1]: "$openWedA[1]; 

    if ($openWedA[0] -eq 0 -or $openWedA[0] -eq 'Closed') { 
     $ohsWed = "closed"; 
    } else { $ohsWed = $openWedA[0] + " to " + $openWedA[1]; } 

    Write-Host $srPRBN $retailer $srPRAN $ohsWed "on" $dsWed; 

} 

而且結果:

Value of openWed before split: 10:00–4:00 
Value of openWedA[0]: 10:00–4:00 
Value of openWedA[1]: 
Our hours for PizzaPlace are 10:00–4:00 to on Wednesday 

Value of openWed before split: 0 
Value of openWedA[0]: 0 
Value of openWedA[1]: 
Our hours for BigPharma are closed on Wednesday 

Value of openWed before split: 12:00-7:30 
Value of openWedA[0]: 12:00 
Value of openWedA[1]: 7:30 
Our hours for GreenHouse are 12:00 to 7:30 on Wednesday 

Value of openWed before split: 10:00-6:00 
Value of openWedA[0]: 10:00 
Value of openWedA[1]: 6:00 
Our hours for Portapoty are 10:00 to 6:00 on Wednesday 
+0

我看不出有什麼問題?你的意思是'0'的第二個記錄?那是因爲第二個記錄在wednsday列中有'0'... –

+1

他意味着第一個結果是'10:00-4:00'。它應該被拆分,以便'$ openWedA'每次都包含兩個元素,但它似乎不適用於那一個,而它對其他的元素卻有效。 – briantist

+0

Yeahhh,我總是錯過了。 –

回答

4

在這些項目的與空間都沒有連字符(U+002D)但是破折號U+2013

如果數據已從具有「automagical」格式(如Word)的文本處理器中複製過,您通常會看到此內容。

使用「標點符號,破折號」的Unicode類別進行匹配和拆分這兩種:

$openStr -split '\p{Pd}' 
+0

您修改的功能僅刪除空格。我認爲你的意思是把這個正則表達式放在'-split'中。但是我還會在'-split'正則表達式中包含'\ s'並完全擺脫這個函數。 – briantist