2016-11-17 73 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