【问题标题】:Powershell not splitting string returned from functionPowershell不拆分从函数返回的字符串
【发布时间】:2016-11-18 01:40:01
【问题描述】:

我正在尝试导入一个 CSV,其中包含这些虚构地点开放的一周中的每一天的虚构地点和时间。

时间为 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...
  • 他的意思是10:00-4:00的第一个结果。它应该被拆分,以便 $openWedA 每次都包含两个元素,但似乎它对那个不起作用,而对其他元素起作用。
  • 是的,我完全错过了。

标签: windows powershell


【解决方案1】:

带有空格的条目中的 不是连字符(U+002D),而是破折号U+2013

如果数据是从具有“自动”格式的文本处理器(例如 Word)复制的,您通常会看到这一点。

使用“标点符号,破折号” unicode 类别来匹配和拆分两种类型:

$openStr -split '\p{Pd}'

【讨论】:

  • 你修改的函数只是去掉了空格。我认为您打算将该正则表达式放在-split 中。但我也会在 -split 正则表达式中包含 \s 并完全摆脱该功能。
猜你喜欢
  • 2020-07-19
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-11
相关资源
最近更新 更多