Schrift
[thread]6291[/thread]

Datumsformat JJJJ-MM-TT HH:MM:SS sortieren: mal wieder was zum sortieren (Seite 2)



<< |< 1 2 >| >> 20 Einträge, 2 Seiten
steve
 2004-05-25 22:11
#82751 #82751
User since
2004-03-04
52 Artikel
BenutzerIn
[default_avatar]
[quote=Taulmarill,25.05.2004, 16:09]@coax: der codeschnipsel ist nicht dein ernst, oder? :rock:[/quote]
der Schnipsel ist die intelligenteste Möglichkeit.

steve
Strat
 2004-05-26 00:06
#82752 #82752
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Crian,25.05.2004, 15:56]
Code: (dl )
my @sort = sort {$a cmp $b} @array;
[/quote]
ist identisch mit
Code: (dl )
my @sort = sort @array;

...
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
esskar
 2004-05-26 04:45
#82753 #82753
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=steve,25.05.2004, 20:11][quote=Taulmarill,25.05.2004, 16:09]@coax: der codeschnipsel ist nicht dein ernst, oder? :rock:[/quote]
der Schnipsel ist die intelligenteste Möglichkeit.

steve[/quote]
da in der Aufgabenstellung "JJJJ-MM-TT HH:MM:SS"
gegeben ist, ist strats Lösung die intelligenteste + schnellste! :)
steffenw
 2004-05-27 00:17
#82754 #82754
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Genau wie es @strat und @esskar vorschlagen ist es richtig.

Man kann für Zahlen immer dann auch Stringvergleichsoperatoren einsetzten, wenn deren Format die gleiche Länge Zeichen beschreibt. Und das ist bei dem Datum so, jede Wertigkeit steht immer an einer ganz definierten Stelle und jedes Trennzeichen ist immer das gleiche.

Es klappt nur dann nicht, wenn man beispielsweise 1 und 01 miteinander vergleicht. Aber die beiden sind ja auch unterschiedlich lang.
$SIG{USER} = sub {love 'Perl' or die};
esskar
 2004-05-27 00:21
#82755 #82755
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=steffenw,26.05.2004, 22:17]Man kann für Zahlen immer dann auch Stringvergleichsoperatoren einsetzten, wenn deren Format die gleiche Länge Zeichen beschreibt. Und das ist bei dem Datum so, jede Wertigkeit steht immer an einer ganz definierten Stelle und jedes Trennzeichen ist immer das gleiche.[/quote]
jein...
der Kontext muss auch richtig sein.

Ein Datum im Format
TT-MM-JJJJ HH:MM:SS
liefert zwar ein Ergebnis, aber bestimmt nicht das gewünschte!\n\n

<!--EDIT|esskar|1085602952-->
steffenw
 2004-05-27 00:37
#82756 #82756
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Sage ich doch:

YYYY-MM-DD HH:MM:SS
und
DD-MM-YYYY HH:MM::SS

ist doch nicht das gleiche Format und dann ist YYYY höherwertig als DD, wenn man es als Zahl betrachtet. Außerdem stehen die Trennzeichen nicht an der gleichen Stelle im String.

In der Aufgabenstellung ging es doch um den String YYYY-MM-DD HH:MM:SS und da stimmt die Wertigkeit ganz genau.

Wenn es darum ginge, den String DD-MM-YYYY HH:MM::SS zu verarbeiten, dann würde ich ihn vor dem Sortieren erst mit
Code: (dl )
1
2
3
my $string = 'DD-MM-YYYY HH:MM::SS';
$string = sprintf '%s-%s-%s %s', split /[- ]/, $string;
# $string ist jetzt 'YYYY-MM-DD HH:MM::SS';
umformatieren. Habe ich letztens erst programmiert, um mit einem Zeitwert wie 26.05.2004 22.36:35 vergleichen zu können.\n\n

<!--EDIT|steffenw|1085603973-->
$SIG{USER} = sub {love 'Perl' or die};
Crian
 2004-05-27 17:24
#82757 #82757
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
[quote=Strat,25.05.2004, 22:06][quote=Crian,25.05.2004, 15:56]
Code: (dl )
my @sort = sort {$a cmp $b} @array;
[/quote]
ist identisch mit
Code: (dl )
my @sort = sort @array;

...[/quote]
Ich hatte gedacht, dass <=> Standardverhalten wäre, aber näher betrachtet macht cmp viel mehr Sinn als Standard.

Also einfach sort verwenden und gut ist.
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
Taulmarill
 2004-05-27 17:43
#82758 #82758
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
@steffenw: wie kommst du darauf, dein code würde das format ändern? das tut er nämlich nicht.
vielmehr währe folgender code effektiv:
Code: (dl )
1
2
my $string = 'DD-MM-YYYY HH:MM::SS';
$string = sprintf '%s-%s-%s %s', (split /[- ]/, $string)[2,1,0,3];
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Crian
 2004-05-27 17:47
#82759 #82759
User since
2003-08-04
5873 Artikel
ModeratorIn
[Homepage]
user image
das hatte er vermutlich gemeint ... ich hatte es mir wohl dazugedacht, weil ich nicht drüber gestolpert war =)
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
steffenw
 2004-05-27 19:27
#82760 #82760
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=Taulmarill,27.05.2004, 15:43]
Code: (dl )
1
2
my $string = 'DD-MM-YYYY HH:MM::SS';
$string = sprintf '%s-%s-%s %s', (split /[- ]/, $string)[2,1,0,3];
[/quote]
So'n Mist so habe ich es auch im Programm aber in der Erinnerung war's nicht mehr drin. Hast natürlich Recht.
$SIG{USER} = sub {love 'Perl' or die};
<< |< 1 2 >| >> 20 Einträge, 2 Seiten



View all threads created 2004-05-25 15:28.