2012-11-13 10 views
9

मान लीजिए मैं सामग्रीजब श्रृंखलाबद्ध या PowerShell में हियरडॉक का उपयोग कर नई-पंक्तियों को बचाना

line 1 
line 2 

के साथ एक दस्तावेज़ c:\temp\temp.txt है और मैं निम्नलिखित समारोह

PS>function wrapit($text) { 
@" 
---Start--- 
$text 
---End--- 
"@ 
} 

फिर PS> wrapit((Get-Content c:\temp\temp.txt))

इच्छा उत्पादन चल रहा है बनाने

---Start--- 
line 1 line 2 
---End--- 

मैं न्यूलाइन कैसे संरक्षित करूं? बनाम इंटरपोलिंग में मदद नहीं करता है।

I found this related question, लेकिन यहां वे एक स्ट्रिंग सरणी का उपयोग कर रहे हैं। मैं एक स्ट्रिंग का उपयोग कर रहा हूं जिसमें इसमें न्यूलाइन वर्ण हैं (यदि आप बिना किसी समझौते के सीधे स्ट्रिंग को आउटपुट करते हैं तो आप उन्हें देख सकते हैं और $text | gm पुष्टि करता है कि मैं एक स्ट्रिंग के साथ काम कर रहा हूं, एक सरणी नहीं)। मैं दुनिया में सभी स्ट्रिंग पार्सिंग को जगह में हथौड़ा लगाने के लिए कर सकता हूं, लेकिन ऐसा लगता है कि मैं एक गोल छेद में एक वर्ग चरम पर टक्कर लगी होगी। अवधारणा क्या है जो मुझे याद आ रही है?

उत्तर

10

एक आसान तरीका से अधिक [system.io.file]::ReadAllText('c:\temp\temp.txt') का उपयोग कर फ़ाइल को पढ़ने के लिए किया गया है:

wrapit((Get-Content c:\temp\temp.txt | out-string)) 

अब स्पष्टीकरण: यहां-तार @ "" स्ट्रिंग की तरह व्यवहार करते हैं "" और परिणाम चर विस्तार में PowerShell व्यवहार के कारण है। बस कोशिश:

$a = Get-Content c:\temp\temp.txt 
"$a" 

अपनी टिप्पणी के बारे में:

$a | Get-Member 
TypeName: System.String 
... 

लेकिन

Get-Member -InputObject $a 
TypeName: System.Object[] 
... 

पहले उत्तर ठीक है (यह तार प्राप्त करता है)। यह हर बार System.string दोहराना नहीं है। दूसरे में यह पैरामीटर के रूप में एक सरणी प्राप्त करता है।

+0

यदि मैं सही हूं, तो यह ज्यादातर प्रकार के दबाव का मामला प्रतीत होता है। जो ठीक है, मैं सिर्फ उलझन में हूं कि धरती पर 'गेट-सदस्य' ने मुझे बताया कि यह प्रकार 'सिस्टम' था।स्ट्रिंग ' –

+0

मैं आपकी टिप्पणी का उत्तर देने के लिए अपना उत्तर संपादित करता हूं। – JPBlanc

+0

ओहोह, यह सही है, मैं हमेशा भूल जाता हूं कि पाइप कैसे करता है। डैंग। ज्यादातर समय इसका अधिकार है, इस बार यह मुझे घंटों तक उलझन में डाल दिया। –

6

एक का बेटा ...

जांच करने पर ऐसा लगता है कि Get-Content रिटर्न एक स्ट्रिंग सरणी। डिफ़ॉल्ट वर्ण ' ' पर शामिल होने से डिफ़ॉल्ट रूप से एक स्ट्रिंग को किसने मजबूर किया है।

वास्तव में परेशान क्या है कि परिणाम get-member द्वारा स्ट्रिंग में क्यों पहुंचे हैं। कोई भी जानता है कि ऐसा क्यों होगा? मुद्दा जब तक मैं स्पष्ट रूप से जाँच की Get-Type

किसी भी मामले में स्पष्ट नहीं था, समाधान तुम क्या चाहते करने के लिए Get-Content

+0

हाँ यह स्वचालित रूप से सरणी को अनचाहे करता है और सरणी के _type_ के प्रकार को दिखाता है, अगर यह समझ में आता है। – Nacht

+0

'var.gettype() 'का उपयोग करने के लिए कहें कि वास्तव में एक प्रकार का चर – Nacht

+1

' गेट-कंटेंट-ड्रा 'चाल भी करता है। इसके लिए पीएस> = 3. – davidhigh