इस सवाल के पार आया जब बाहर काम करने के लिए कैसे एक ही बात अपने आप को ऐसा करने के लिए कोशिश कर रहा।
क्या मैं के साथ के रूप में एक समाधान के रूप में था आया था इस प्रकार है:
$Filtered = $Table|Select-String -Pattern $ExcludeStrings -NotMatch -SimpleMatch
$FilteredArray = @()
$Filtered.Line | foreach {$split = $_ -split ';';
$tidied = $split -replace '@|{|}|^ ';
$obj = New-Object System.Object
$tidied|foreach {$obj|Add-Member -MemberType NoteProperty -Name ($_.split('=')[0]) -Value ($_.split('=')[1])
}
$FilteredArray += $obj
}
पहली पंक्ति बस मुझे सरणी है कि मैं Import-CSV
के माध्यम से मिला ही परिणाम रहा चाहता था पाने के लिए छानने दिखा रहा है।
दुर्भाग्य से, यह एक MatchInfo सरणी के साथ मुझे छोड़ देता है, प्रत्येक सरणी निम्न स्वरूप में होने के साथ:
@{Column1=Value1; Column2=Value2; Column3=Value3;}
यह अच्छी तरह से सब पर सीएसवी के लिए बाहर वापस निर्यात नहीं करता है, के रूप में।
तो, मैंने एक नया आउटपुट सरणी ($FilteredArray
) बनाने का विकल्प चुना।
मैं तो एक foreach लूप में Select-String
से matchinfo सरणी के Line
संपत्ति पहुंचाया, और प्रत्येक पंक्ति के लिए, मैं इसे सेमी-कोलन पर विभाजित, तो मैं @ {} वर्ण और उसके आगे रिक्त स्थान को हटा दें।
मैं तो एक नया System.Object
, तो पाइप एक और foreach लूप में tidied उत्पादन बनाने के लिए, obj में नए NotePropertys बनाते समय, उन्हें = चरित्र को ऊपर tidied उत्पादन में वर्तमान पंक्ति से, नामकरण और मूल्य जा रहा है शेष = चरित्र के बाद पाठ।
क्या मैं के साथ समाप्त होता है:
PS C:\Users\Graham> $obj
Column1 : Value1
Column2 : Value2
Column3 : Value3
और फ़िल्टर्ड सरणी की तरह दिखता है:
PS C:\Users\Graham> $FilteredArray[0..3]|Format-table
Column1 Column2 Column2
------- ------- -------
Value1 Value2 Value3
Value1 Value2 Value3
Value1 Value2 Value3
यह वास्तव में बहुत अच्छी तरह से काम करता है। मेरे पास पहले समान आदेश थे लेकिन एएनसीसी एसीआईआई निर्दिष्ट नहीं किया गया था, इसलिए यह मुझे अवांछित परिणाम खेलता है। दूसरे भाग को नई डेटा.csv फ़ाइल की तुलना किसी अन्य सीएसवी सूची से करने की आवश्यकता है जिसमें बहिष्करण किए जाने वाले बहिष्करण हैं। उपर्युक्त आदेश शायद काम करेगा, शायद मैं बहिष्करण सूची को केवल सरणी में प्राप्त कर सकता हूं और $ बहिष्करण 'इंस्टॉल नहीं किया गया' बदल सकता हूं? – user2284702
यदि आप दोनों CSV फ़ाइलों को खींचने के लिए आयात-सीएसवी का उपयोग करते हैं, तो आप ऑब्जेक्ट्स की एक सरणी के साथ हवाएं करते हैं जहां प्रत्येक ऑब्जेक्ट में CSV फ़ाइल में फ़ील्ड से संबंधित गुण होते हैं। तो आप इस '$ importedCsv1 की तरह कुछ कर सकते हैं जहां {$ csv1Field = $ _ फ़ील्ड; ($ importedCsv2 | कहां {$ _। फ़िल्टरफिल्ड -एक $ csv1 फ़ील्ड})। गणना -eq 0} ' –
$ csv | सिलेक्ट-स्ट्रिंग-नॉटमैच $ बहिष्करण | आउट-फ़ाइल $ होस्ट -Enc ascii data.csv फ़ाइल से सभी बहिष्करण को हटाने के लिए काम करता है लेकिन यह हटाए गए प्रत्येक मैच के लिए शीर्ष पर एक खाली पंक्ति छोड़ देता है। कोई विचार? – user2284702