![]() |
![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
| Welcome to Windows Vista Forums. Our forum is dedicated to helping you find solutions with any problems, errors or issues you are experiencing with Windows Vista. The Vista forum also covers news and updates and has an extensive Windows Vista tutorial section that covers a wide range of tips and tricks. |
| |||||||
![]() |
| |
| | #1 (permalink) |
| Guest | Looking for something better than split and join I have a string that looks like "/vol/InfraDev_AppDev03/VHD.lun" I need to do something so I can get $vol = "/vol/InfraDev_AppDev03/" $lun = "VHD.lun" My first solution (which works but I just think its not so elegant) is to split the string on "/" and then do a join on "/" with the first two elements in the result of the split and set that to $vol, and then leave the third element as $lun. I am no regex kung fu master, but I was wondering if there was a slightly more elegant way to solve this problem. Thanks, Andy |
My System Specs![]() |
| | #2 (permalink) |
| Guest | Re: Looking for something better than split and join Hi Andy, An alternative is to use the split-path cmdlet: PS > split-path "/vol/InfraDev_AppDev03/VHD.lun" -leaf VHD.lun The problem is that split-path replaces each slash with a backslash in case of this: PS > split-path "/vol/InfraDev_AppDev03/VHD.lun" -Parent \vol\InfraDev_AppDev03 A safer solution is a combination of substring() and lastIndexOf() methods: PS > $p.substring($p.lastIndexOf("/")+1) VHD.lun PS > $p.substring(0,$p.lastIndexOf("/")+1) /vol/InfraDev_AppDev03 --- Shay Levy Windows PowerShell MVP http://blogs.microsoft.co.il/blogs/ScriptFanatic PowerShell Toolbar: http://tinyurl.com/PSToolbar A> I have a string that looks like "/vol/InfraDev_AppDev03/VHD.lun" I A> need to do something so I can get A> A> $vol = "/vol/InfraDev_AppDev03/" A> $lun = "VHD.lun" A> My first solution (which works but I just think its not so elegant) A> is to split the string on "/" and then do a join on "/" with the A> first A> two elements in the result of the split and set that to $vol, and A> then A> leave the third element as $lun. A> I am no regex kung fu master, but I was wondering if there was a A> slightly more elegant way to solve this problem. A> A> Thanks, A> A> Andy A> |
My System Specs![]() |
| | #3 (permalink) |
| Guest | Re: Looking for something better than split and join On Oct 21, 9:28*am, Shay Levy [MVP] <n...@xxxxxx> wrote: Quote: > Hi Andy, > > An alternative is to use the split-path cmdlet: > > PS > split-path "/vol/InfraDev_AppDev03/VHD.lun" -leaf > VHD.lun > > The problem is that split-path replaces each slash with a backslash in case > of this: > > PS > split-path "/vol/InfraDev_AppDev03/VHD.lun" -Parent > \vol\InfraDev_AppDev03 > > A safer solution is a combination of substring() and lastIndexOf() methods: > > PS > $p.substring($p.lastIndexOf("/")+1) > VHD.lun > > PS > $p.substring(0,$p.lastIndexOf("/")+1) > /vol/InfraDev_AppDev03 > > --- > Shay Levy > Windows PowerShell MVPhttp://blogs.microsoft.co.il/blogs/ScriptFanatic > PowerShell Toolbar:http://tinyurl.com/PSToolbar > > A> I have a string that looks like "/vol/InfraDev_AppDev03/VHD.lun" I > A> need to do something so I can get > A> > A> $vol = "/vol/InfraDev_AppDev03/" > A> $lun = "VHD.lun" > A> My first solution (which works but I just think its not so elegant) > A> is to split the string on "/" and then do a join on "/" with the > A> first > A> two elements in the result of the split and set that to $vol, and > A> then > A> leave the third element as $lun. > A> I am no regex kung fu master, but I was wondering if there was a > A> slightly more elegant way to solve this problem. > A> > A> Thanks, > A> > A> Andy > A> Andy |
My System Specs![]() |
| | #4 (permalink) |
| Guest | Re: Looking for something better than split and join Hi Andy, Shay levy has already answered your question. I paste a more tricky way to solve your problem: PS C:\> $s = "/vol/InfraDev_AppDev03/VHD.lun" PS C:\> $vol, $lun = ($s -replace '/([^/]*)$',"/`n`$1").split("`n") PS C:\> $vol /vol/InfraDev_AppDev03/ PS C:\> $lun VHD.lun The core of my code is ($s -replace '/([^/]*)$',"/`n`$1").split("`n"). The regular expression inserts an new line character after the last slash. Then split() splits the string using new line as the separator. Finally, assign the two parts returned from the split() to the variable vol and lun separately. Best wishes, Tao Ma "Andy" <andy@xxxxxx-powershell.com> ???? news:1f1cd9f8-1c44-4666-87ed-562e4f9f6d37@xxxxxx On Oct 21, 9:28 am, Shay Levy [MVP] <n...@xxxxxx> wrote: Quote: > Hi Andy, > > An alternative is to use the split-path cmdlet: > > PS > split-path "/vol/InfraDev_AppDev03/VHD.lun" -leaf > VHD.lun > > The problem is that split-path replaces each slash with a backslash in > case > of this: > > PS > split-path "/vol/InfraDev_AppDev03/VHD.lun" -Parent > \vol\InfraDev_AppDev03 > > A safer solution is a combination of substring() and lastIndexOf() > methods: > > PS > $p.substring($p.lastIndexOf("/")+1) > VHD.lun > > PS > $p.substring(0,$p.lastIndexOf("/")+1) > /vol/InfraDev_AppDev03 > > --- > Shay Levy > Windows PowerShell MVPhttp://blogs.microsoft.co.il/blogs/ScriptFanatic > PowerShell Toolbar:http://tinyurl.com/PSToolbar > > A> I have a string that looks like "/vol/InfraDev_AppDev03/VHD.lun" I > A> need to do something so I can get > A> > A> $vol = "/vol/InfraDev_AppDev03/" > A> $lun = "VHD.lun" > A> My first solution (which works but I just think its not so elegant) > A> is to split the string on "/" and then do a join on "/" with the > A> first > A> two elements in the result of the split and set that to $vol, and > A> then > A> leave the third element as $lun. > A> I am no regex kung fu master, but I was wondering if there was a > A> slightly more elegant way to solve this problem. > A> > A> Thanks, > A> > A> Andy > A> Andy |
My System Specs![]() |
| | #5 (permalink) |
| Guest | Re: Looking for something better than split and join Quote: > > The problem is that split-path > replaces each slash with a > backslash in case of this: > > PS > split-path "/vol/InfraDev_AppDev03/VHD.lun" -Parent > \vol\InfraDev_AppDev03 > Perhaps do it the same way in any Windows process! So using the _automation_ tool, powershell.exe: $path = "/vol/InfraDev_AppDev03/VHD.lun" $path | LogParser.exe "SELECT EXTRACT_FILENAME(text) AS Filename, STRCAT( EXTRACT_PATH(text), '/') AS Path FROM STDIN " -i textline -stats off Returns: Filename Path -------- ---------------------- VHD.lun /vol/InfraDev_AppDev03/ Have some data parsing fun, Log Parser it! |
My System Specs![]() |
![]() |
| Thread Tools | |
| |
Similar Threads | ||||
| Thread | Forum | |||
| LINQ: Inner Join & Left Outer Join Q | .NET General | |||
| Split text | VB Script | |||
| Downloads are getting split in two | Vista General | |||
| Split Desktop | Vista performance & maintenance | |||