Yuhuu

Dienstag, 2. März 2010

PERL call_user_func


PHP Function call_user_func for PERL

Testen.pm
package Testen;

use strict;
use warnings;

sub new()
{
my ($class) = shift;
my $self = { };
$self->{user_function} = undef;
bless ($self, $class);
return ($self);
}

sub call_user_function
{
my ($self) = @_;
my $functionname = $self->{user_function};
my $functionnameasref = \&$functionname;
&$functionnameasref("Called from PM $functionname.\n");
}

sub do_something
{
my ($self) = @_;
if (defined($self->{user_function})) { $self->call_user_function(); }
else { print "no user function - do something else\n" };
}

1;

test.pl
use strict;
use warnings;

require "Testen.pm";

package Testen;

my $share = new Testen();

sub newfunction($) # my user function
{
my $text = shift;
die if !defined($text);
print "newfunction from PL -> $text\n";
}
$share->do_something; # do nothing - no function set

$share->{user_function} = "newfunction"; # set name of function

$share->do_something; # do something
# bla bla bla
# do something

exit;

OUTPUT, so wie erwartet - test.pl:

no user function - do something else
newfunction from PL -> Called from PM newfunction.
Vielen Dank noch mal an Herrn Schmalhofer.

Zeitüberschneidungen mit EXCEL darstellen

Wie kann man Zeitüberschneidungen mit Microsoft Excel darstellen?

Eine elegante Lösung ist die entsprechenden Zellen per "bedingter" Formatierung hervorzuheben.
Beispiel:
Ab 3. Zeile
Spalte A = Name
Spalte B = Urlaub von
Spalte C = Urlaub bis

( ab hier muss nicht sein nur textliche Darstellung der bedingten Formatierung )
Spalte E = Ein Mitarbeiter die zwei oder mehrere sich überschneidende Urlaube eingetragen hat
Spalte F = Überschneidende Urlaube über alle Mitarbeiter

Formeln
E: =IF(SUMPRODUCT(($B$3:$B$7<=C3)*($C$3:$C$7>=B3)*($A$3:$A$7=A3))>1;"MA hat 2 Urlaube eingetragen!";"")
F: =IF(SUMPRODUCT(($B$3:$B$7<=C3)*($C$3:$C$7>=B3))>1;"Mehrfachüberschneidung";"OK")

Bedingte Formatierung
A: =SUMPRODUCT(($B$3:$B$7<=C3)*($C$3:$C$7>=B3)*($A$3:$A$7=A3))>1
B: =SUMPRODUCT(($B$3:$B$7<=C3)*($C$3:$C$7>=B3))>1
C: =SUMPRODUCT(($B$3:$B$7<=C3)*($C$3:$C$7>=B3))>1

Montag, 1. März 2010

MS Excel Berechnung größer 15 Stellen

Berechnungen in Excel mit mehr als 15 Stellen, möglich oder nicht?

Kleiner Ausflug in die Prozessorwelt. Es gibt eine Beschränkung die Excel davon abhält Zahlen > 15 Stellen richtig darzustellen. Die Excel-Begrenzung von 15 signifikante Stellen ist aber kein Excel oder Microsoft Problem alle anderen Tabellenkalkulations-Programme einschließlich Lotus, OpenOffice udgl. haben die gleiche Einschränkung.

Diese Beschränkung liegt am Mikroprozessor. Alle Intel, Intel-kompatible, Macintosh und UNIX-Mikroprozessoren haben die gleiche Einschränkung und diese ist auf den Industrie-Standard namens "IEEE 754" zurückzuführen, der zu gunsten schnellerer Verarbeitung gegenüber geringere Präzision entwickelt wurde.

Zur Frage selbst. Es ist trotzdem möglich in MS Excel mit größeren Zahlen zu rechnen. Also uns ist ein Produkt bekannt welches es nochdazu als Free-Edition gibt. Mehr dazu bei http://digilander.libero.it/foxes/index.htm. 

UPDATE: Ein weiteres Produkt gibt es hier http://precisioncalc.com/
UPDATE2: Manche Anti-Viren Hersteller melden in der xnumb56.zip einen Virus. Dies ist ein Fehlalarm (False / Positive).