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

は、両方の種類と一致して分割する「句読点、ダッシュ」Unicodeのカテゴリを使用しますか? '0'の2番目のレコードを意味しますか?それは2番目のレコードがwednsdayカラムに '0'を持つからです。 –

+1

彼は' 10:00-4:00'の最初の結果を意味します。 '$ openWedA'に2つの要素が含まれるように分割する必要がありましたが、他の要素とは異なり、その要素では機能しなかったようです。 – briantist

+0

うん、私はそれを全部逃した。 –

答えて

4

スペースを持つエントリではハイフン(U+002D)ではありません、 ダッシュU+2013

「自動」フォーマット(たとえばWordなど)のテキストプロセッサからデータがコピーされていると、通常これが表示されます。私はすべての問題が表示されない

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

変更した関数は空白を削除するだけです。あなたはその正規表現を '-split'に入れることを意図していたと思います。しかし、私は '-split'正規表現に' \ s'を含めて、その関数を完全に取り除きます。 – briantist

関連する問題