Pablo Fischer wrote at Fri, 25 Jul 2003 13:49:55 +0000:
> I have a string (its an array, the array has the values that $ftp->ls("dir)
> returns), so $array[1] contains this:
> -rw-r--r-- 1 pablo pablo 18944 Jul 16 21:14 File28903.zip
>
> What I would like to do is: get the date (Jul 16), the time (12:14) and the
> FileName, each one if a different array, like..
>
> my ($date, $time, $fname) = $array[1];
>
> I know that I could to it with split, I solved the problem with
>
> split(" ",$array[1]);
You should also consider to use
my @col = split " ", $array[1];
# or
my @col = split /\s+/, $array[1];
Allthough the first method looks very similar to your one,
splitting for one blank is a special case that splits at all whitespaces
doing nearly the same as the second line (but leading whitespaces are
ignored).
For further details, please read
perldoc -f split
> However I would like to know if I can separeate the original string into
> columns, so I could access the values like:
>
> $date = $col[6]+$col[7];
The addition seems to be the wrong opparator, as you want mainly
concatenate the month with the day of month. Use one of the next methods:
my $date = "@col[6,7]";
my $date = "$col[6] $col[7]";
my $date = join " ", @col[6,7];
> $time = $col[8];
> $fname = $col[9];
However, there would also be a regexp solution:
my ($date, $time, $fname) =
$array[1] =~ /(\w\w\w \d?\d) (\d?\d:\d\d) (\S+)$/;
(I don't have the feeling, that the solution is really better, but I find
it always good to know that there are more than one ways to do it)
Greetings,
Janek
PS: In any case, I would recommend you to give the variables a better
name. $array[1] is not very self explaining. What about $file_listing[1].
I personally, also found it good not play around with magic numbers like
6, 7, 8, 9 in my source code, unless it is very obviously what they are
doing. In your case it might be an idea to declare some constants that are
selfexplicating:
use constant MONTH_COL => 6;
use constant DAY_COL => 7;
use constant TIME_COL => 8;
use constant FNAME_COL => 9;
Than you can write e.g.:
my $date = "@col[MONTH_COL, DAY_COL]";
what is much easier to maintain on a long run.
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]