>>>>> ' This is the standard >>>>> ' total 4696 >>>>> ' drw-rw-rw- 1 user group 0 Feb 6 15:46 . >>>>> ' drw-rw-rw- 1 user group 0 Feb 6 15:46 .. >>>>> ' -rw-rw-rw- 1 user group 4825 May 3 2010 Account.png >>>>> ' -rw-rw-rw- 1 user group 5242 May 3 2010 Administration.png >>>>> ' -rw-rw-rw- 1 user group 4117 Apr 17 2011 Agent.png >>>>> ' -rw-rw-rw- 1 user group 1402 Dec 30 2005 AmazonCA.gif >>>>> ' -rw-rw-r-- 1 wliclus weblogic 308121 Jun 1 2011 tlv_01_jackk_2011615315_1185655_001_23327701.zip >>>>> >>>>> ' This is also another format we have to support >>>>> ' -r-xr-xr-x 1 owner group 78145990 Nov 4 2011 101.zip >>>>> ' -r-xr-xr-x 1 owner group 35492 Apr 14 2011 20110414.40E >>>>> ' -r-xr-xr-x 1 owner group 33583 Apr 14 2011 20110414.421 >>>>> ' -r-xr-xr-x 1 owner group 40815 Apr 14 2011 20110414.483 >>>>> ' -r-xr-xr-x 1 owner group 24836 Apr 14 2011 20110414.ARC >>>>> ' -r-xr-xr-x 1 owner group 4737 May 5 2011 4A16PBE1.txt >>>>> ' -r-xr-xr-x 1 owner group 4737 Jan 18 13:50 4A17A7B1.txt >>>>>>>>>>
>>>>> ' If this is a file >>>>> If lcLine.StartsWith("-") Then >>>>> >>>>> ' Get the character at position 42 >>>>> lcCharacter = Mid(lcLine, 42, 1) >>>>> >>>>> ' If this is a space >>>>> If lcCharacter = " " Then >>>>> lcFile = Mid(lcLine, 56) >>>>> lnSize = Val(Mid(lcLine, 34, 8)) >>>>> lcDate = Mid(lcLine, 43, 12) >>>>> Else >>>>> lcFile = Mid(lcLine, 60) >>>>> lnSize = Val(Mid(lcLine, 34, 14)) >>>>> lcDate = Mid(lcLine, 47, 12) >>>>> End If >>>>>>>>>>
Imports System.Collections.Generic >>>>Imports System.Linq >>>> >>>>Namespace ConsoleApplication5 >>>> Class Program >>>> Private Shared Sub Main(args As String()) >>>> Dim typeA As New List(Of String)() From { _ >>>> " drw-rw-rw- 1 user group 0 Feb 6 15:46 .", _ >>>> " drw-rw-rw- 1 user group 0 Feb 6 15:46 ..", _ >>>> " -rw-rw-rw- 1 user group 4825 May 3 2010 Account.png", _ >>>> " -rw-rw-rw- 1 user group 5242 May 3 2010 Administration.png", _ >>>> " -rw-rw-rw- 1 user group 4117 Apr 17 2011 Agent.png", _ >>>> " -rw-rw-rw- 1 user group 1402 Dec 30 2005 AmazonCA.gif", _ >>>> " -rw-rw-r-- 1 wliclus weblogic 308121 Jun 1 2011 tlv_01_jackk_2011615315_1185655_001_23327701.zip", _ >>>> " -r-xr-xr-x 1 owner group 78145990 Nov 4 2011 101.zip", _ >>>> " -r-xr-xr-x 1 owner group 35492 Apr 14 2011 20110414.40E", _ >>>> " -r-xr-xr-x 1 owner group 33583 Apr 14 2011 20110414.421", _ >>>> " -r-xr-xr-x 1 owner group 40815 Apr 14 2011 20110414.483", _ >>>> " -r-xr-xr-x 1 owner group 24836 Apr 14 2011 20110414.ARC", _ >>>> " -r-xr-xr-x 1 owner group 4737 May 5 2011 4A16PBE1.txt", _ >>>> " -r-xr-xr-x 1 owner group 4737 Jan 18 13:50 4A17A7B1.txt" _ >>>> } >>>> >>>> Dim result As IEnumerable(Of FTPInfo) = typeA.[Select](Function(x) >>>> Dim line As String() = DirectCast(x, String).Split(DirectCast(Nothing, Char()), StringSplitOptions.RemoveEmptyEntries) >>>> Return New FTPInfo() With { _ >>>> Key .File = line(8), _ >>>> Key .Size = line(4), _ >>>> Key .Month = line(5), _ >>>> Key .Day = line(6), _ >>>> Key .YearOrTime = line(7) _ >>>> } >>>> >>>>End Function) >>>> End Sub >>>> End Class >>>> Public Structure FTPInfo >>>> Public File As String >>>> Public Size As String >>>> Public Month As String >>>> Public Day As String >>>> Public YearOrTime As String >>>> End Structure >>>>End NamespaceDisclaimer: VB auto-converted from C#.....
>>>string pattern = @"^(?<Permissions>\S+)\s+(?<Links>\d+)\s+(?<User>\w+)\s+(?<Group>\w+)\s+(?<FileSize>\d+)\s+(?<Month>\w+)\s+(?<Day>\d+)\s+((?<Year>\d{4})|(?<Time>\d+:\d+(:\d+)?))\s+(?<FileName>.+)$"; >>>>>>
>>>string[] lines = >>> { @"drw-rw-rw- 1 user group 0 Feb 6 15:46 .", >>> @"drw-rw-rw- 1 user group 0 Feb 6 15:46 ..", >>> @"-rw-rw-rw- 1 user group 4825 May 3 2010 Account.png", >>> @"-rw-rw-rw- 1 user group 5242 May 3 2010 Administration.png", >>> @"-rw-rw-rw- 1 user group 4117 Apr 17 2011 Agent.png", >>> @"-rw-rw-rw- 1 user group 1402 Dec 30 2005 AmazonCA.gif", >>> @"-rw-rw-r-- 1 wliclus weblogic 308121 Jun 1 2011 tlv_01_jackk_2011615315_1185655_001_23327701.zip", >>> @"-r-xr-xr-x 1 owner group 78145990 Nov 4 2011 101.zip", >>> @"-r-xr-xr-x 1 owner group 35492 Apr 14 2011 20110414.40E", >>> @"-r-xr-xr-x 1 owner group 33583 Apr 14 2011 20110414.421", >>> @"-r-xr-xr-x 1 owner group 40815 Apr 14 2011 20110414.483", >>> @"-r-xr-xr-x 1 owner group 24836 Apr 14 2011 20110414.ARC", >>> @"-r-xr-xr-x 1 owner group 4737 May 5 2011 4A16PBE1.txt", >>> @"-r-xr-xr-x 1 owner group 4737 Jan 18 13:50 4A17A7B1.txt", >>> @"dr-xr-xr-x 1 owner group 0 Jan 18 13:50 Program Files or something else" >>> }; >>>>>>
IEnumerable<FTPInfo> result = typeA.Select(x => >> { >> string[] line = ((string)x).Split((char[])null, StringSplitOptions.RemoveEmptyEntries); >> string filename = string.Empty; >> line.Skip(8).Select(xx => filename = filename + " " + xx).Last(); >> return new FTPInfo >> { >> File = filename, >> Size = line[4], >> Month = line[5], >> Day = line[6], >> YearOrTime = line[7] >> }; >> });>
>@"dr-xr-xr-x 1 owner group 0 Jan 18 13:50 Program Files or something else "
>
Ummm.IEnumerable<FTPInfo> result = typeA.Select(x => { string[] line = ((string)x).Split((char[])null, StringSplitOptions.RemoveEmptyEntries).Take(9).ToArray(); return new FTPInfo { File = x.Substring(x.IndexOf(line.Last())), Size = line[4], Month = line[5], Day = line[6], YearOrTime = line[7] }; });(I know. This won't work either if the first word of the file name occurs earlier in the string. I don't want to play any more :-{ )