2016-06-07 136 views
3

我有一个包含多个订单号的文本文件,每行一个。每个订单的长度为10个字符,第一个字符始终为“1”,而“存储号码”为4位长,并始终从第二个字符开始,例如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

等一下,第一行的商店号不是“0540”吗? –

+0

是的,你是对的 - 我的错误 – JDGEEK

回答

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

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

所以,你正在寻找的行会根据你的榜样,在店号开始在3号位

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

是。如果从第二个位置开始,只需使用$Order.Substring(1,4)

额外的小费(无关您的具体问题):

[System.Math]::Sqrt(2) 

产生的2 System.Math平方根:您还可以通过使用这样的类型名称使用.NET类型的所谓的静态方法是typename,而Sqrt是静态方法。 Here是有用的静态方法的一些例子。

快乐编码!

+0

嗨,谢谢,但我试过 – JDGEEK

+0

@JDGEEK:你试过什么? – TToni

+0

嗨,我最初尝试'$ StoreNumber = $ Order.Substring(2,4)',但不断收到和错误:“方法调用失败,因为[系统。Object []]不包含名为'Substring'的方法。“ – JDGEEK

相关问题