从文本文件

时间:2016-06-07 11:21:55

标签: arrays powershell

我有一个包含多个订单号的文本文件,每行一个。每个订单的长度为10个字符,第一个字符始终为“1”,“商店编号”为4位长,并且始终从第2个字符开始,例如1054003863,所以“0540”是商店编号,其次是1171,然后是2957。

1054003863
1117103803
1295704378

我正在尝试将此文本文件中每行的商店编号提取到变量中,然后根据该变量执行任务。以下是我为实现这一目标所做的尝试之一:

$OrderList = Get-Content C:\temp\myorders.txt 
Foreach ($Order in $OrderList)
{
$StoreNumber = $Order | Select-object {$_.Remove(4,6)}
.
.
then the rest of the script before moving to the next element in the array
}  

2 个答案:

答案 0 :(得分:1)

您需要删除第一个字符,并在新字符串中删除第四个字符后面的所有内容:

Get-Content 'C:\temp\myorders.txt' | ForEach-Object {
    $StoreNumber = $_.Remove(0, 1).Remove(4)
}

<强>结果

0540
1171
2957

如果你需要跳过第二个字符0,你也可以使用regex执行此操作:

^\d0?(\d{4})

Regular expression visualization

<强>的PowerShell:

Get-Content 'C:\temp\myorders.txt' | ForEach-Object {
    $StoreNumber = [regex]::Match($_, '^\d0?(\d{4})').Groups[1].Value
}

<强>结果

5400
1171
2957

答案 1 :(得分:1)

最简单的方法是使用PowerShell在.NET中实现的事实,这样您就可以轻松访问所有.NET方法。 PowerShell字符串可以像使用. - 运算符的C#或VB.NET一样访问其.NET methods。例如,"1054003863".Substring(2,4)会产生5400

所以你要找的那条线是

$StoreNumber = $Order.Substring(2,4)

根据您的示例,商店编号从第3个位置开始。如果它从第二个位置开始,只需使用$Order.Substring(1,4)

额外提示(与您的特定问题无关):您还可以使用类型名称的静态方法:

[System.Math]::Sqrt(2)

产生2的平方根。System.Math是typename,Sqrt是静态方法。 Here是有用静态方法的一些示例。

快乐的编码!

相关问题