.net - PowerShell में स्ट्रिंग शून्य या खाली होने पर मैं कैसे जांच सकता हूं?





string null (10)


ध्यान दें कि "अगर ($ str)" और "IsNullOrEmpty" परीक्षण सभी मामलों में तुलनात्मक रूप से काम नहीं करते हैं: $ str = 0 का असाइनमेंट दोनों के लिए झूठा उत्पादन करता है, और इच्छित प्रोग्राम अर्थशास्त्र के आधार पर, यह आश्चर्यचकित हो सकता है।

क्या PowerShell में स्ट्रिंग शून्य या खाली है या नहीं, यह जांचने के लिए कोई अंतर्निहित IsNullOrEmpty फ़ंक्शन है?

मुझे अब तक यह नहीं मिला और यदि कोई अंतर्निहित तरीका है, तो मैं इसके लिए कोई फ़ंक्शन नहीं लिखना चाहता हूं।




निजी तौर पर, मैं एक सफेद जगह ($ एसटीआर 3) को 'खाली नहीं' के रूप में स्वीकार नहीं करता हूं।

जब एक वेरिएबल जिसमें केवल व्हाइटस्पेस होते हैं तो पैरामीटर पर पास किया जाता है, यह अक्सर त्रुटि देगा कि पैरामीटर मान '$ null' नहीं हो सकता है, यह कहने के बजाय कि यह एक व्हाइटस्पेस नहीं हो सकता है, कुछ निकालें आदेश एक रूट फ़ोल्डर को हटा सकते हैं उपफोल्डर अगर उपफोल्डर नाम एक "सफेद स्थान" है, तो कई कारणों से एक स्ट्रिंग को स्वीकार करने के लिए सभी कारणों में व्हाइटस्पेस शामिल नहीं है।

मुझे लगता है कि इसे पूरा करने का यह सबसे अच्छा तरीका है:

$STR1 = $null
IF ([string]::IsNullOrWhitespace($STR1)){'empty'} else {'not empty'}

खाली

$STR2 = ""
IF ([string]::IsNullOrWhitespace($STR2)){'empty'} else {'not empty'}

खाली

$STR3 = " "
IF ([string]::IsNullOrWhitespace($STR3)){'empty !! :-)'} else {'not Empty :-('}

खाली !! :-)

$STR4 = "Nico"
IF ([string]::IsNullOrWhitespace($STR4)){'empty'} else {'not empty'}

खाली नहीं




शुद्ध पावरशेल तरीके से इसे पूरा करने का एक और तरीका ऐसा कुछ करना होगा:

("" -eq ("{0}" -f $val).Trim())

यह शून्य, खाली स्ट्रिंग और व्हाइटस्पेस के लिए सफलतापूर्वक मूल्यांकन करता है। मैं शून्य को संभालने के लिए पास किए गए मान को खाली स्ट्रिंग में स्वरूपित कर रहा हूं (अन्यथा एक नल ट्रिम कहलाता है जब त्रुटि उत्पन्न होती है।) फिर रिक्त स्ट्रिंग के साथ समानता का मूल्यांकन करें। मुझे लगता है कि मैं अभी भी IsNullOrWhiteSpace पसंद करता हूं लेकिन यदि आप इसे करने का एक और तरीका ढूंढ रहे हैं, तो यह काम करेगा।

$val = null    
("" -eq ("{0}" -f $val).Trim())
>True
$val = "      "
("" -eq ("{0}" -f $val).Trim())
>True
$val = ""
("" -eq ("{0}" -f $val).Trim())
>True
$val = "not null or empty or whitespace"
("" -eq ("{0}" -f $val).Trim())
>False

संपादित करें: बोरियत के फिट में, मैंने कुछ के साथ खेला और इसे छोटा बना दिया (यद्यपि अधिक गूढ़)

!!(("$val").Trim())

या

!(("$val").Trim())

आप जो करने की कोशिश कर रहे हैं उसके आधार पर




आप लोग इसे बहुत कठिन बना रहे हैं। पावरशेल इस सुंदर ढंग से संभालता है उदाहरण के लिए:

> $str1 = $null
> if ($str1) { 'not empty' } else { 'empty' }
empty

> $str2 = ''
> if ($str2) { 'not empty' } else { 'empty' }
empty

> $str3 = ' '
> if ($str3) { 'not empty' } else { 'empty' }
not empty

> $str4 = 'asdf'
> if ($str4) { 'not empty' } else { 'empty' }
not empty

> if ($str1 -and $str2) { 'neither empty' } else { 'one or both empty' }
one or both empty

> if ($str3 -and $str4) { 'neither empty' } else { 'one or both empty' }
neither empty



मेरे पास एक पावरशेल स्क्रिप्ट है जिसे मुझे कंप्यूटर पर चलाना है, इसलिए इसकी तारीख [स्ट्रिंग] :: IsNullOrWhiteSpace () है, इसलिए मैंने अपना खुद लिखा है।

function IsNullOrWhitespace($str)
{
    if ($str)
    {
        return ($str -replace " ","" -replace "`t","").Length -eq 0
    }
    else
    {
        return $TRUE
    }
}



# cases
$x = null
$x = ''
$x = ' '

# test
if ($x -and $x.trim()) {'not empty'} else {'empty'}
or
if ([string]::IsNullOrWhiteSpace($x)) {'empty'} else {'not empty'}



लंबाई की जांच करें। यदि वस्तु मौजूद है, तो इसकी लंबाई होगी।

शून्य वस्तुओं की कोई लंबाई नहीं है, अस्तित्व में नहीं है, और जांच नहीं की जा सकती है।

स्ट्रिंग ऑब्जेक्ट की लंबाई है।

सवाल यह था: IsNull या IsEmpty, IsNull या IsEmpty या IsWhiteSpace नहीं है

#Null
$str1 = $null
$str1.length
($str1 | get-member).TypeName[0]
# Returns big red error

#Empty
$str2 = ""
$str2.length
($str2 | get-member).TypeName[0]
# Returns 0

## Whitespace
$str3 = " "
$str3.length
($str3 | get-member).TypeName[0]
## Returns 1 



आप IsNullOrEmpty स्थिर विधि का उपयोग कर सकते हैं:

[string]::IsNullOrEmpty(...)



[string]::IsNullOrEmpty अलावा [string]::IsNullOrEmpty को शून्य या खाली की जांच करने के लिए आप एक बूलियन को स्पष्ट रूप से या बूलियन अभिव्यक्तियों में एक स्ट्रिंग डाल सकते हैं:

$string = $null
[bool]$string
if (!$string) { "string is null or empty" }

$string = ''
[bool]$string
if (!$string) { "string is null or empty" }

$string = 'something'
[bool]$string
if ($string) { "string is not null or empty" }

आउटपुट:

False
string is null or empty

False
string is null or empty

True
string is not null or empty



यदि आप पोस्ट की गई कुछ अलग-अलग विधियों के प्रदर्शन में रूचि रखते हैं:

इस जेएसपीआरएफ परीक्षण (सबसे तेज़ से धीमे से आदेश दिया गया) के आधार पर सबसे तेज़ तरीके यहां दिए गए हैं।

जैसा कि आप देख सकते हैं, प्रदर्शन के संदर्भ में पहले दो विधियां अनिवार्य रूप से तुलनीय हैं, जबकि String.prototype को बदलने से प्रदर्शन के मामले में सबसे धीमी गति से है।

// 10,889,187 operations/sec
function capitalizeFirstLetter(string) {
    return string[0].toUpperCase() + string.slice(1);
}

// 10,875,535 operations/sec
function capitalizeFirstLetter(string) {
    return string.charAt(0).toUpperCase() + string.slice(1);
}

// 4,632,536 operations/sec
function capitalizeFirstLetter(string) {
    return string.replace(/^./, string[0].toUpperCase());
}

// 1,977,828 operations/sec
String.prototype.capitalizeFirstLetter = function() {
    return this.charAt(0).toUpperCase() + this.slice(1);
}







.net string powershell null