View Single Post
Old 05-23-2007   #6 (permalink)
Ryan Milligan


 
 

Re: split works much different than expected

If you're wondering why your original code didn't work, it's because
the -replace operator uses regular expressions, and "." is a special
character in regular expressions that means "match any character." So, when
you regex-replace "." with the empty string, you're replacing every
character in the string with nothing. You can escape it by using "\."
instead of just ".", but in this case, I'd recommend just using
String.Replace() as suggested by Brandon.

Also as Brandon suggested, a regular expression might serve you better here.
You could try something like this:

gc error_log | foreach {([regex]"(?<app>\w+) exited with error code
(?<error>\d+)\.").Match($_).Groups["error"].Value}

This will give you all the error codes in your file that are in this format.
You could also return a hashtable that includes the name of the app and the
error message -- I only included that to show that you can capture more
information this way than just the error code. Hope this helps.

-- Ryan Milligan

"Brandon Shell" <tshell.mask@mk.gmail.com> wrote in message
news:%23RuPoROnHHA.596@TK2MSFTNGP06.phx.gbl...
> $code = $code.replace(".",$null)
>
> "Frank" <Frank@discussions.microsoft.com> wrote in message
> news:62B74980-D884-4A8D-99AC-11003031F6CE@microsoft.com...
>> Thanks everyone for responding. My last question is, the string I get
>> left is:
>>
>> "1603." in variable $code.
>>
>> I want to remove the "." so I tried: $code = $code -replaced ".",""
>>
>> but I get a blank variable. Can someone tell me why?
>>
>> thanks,
>>
>>
>>
>>
>> "Jean" wrote:
>>
>>> > Hi,
>>> >
>>> > I am trying to get the error codes from a file but split seems to work
>>> > much
>>> > different than I expect. ie, my file error_log contains:
>>> >
>>> > cmd.exe exited on testserver with error code 1603.
>>> >
>>> > when I try to do a split ie.
>>> >
>>> > $testerr = get-content error_log | where($_ -match "error code"}
>>> > if ($testerr){
>>> > ($one,$two)=$testerr.split("error code")
>>> > "one: $one, two: $two"
>>> > }
>>> >
>>> > I get really strange output, like:
>>> >
>>> > one: ps, two: x . x : .......
>>> >
>>> > Can someone help with split?
>>> >
>>> > Thanks,
>>>
>>> See this thread :
>>>
>>>
>>> http://groups.google.com/group/micro...e96d7be3a45ff7
>>>
>>> When Split is used with one argument, argument is a Char not a String.
>>> To use a String as argument you could do something like:
>>>
>>> $testerr.Split([string[]]'error code',[StringSplitOptions]::None)
>>>
>>> Regards,
>>>
>>> --
>>> Jean - JMST
>>> Belgium
>>>
>>>
>>>

>



My System SpecsSystem Spec