Schrift
[thread]7051[/thread]

verzeichnis abfragen: welches ist das letzte verzeichnis



<< |< 1 2 >| >> 15 Einträge, 2 Seiten
Rambo
 2005-06-15 13:59
#55501 #55501
User since
2003-08-14
803 Artikel
BenutzerIn

user image
hallo,

mir fällt irgendwie kein ansatz an wie ich folgendes lösen kann.
folgende verzeichnisstrucktur

versions
2.0.01.00.05
2.0.01.00.06
2.0.02.00.01
2.0.02.00.02
2.1.00.00.01
usw.
wie kann ich heraus finden welches die letzt version ist im
verzeichnis version?
in dem beispiel ist die letzte die 2.1.00.00.01 aber wie komme
ich diese daten?
habt ihr eine idee?

danke schon mal

gruss
rambo
Ronnie
 2005-06-15 14:07
#55502 #55502
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl

use strict;
use warnings;

print pop @{[sort (<DATA>)]};
exit;

_ _DATA_ _
2.0.01.00.05
2.0.01.00.06
2.1.00.00.01
2.0.02.00.01
2.0.02.00.02

Wenn du die Liste mit den Versionsnummern hast, sortiere sie einfach und entnimm die höchste. Du kannst auch wenn es viele sind in einer Schleife drüber iterieren, einen Vergleich machen und in $max speichern wenn größer als $_.\n\n

<!--EDIT|Ronnie|1118836256-->
Taulmarill
 2005-06-15 15:23
#55503 #55503
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
TIMTOWTDI:
perl -e 'print +(sort <*>)[-1], "\n"'

mit schleifen währ ich übrigens vorsichtig, da sort direkt implementiert ist, ist es _sehr_ schnell im vergleich zu pure-perl.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Crian
 2005-06-15 15:33
#55504 #55504
User since
2003-08-04
5870 Artikel
ModeratorIn
[Homepage]
user image
Falls Du allerdings nicht immer die gleiche Anzahl Ziffern an einer Stelle der Versionsnummer hast, musst Du Dir für sort eine eigene Vergleichsfunktion schreiben, die die Versionsnummern splittet und von vorn nach hinten mit <=> vergleicht.

Da das aufwändig ist, empfiehlt es sich dann, eine Schwartzsche Transformation oder das Orcsche Manöver zu verwenden.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
lichtkind
 2005-06-15 16:10
#55505 #55505
User since
2004-03-22
5697 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
was bitte ist ein orcsches manöver?
kenn nur ortsche wolke und Schwartzsche Transformation
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
Rambo
 2005-06-15 16:30
#55506 #55506
User since
2003-08-14
803 Artikel
BenutzerIn

user image
ich habe die anregungen versuch umzusetzen
und jetzt mal so probiert
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use strict;
use warnings;
use Data::Dumper;

my $dir = '.';
my $folders = "";
opendir (DIRHANDEL, "$dir")or warn "can't open $dir\n Error: $!";
while (defined ($folders = readdir(DIRHANDEL)))
{
&new($folders);
}
closedir (DIRHANDEL);

sub new
{
my ($folders) = @_;
#my @t1 = sort $folders,[-1];
#print @t1, "\n";
print +(sort <DATA>)[-1], "\n";
#print +(sort <*$folders>)[-1], "\n";
#print pop @{[sort ($folders)], "\n"};
#print $folders, "\n";
}


2.0.01.00.05
2.0.01.00.06
2.1.00.00.01
2.0.02.00.01
2.0.02.00.02

solange hier "print +(sort <DATA>)[-1], "\n";" DATA drin steht
gibt er mir den letzten richtigen wert aus, aber wenn ich
dort $folder eintrage bekomme ich wieder die ganze liste
des verzeichnisses.

was mach ich hier falsch?

merci
rambo
Strat
 2005-06-15 17:24
#55507 #55507
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
@lichtkind: zum orc'sches maneuvre: schau mal auf meiner HP -> Perl -> Erw. Sortierungen

Nebenbei: ich halte eine komplette sortierung fuer suboptimal, wenn man nur den "groessten" wert braucht... aber die Regel "verlange von einem Computer nichts, was du nicht ebenso rechnen wuerdest" scheint sich heutzutage wohl etwas relativiert zu haben...
Code: (dl )
1
2
3
4
5
6
7
8
my @max = (0,0,0,0,0);
foreach (@files) {
my @actual = split(\./, $_);
for my $i (0..$#actual) {
@max = @actual, last if $actual[$i] > $max[$i];
} # for
} # foreach
print "Max: ", join(".", @max), "\n";

(nicht getestet)
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Taulmarill
 2005-06-15 18:36
#55508 #55508
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
wenn man's ganz sauber haben will, kann man auch List::Util::max() benutzen. der vergleicht die werte aber nur numerisch.

edit: hab grad gesehen, dass List::Util auch eine funktion maxstr() für stringvergleich hat.\n\n

<!--EDIT|Taulmarill|1118846372-->
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Strat
 2005-06-15 19:15
#55509 #55509
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
man will ja eigentlich einen numerischen vergleich, nur wuerde der ja bei den punkten mit dem vergleich abbrechen....

<joke>
gab es da mal nicht v-Strings?
Code: (dl )
print eval 'v' . '115.116.114.97.116';

</joke>\n\n

<!--EDIT|Strat|1118848716-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Rambo
 2005-06-15 19:24
#55510 #55510
User since
2003-08-14
803 Artikel
BenutzerIn

user image
nächster versuch meinerseits :-)
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
use strict;
use warnings;
use List::Util qw(maxstr);

my $dir = '.';
my $folders = "";
opendir (DIRHANDEL, "$dir")or warn "can't open $dir\n Error: $!";
while (defined ($folders = readdir(DIRHANDEL)))
{
my $str = maxstr $folders;
print $str,"\n";
}
closedir (DIRHANDEL);

dies bringt aber auch nur eine kommplett sortierte liste.
das von dir Strat bringt auch eine komplette list!

fürti rambo
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2005-06-15 13:59.