2016-06-07 103 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