我有一个包含多个订单号的文本文件,每行一个。每个订单的长度为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
}
答案 0 :(得分:1)
您需要删除第一个字符,并在新字符串中删除第四个字符后面的所有内容:
Get-Content 'C:\temp\myorders.txt' | ForEach-Object {
$StoreNumber = $_.Remove(0, 1).Remove(4)
}
<强>结果强>:
0540
1171
2957
如果你需要跳过第二个字符0
,你也可以使用regex
执行此操作:
^\d0?(\d{4})
<强>的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是有用静态方法的一些示例。
快乐的编码!