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

그래, 나는 완전히 그것을 놓쳤다. –

답변

4

공백 항목에 하이픈 (U+002D) 아니다, 그러나 대시 (U+2013)

데이터가 "자동"형식 (예 : Word) 인 텍스트 프로세서에서 복사 된 경우 일반적으로 표시됩니다.

일치하도록 "구두점, 대시"유니 코드 범주를 사용하여 두 종류의 분할 :

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

수정 한 함수는 공백을 제거합니다. 나는 당신이'-split'에 그 정규 표현식을 넣으려고했다고 생각합니다. 하지만'-split' 정규 표현식에'\ s'를 포함시키고 그 함수를 모두 제거 할 것입니다. – briantist

관련 문제