2013-08-31 7 views
5

लिनक्स शेयर में मैप किए गए ड्राइव के साथ काम करते समय, फ़ाइल नाम केस संवेदनशील होते हैं। पावरशेल इसे अपेक्षित रूप से संभालता है, लेकिन मैं आउटपुट को "सी" लोकेल में इस्तेमाल किए गए सॉर्ट ऑर्डर के समान तरीके से सॉर्ट करना चाहता हूं, जिसका मतलब है कि यू +0000 से आरोही क्रम में वर्ण मूल्य द्वारा क्रमबद्ध करना यू +ऑल्टर सॉर्ट-ऑब्जेक्ट व्यवहार

PS > gci Z:\foo | sort -casesensitive 
xyz 
Xyz 
XYZ 
yZ 
YZ 

आउटपुट वांछित: 10FFFF

समस्या उदाहरण देकर स्पष्ट करने (जैसे '0foo' 'फू' और 'फू' से पहले 'बार' और 'बार' 'foo' से पहले आता है से पहले आता है आता है)

XYZ 
Xyz 
YZ 
xyz 
yZ 

मैंने वर्तमान थ्रेड के संस्कृति चर को [System.Globalization.CultureInfo]::InvariantCulture पर सेट करने का प्रयास किया , लेकिन मैं कोई सफलता मिली:

$thrd = [Threading.Thread]::CurrentThread 
$thrd.CurrentCulture = [Globalization.CultureInfo]::InvariantCulture 
$thrd.CurrentUICulture = $thrd.CurrentCulture 

Am मैं भी करीब जब मुझे लगता है यह संस्कृति की जानकारी के साथ क्या करना है, या मैं ट्रैक से बाहर वास्तव में दूर कर रहा हूँ? क्या किसी को कोई विचार है कि मुझे कहां से शुरू करना चाहिए? मुझे लगता है कि मुझे अस्थायी रूप से एक संस्कृतिइन्फो इंस्टॉलेशन बनाने की ज़रूरत है जिसमें मेरा इच्छित व्यवहार है, लेकिन जब तक तुलनाइन्फो जाता है, तब तक केवल गेटर्स प्राप्त होते हैं, उल्लेख नहीं किया जाता है कि मैं तुलनात्मक रूप से तुलना करने के बारे में अनिश्चित हूं। सॉर्ट-ऑब्जेक्ट कॉम्पैयर फ़ंक्शन PowerShell फ़ंक्शंस का उपयोग करने की आवश्यकता है। या यह प्रभावी ढंग से खो गया कारण है क्योंकि यह संभव नहीं है?

संपादित

कम से कम, यह पहली बार अपरकेस वर्णों के साथ सॉर्ट करने के लिए, XYZ, XYZ, xyz, YZ, YZ में के रूप में संभव हो सकता है?

+1

'क्रमसंख्या' नेट कि उनके कोड बिंदु मूल्यों पर आधारित वर्ण तुलना में तुलना है (देखें (http://stackoverflow.com/a/492885/2495 भी [InvariantCulture और क्रमसंख्या स्ट्रिंग तुलना के बीच अंतर]))। [मितुल का जवाब] [http://stackoverflow.com/a/18544765/2495) ['[स्ट्रिंगकंपियर] :: साधारण *] (http://msdn.microsoft.com/en-us/library/system.stringcomparer के साथ .ordinal.aspx) सबसे अच्छा विकल्प की तरह दिखता है। –

उत्तर

7

मैंने sort-object विधि को बदलने के लिए कोई तरीका नहीं है, लेकिन काम नहीं कर रहा है, तो मैंने वास्तव में यह पता लगाने की कोशिश की। लेकिन कुछ ऐसा ही मैं स्ट्रिंग कॉम्पैयर स्थिर वर्ग का उपयोग करके पूरा करने में सक्षम था जैसा कि इस msdn example में प्रदर्शित किया गया था।

अपने अंतिम भाग का जवाब करने के लिए,

At the very least, would it be possible to sort with uppercase characters first, as in XYZ, Xyz, xyz, YZ, yZ? 

[System.StringComparer]::InvariantCultureIgnoreCase अपने जवाब है। मतभेदों को देखने के लिए मैंने नीचे दिए गए सभी अलग-अलग संस्करणों का प्रयास किया है।

$arr = "0foo","xyz","Xyz","YZ","yZ","XYZ","Foo","bar" 
$list = New-Object System.Collections.ArrayList 
$list.AddRange($arr) 

Write-host "CurrentCulture" 
$list.Sort([System.StringComparer]::CurrentCulture); 
$list 
<# --------CurrentCulture-------- 
CurrentCulture 
0foo 
bar 
Foo 
xyz 
Xyz 
XYZ 
yZ 
YZ 
#> 

Write-Host "CurrentCultureIgnoreCase" 
$list.Sort([System.StringComparer]::CurrentCultureIgnoreCase); 
$list 

<# --------CurrentCultureIgnoreCase-------- 
CurrentCultureIgnoreCase 
0foo 
bar 
Foo 
XYZ 
Xyz 
xyz 
YZ 
yZ 
#> 

Write-Host "InvariantCulture" 
$list.Sort([System.StringComparer]::InvariantCulture); 
$list 
<# --------InvariantCulture-------- 
InvariantCulture 
0foo 
bar 
Foo 
xyz 
Xyz 
XYZ 
yZ 
YZ 
#> 

Write-Host "InvariantCultureIgnoreCase" 
$list.Sort([System.StringComparer]::InvariantCultureIgnoreCase); 
$list 

<# --------InvariantCultureIgnoreCase-------- 

InvariantCultureIgnoreCase 
0foo 
bar 
Foo 
XYZ 
Xyz 
xyz 
YZ 
yZ 
#> 

Write-Host "Ordinal" 
$list.Sort([System.StringComparer]::Ordinal); 
$list 

<# --------Ordinal-------- 
Ordinal 
0foo 
Foo 
XYZ 
Xyz 
YZ 
bar 
xyz 
yZ 
#> 

Write-Host "OrdinalIgnoreCase" 
$list.Sort([System.StringComparer]::OrdinalIgnoreCase); 
$list 

<# --------OrdinalIgnoreCase-------- 
OrdinalIgnoreCase 
0foo 
bar 
Foo 
xyz 
XYZ 
Xyz 
yZ 
YZ 
#> 
+0

बहुत अच्छी तरह से। मैं उम्मीद कर रहा था कि मुझे ऐसा कुछ करने की ज़रूरत नहीं है, लेकिन स्पष्ट रूप से पॉवरशेल में भी सॉर्टिंग का विचार सीमित है। आपका बहुत बहुत धन्यवाद। –

संबंधित मुद्दे