2016-11-17 3 views
1

Я пытаюсь импортировать CSV, который содержит вымышленные места и часы каждый день недели, эти вымышленные места открыты.Powershell not splitting string возвращается из функции

Часы от 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'? То потому что вторая запись имеет '0' в столбце wednaday ... –

+1

Он имеет в виду первый результат с' 10: 00-4: 00'. Он должен был быть разделен так, чтобы '$ openWedA' содержал два элемента с каждым разом, но похоже, что он не работал на этом, тогда как на других. – briantist

+0

Да, я пропустил это. –

ответ

4

в записях с пробелами не дефис (U+002D), но штрихи ())

Обычно вы увидите это, если данные были скопированы из текстового процессора с «автоматическим» форматированием (например, Word).

Используйте «пунктуация, тире» категории Юникода, чтобы соответствовать и разделить оба вида:

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

Функция, которую вы модифицировали, просто удаляет пробелы. Я думаю, вы хотели поставить это регулярное выражение в '-split'. Но я бы также включил '\ s' в regex' -split' и полностью избавился от этой функции. – briantist