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




string null (7)

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

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


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

[string]::IsNullOrEmpty(...)

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

> $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

निजी तौर पर, मैं एक सफेद जगह ($ एसटीआर 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'}

खाली नहीं


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

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

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

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

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

सवाल यह था: 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 

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

("" -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())

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


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

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





null