2013-05-08 9 views
11

मैं एक सीमांकक है, जो एक स्ट्रिंग है के साथ स्ट्रिंग थूकने की कोशिश कर रहा हूँ में स्ट्रिंग द्वारा स्ट्रिंग विभाजित करने के लिए कैसे:Powershell

$string = "5637144576, messag<>est<<>>5637145326, 1<<>>5637145328, 0" 
$separator = "<<>>" 
$string.Split($separator) 

बंटवारे के परिणाम के रूप में मैं:

5637144576, messag 

est 



5637145326, 1 



5637145328, 0 

इसके बजाय

5637144576, messag<>est 
5637145326, 1 
5637145328, 0 

जब मैं अतिभारित विभाजन जो स्ट्रिंग [] को स्वीकार करता है इस्तेमाल करने की कोशिश:

$string = "5637144576, messag<>est<<>>5637145326, 1<<>>5637145328, 0" 
$separator = @("<<>>") 
$string.Split($separator) 

लेकिन मैं अगले त्रुटि मिलती है:

Cannot convert argument "0", with value: "System.Object[]", for "Split" to type "System.Char[]": "Cannot convert value "<<>>" to type "System.Char". Error: "String must be exactly one character long."" 

कोई जानता है स्ट्रिंग द्वारा स्ट्रिंग विभाजित करने के लिए कैसे करता है?

+0

विभाजक '<<>>' <> 'के साथ विभाजित क्यों होना चाहिए? –

+0

विभाजक <<>><> के साथ विभाजित क्यों होना चाहिए? - यह एक समस्या है जिसे मैंने सामना किया और – Ievgen

+0

को हल करने का प्रयास किया है, क्या आप _'> '_ के चरित्र के साथ विभाजित करना चाहते हैं? –

उत्तर

15

-split ऑपरेटर विभाजित करने के लिए स्ट्रिंग का उपयोग करता है, Split() की तरह एक chararray के बजाय:

$string = "5637144576, messag<>est<<>>5637145326, 1<<>>5637145328, 0" 
$separator = "<<>>" 
$string -split $separator 

5637144576, messag<>est 
5637145326, 1 
5637145328, 0 

आप एक तार के साथ Split() विधि का उपयोग करना चाहते हैं, तो आप $seperator जरूरत है एक तत्व के साथ एक stringarray होने के लिए , और एक स्ट्रिंग्सप्लिप्शन मान भी निर्दिष्ट करें। आप इसकी परिभाषा देख कर इसकी देख सकते हैं:

$string.Split 

OverloadDefinitions                     
-------------------                     
string[] Split(Params char[] separator)                
string[] Split(char[] separator, int count)               
string[] Split(char[] separator, System.StringSplitOptions options)         
string[] Split(char[] separator, int count, System.StringSplitOptions options)      

#This one 
string[] Split(string[] separator, System.StringSplitOptions options)  
string[] Split(string[] separator, int count, System.StringSplitOptions options) 


$string = "5637144576, messag<>est<<>>5637145326, 1<<>>5637145328, 0" 
$separator = [string[]]@("<<>>") 
$string.Split($separator, [System.StringSplitOptions]::RemoveEmptyEntries) 

5637144576, messag<>est 
5637145326, 1 
5637145328, 0 

संपादित करें: जैसा कि @RomanKuzmin ने कहा, -split डिफ़ॉल्ट रूप से regex-पैटर्न का उपयोग विभाजन। तो विशेष पात्रों से बचने के लिए जागरूक रहें (उदा। . जो रेगेक्स में "कोई चरित्र" है)।

$separator = "<<>>" 
$string -split $separator, 0, "simplematch" 

पढ़ें -splithere अधिक के बारे में: आप को निष्क्रिय करने के लिए regex मिलान की तरह simplematch मजबूर कर सकता है।

+0

'est' संरक्षित किया जाना चाहिए।वह '<<>> '(यानी <' and '>') –

+0

sry के किसी भी चरित्र द्वारा विभाजित करना चाहता है, जो आप चाहते थे आउटपुट के नमूने में नहीं देखा ^^ अद्यतन उत्तर –

+0

क्या आप जानते हैं, है केवल खाली स्ट्रिंग नहीं लौटने के लिए संभव है? – Ievgen

1

Split विधि का उपयोग करने के बाद, आप split ऑपरेटर का उपयोग कर सकते हैं। तो अपने कोड इस तरह होगा:

$string -split '<<>>' 
0

निम्नलिखित होना चाहिए कि तुम क्या जरूरत है:

$string -Split $separator 

यह पैदा करता है:

5637144576, messag<>est 
5637145326, 1 
5637145328, 0 
0

कभी कभी PowerShell वास्तव में सी # की तरह और अन्य लोगों को देखता है, अच्छी तरह से आप जानते हैं ...

इसका उपयोग इस प्रकार भी किया जा सकता है:

# A dummy text file 
$text = @' 
abc=3135066977,8701416400 

def=8763026853,6433607660 

xyz=3135066977,9878763344 
'@ -split [Environment]::NewLine,[StringSplitOptions]"RemoveEmptyEntries" 

"`nBefore `n------`n" 

$text 

"`nAfter `n-----`n" 

# Do whatever with this 
foreach ($line in $text) 
{ 
    $line.Replace("3135066977","6660985845") 
}