Announcement

Collapse
No announcement yet.

Klammer falsch oder sonst was?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Klammer falsch oder sonst was?

    Hi zusammen...

    Ich hab ein, sehr wahrscheinlich kleines, Problem, dass ich einfach nicht sehe... hab wohl irgendwo ein Knoten...

    Jedenfalls, Code findet ihr gleich im Post, das Problem:

    Aus $subdir wird nur die erste Datei ($filename) ins $Extdir/$basename kopiert, restliche Dateien im Subdir überspringt er dann einfach...
    Hab ich die Klammer einer Schlaufe falsch gesetzt oder woran liegts? Ich seh echt nicht durch...

    (variabeln sind schon initiiert, hab einfach unwichtige teile rausgenommen)
    Code:
    Code:
    my $logfile = "E:\\IXOS\\Voicerecording-test.log";
    open(LOGFILE, ">$logfile") or die $!;
    
    printf LOGFILE "%4d-%02d-%02d%-02d-%02d-%02d Script started\n\n", ($year+1900),($mon+1),$mday,$hour,$min,$sec;
    
    my $dbh = DBI->connect( 'dbi:Oracle:TEST',
                                  ) || die "Database connection not made: $DBI::errstr";
    
    my $subdir = @ARGV[0];
    
    if (!(-e $subdir )) { die "No directory argument given or directory does not exist"};
    if (-f $subdir) { die "Argument not a directory!"};
    
    my $regkey = IXOS::ArchiveCfg::new();
    $extdir = $regkey->getSetupVar( 'EXDB/EXT_DIR' );
    
    $extdir = $extdir."\\voicerecording\\test";
    
    opendir(SUBDIR, "$subdir") or die $!;
    
    while (my $filename = readdir(SUBDIR)) {
    print "1\n";
    
                rename($subdir."/".$filename, $subdir."/".$transfilename);
                print "rename(".$subdir."/".$filename." ".$subdir."/".$transfilename.");\n";
                $filename = $transfilename;
    }
    
    next if ( $filename != m/^[A-Za-z0-9]+/g );
    $basename = basename($filename,$suffix);
    
            print "Basename ".$basename."\n";
            @filenamecomps = split(/_/,$basename);
                 
            my $sql = qq{ select docid from doclink where vrdoc = ?  };
            $sth = $dbh->prepare( $sql ) || die $dbh->errstr;
            $sth->bind_param( 1, $basename );  
            $sth->execute();
            $sth ->bind_columns( undef, \$docid );
            printf LOGFILE "DocID for ".$basename." =".$docid."\n";
            $docid = "";
            @sqlarg[0] = $basename;
    
            while( $sth->fetch() ) {
            print "2\n";
    
    ($lsec,$lmin,$lhour,$lmday,$lmon,$lyear,$lwday,$lyday,$lisdst)=localtime(time);
                my $loctime = ($lyear+1900)."/".($lmon+1)."/".$lmday." ".$lhour.":".$lmin.":".$lsec;
                printf LOGFILE $loctime."    FOUND docid ".$docid." VREC-ID ".$basename."\n",
                $lyear+1900,$lmon+1,$lmday,$lhour,$lmin,$lsec;;
                       print "Docid found : ".$docid."\n";
    
               if (length($docid) gt 1) {
                print "3\n";
                    print "docid defined - do we have to delete it?\n";
                    if (-M $subdir."/".$filename >= 3 ) {
                        unlink $subdir."/".$filename;
                        ($lsec,$lmin,$lhour,$lmday,$lmon,$lyear,$lwday,$lyday,$lisdst)=localtime(time);
                        $loctime = ($lyear+1900)."/".($lmon+1)."/".$lmday." ".$lhour.":".$lmin.":".$lsec;
                        printf LOGFILE $loctime."    OLD FILE - Deleting File ".$basename."\n",
                        $lyear+1900,$lmon+1,$lmday,$lhour,$lmin,$lsec;
                        printf $loctime."    OLD FILE - Deleting File ".$basename."\n",
                        $lyear+1900,$lmon+1,$lmday,$lhour,$lmin,$lsec;
                    }
                }
            }
               
    $sth->finish();
    
            if  (length($docid) eq 0)  {
            print "4\n";
                $docid = "";
                print "processing file ".$subdir."/".$filename."\n";
                if (-f $subdir."/".$filename  ) {
                print "5\n";
                    ($lsec,$lmin,$lhour,$lmday,$lmon,$lyear,$lwday,$lyday,$lisdst)=localtime(time);
                    $loctime = ($lyear+1900)."/".($lmon+1)."/".$lmday." ".$lhour.":".$lmin.":".$lsec;           
                    printf LOGFILE $loctime." target directory ".$subdir."/".$filename." exists\n";
                    if ( mkdir $extdir."/".$basename ) {
                        print "Directory created ".$extdir."/".$basename."\n";    
                    } #end of ( mkdir $extdir."/".$basename )              
            
                # Copy the file
                    if (copy($subdir."/".$filename, $extdir."/".$basename."/")) {
                        ($lsec,$lmin,$lhour,$lmday,$lmon,$lyear,$lwday,$lyday,$lisdst)=localtime(time);
                        $loctime = ($lyear+1900)."/".($lmon+1)."/".$lmday." ".$lhour.":".$lmin.":".$lsec;
                        printf LOGFILE $loctime." file ".$subdir."/".$filename." copied to ".$extdir."/".$basename."/\n";
                        print $loctime." file ".$subdir."/".$filename." copied to ".$extdir."/".$basename."/\n";
                    } # end of copy
              
                    open(FLVFILE, "<$subdir\\$filename") or die $!;
    filecontent);
                    $flvchecksum = int(rand(9)).$timestamp;
                    close FLVFILE;
    
                    chdir( $extdir."/".$basename."/");
                    if (!open CMD, ">COMMANDS") {
                        printf LOGFILE $loctime."COULD NOT CREATE ".$extdir."/".$basename."/COMMANDS\n";
                        return 0;
                    }
                    if ( $suffix =~ m/\.flv$/ ) {             
                        printf CMD "DOCTYPE video/x-flv\n";
                        printf CMD "COMP data video/x-flv ".$filename."\n";
                    }
                    if ($suffix =~ m/\.mp3$/ ) {             
                        printf CMD "DOCTYPE audio/mpeg\n";
                        printf CMD "COMP data audio/mpeg ".$filename."\n";
                    }
                    if ($suffix =~ m/\.wav$/ ) {             
                        printf CMD "DOCTYPE audio/x-wav\n";
                        printf CMD "COMP data audio/x-wav ".$filename."\n";
                    }
                    if ($suffix != m/\.wav$/ || $suffix != m/\.flv$/ || $suffix != m/\.mp3$/ ) {             
                        printf CMD "DOCTYPE application/octet-stream\n";
                        printf CMD "COMP data application/octet-stream ".$filename."\n";
                        die "Filename extension NOT allowed!";
                    }
    
                    printf CMD "COMP ATTRLIST ATTR ATTRLIST\n";
                    printf CMD "ARCHIVID T1\n";
    
                    close CMD;
    
                    my $flvfiletype = @filenamecomps[0];
    
                    if ( $flvfiletype == "CRM" ) {
    
                        my $func2;
    
                        my $sql2 = qq{ SELECT cs_voice_doc FROM sysadm.ps_cs_sperrlog_au WHERE cs_yesno_optinakt = 'Y' AND cs_voice_doc = '$basename' }; #found files
                        $func2 = $dbh->prepare( $sql2 ) || die $dbh->errstr;
                        $func2->execute();
                        $func2->bind_columns( undef, \$rv );
    
                        my @result;
                        while (@result = $func2->fetchrow()) {
                            printf "\n\nResult=".@result[0]."\n\n";
                        }
    
                        if ( @result[0] != '' ) {    #already archived, can be deleted
                            unlink($extdir."/".$basename."/COMMANDS");                    
                            unlink($extdir."/".$basename."/".$filename);                    
                            rmdir($extdir."/".$basename);                    
                            unlink($subdir."/".$filename);
                        } 
    
                        if ( @result[0] = '' ) {    #we have a file we really need to archive.
                            my $rawdate = @filenamecomps[3];
                            my $rawyear = substr($rawdate,0,4);
                            my $rawmonth = substr($rawdate,4,2);
                            my $rawday = substr($rawdate,6,2);
                            $oldarchdate = $rawday.".".$rawmonth.".".$rawyear;
                        } 
                        $func2->finish();
                    }  
    
                    if ( $flvfiletype == "LOT" || $flvfiletype == "LOTTO" || $flvfiletype == "LCS" || $flvfiletype == "WIN"  ) {
                        my $date_string = ctime(stat($filename)->mtime);
                        my $date = ParseDate($date_string);
                        my $rawyear = substr($date,0,4);
                        my $rawmonth = substr($date,4,2);
                        my $rawday = substr($date,6,2);
                        $oldarchdate = $rawday.".".$rawmonth.".".$rawyear;
    
                        print "file ".$filename." updated at ".$date."\n";
                    } 
     
                    if ( $flvfiletype != "LOT" || $flvfiletype != "LOTTO" || $flvfiletype != "LCS" || $flvfiletype != "WIN"  ) {
                        my $date_string = ctime(stat($filename)->mtime);
                        my $date = ParseDate($date_string);
                        my $rawyear = substr($date,0,4);
                        my $rawmonth = substr($date,4,2);
                        my $rawday = substr($date,6,2);
                        $oldarchdate = $rawday.".".$rawmonth.".".$rawyear;
    
                        print "file ".$filename." ignored at ".$date."\n";
    
                        if ( $flvfiletype != "CRM" || $flvfiletype != "LOT" || $flvfiletype != "LOTTO" || $flvfiletype != "LCS" || $flvfiletype != "WIN"  ) {
                            printf LOGFILE "Illegal Application type".$flvfiletype." not allowed for ".$basename."\n";
                            die "Illegal Application Type - not allowed";
                        }
    
                        if ( $flvfiletype =~ m/^[A-Za-z]/g ) {
                            printf LOGFILE "Application type".$flvfiletype." not allowed for ".$basename." - identifier may only consist of letters\n";
                            die "Application identifier may only consist of letters";
                        }
                    }
    untie $flvchecksum;
    
                } #end of if
    
            } else {                             #end of test whether file may be archived (docid ne 0)
                 print "File not found\n";
    #            unlink($subdir."/".$filename);
            }
            
    } # end of while (my $filename = readdir(SUBDIR))
    schon mal vielen Dank

    LG
    rioc

  • #2
    (ich habe bei Verschiedenen Schritten zahlen ausgeben lassen, damit ich debuggen kann, da ich nicht selber testen darf, sondern ich lediglich mit dem CMD output arbeiten kann, die ich zugeschickt bekomme, nachdem das skript ausgeführt wurde... Das problem ist ab
    Code:
    printf "4\n";
    )


    CMD Output:
    Code:
    C:\temp\20091229_test>perl TEST3_burda_ciscom_voicerecording_09122010.pl testdir
    
    Timestampy : 1291911543
    localtime : 1291911543
    1
    
    Suffix :
    1
    
    Suffix :
    1
    
    Suffix : .mp3
    Filename initial CRM_00000000000008618780_GENERELL_20070730_153906.mp3
    File name testdir/CRM_00000000000008618780_GENERELL_20070730_153906.mp3 contains
     illegal characters in file name
    Translated CRM_00000000000008618780_GENERELL_20070730_153906.mp3
    rename(testdir/CRM_00000000000008618780_GENERELL_20070730_153906.mp3 testdir/CRM
    _00000000000008618780_GENERELL_20070730_153906.mp3);
    Basename CRM_00000000000008618780_GENERELL_20070730_153906
    4
    processing file testdir/CRM_00000000000008618780_GENERELL_20070730_153906.mp3
    Directory createdE:\IXOS\extdir\EXDBData\ext_dir\voicerecording\test/CRM_0000000
    0000008618780_GENERELL_20070730_153906
    1900/1/ ::Time::tm=ARRAY(0x9559fbc) file testdir/CRM_00000000000008618780_GENERE
    LL_20070730_153906.mp3 copied to E:\IXOS\extdir\EXDBData\ext_dir\voicerecording\
    test/CRM_00000000000008618780_GENERELL_20070730_153906/
    
    
    Result=CRM_00000000000008618780_GENERELL_20070730_153906
    
    file CRM_00000000000008618780_GENERELL_20070730_153906.mp3 updated at 2009121116
    :21:13
    1
    
    Suffix : .mp3
    Filename initial LOT_D51271_1197444312008.mp3
    File name testdir/LOT_D51271_1197444312008.mp3 contains illegal characters in fi
    le name
    Translated LOT_D51271_1197444312008.mp3
    rename(testdir/LOT_D51271_1197444312008.mp3 testdir/LOT_D51271_1197444312008.mp3
    );
    Basename LOT_D51271_1197444312008
    4
    processing file testdir/LOT_D51271_1197444312008.mp3
    1
    
    Suffix : .mp3
    Filename initial WIN_D51271_1197444312008.mp3
    File name testdir/WIN_D51271_1197444312008.mp3 contains illegal characters in fi
    le name
    Translated WIN_D51271_1197444312008.mp3
    rename(testdir/WIN_D51271_1197444312008.mp3 testdir/WIN_D51271_1197444312008.mp3
    );
    Basename WIN_D51271_1197444312008
    4
    processing file testdir/WIN_D51271_1197444312008.mp3
    
    C:\temp\20091229_test>

    Comment


    • #3
      Wo ist bei
      printf "4\n";

      eine Schleife?
      Christian

      Comment


      • #4
        File name testdir/CRM_00000000000008618780_GENERELL_20070730_153906. mp3 contains
        illegal characters in file name
        Ich hab zwar nu überhaupt keine Ahnung von Perl, aber warum stehen in den Dateinamen / Pfaden manchmal Backslashes und manchmal nur ein Slash?
        Ist es das was hier angmeckert wird?

        Grüße
        Tino
        Ich habs gleich!
        ... sagte der Programmierer.

        Comment


        • #5
          die Meldung mit illegal characters kommt auch bei der Datei wo es funktioniert...
          und die Dateinamen sind immer gleich aufgebaut... Buchstaben, underscores und zahlen...

          @christian:
          die schleife die ich meine, ist eigentlich die While Schleife, die über fast das ganze script gewickelt ist... aber irgendwie find ich die ist korrekt gesetzt... (hab gedacht dass vielleicht nur 1 Datei aus $subdir ausgelesen wird und nicht alle... aber das "processing file" kommt ja dennoch bei den Dateien die dann doch nicht ins $extdir/$basename kopiert werden)...

          vielleicht hab ich auch bei der if Bedingung was falsch, aber sehe es total nicht... :S

          (Danke schon für die schnellen Antworten)

          Comment


          • #6
            ie schleife die ich meine, ist eigentlich die While Schleife, die über fast das ganze script gewickelt ist
            hmmmm

            Sehe ich anders

            while (my $filename = readdir(SUBDIR)) {
            print "1\n";

            rename($subdir."/".$filename, $subdir."/".$transfilename);
            print "rename(".$subdir."/".$filename." ".$subdir."/".$transfilename.");\n";
            $filename = $transfilename;
            }
            Christian

            Comment


            • #7
              also bei mir hat diese Klammer ihren Anfang bei " if ( $filename =~ m/^[A-Za-z0-9]+/g ) {" (laut Notepad++)...
              Kann sein dass diese klammer übrig geblieben ist vom "elliminate illegal characters" Teil, den ich rausgenommen habe, da der Code hier sonst zuviele Zeichen gebraucht hätte...

              Comment


              • #8
                hab das ganze Skript mal als anhang angehängt... (hab halt einfach die DB logins gelöscht, sonst nichts...)

                Comment


                • #9
                  ... Anhang hat irgendwie nicht funktioniert...
                  Attached Files

                  Comment


                  • #10
                    ok, hab das skript noch etwas angepasst... hab gesehn das ich Unix pfad seperator genommen habe... bin noch nicht so lange auf windows aktiv

                    Perl Skript findet ihr im Anhang.

                    Output sieht nun etwas besser aus, aber dennoch wird nurd die erste Datei kopiert, und die restlichen nicht... why?

                    Output:
                    Code:
                    Verarbeitung Skript
                    ================
                    C:\temp\20091229_test>perl TEST3_burda_ciscom_voicerecording_23122010.pl testdir
                    
                    Timestampy : 1293109833
                    localtime : 1293109833
                    1
                    
                    Suffix :
                    1
                    
                    Suffix :
                    1
                    
                    Suffix : .mp3
                    Filename initial LOT_D51271_1197444312010.mp3
                    File name testdir\LOT_D51271_1197444312010.mp3 contains illegal characters in fi
                    le name
                    Translated LOT_D51271_1197444312010.mp3
                    rename(testdir\LOT_D51271_1197444312010.mp3 testdir\LOT_D51271_1197444312010.mp3
                    );
                    Basename LOT_D51271_1197444312010
                    4
                    processing file testdir\LOT_D51271_1197444312010.mp3
                    5
                    Directory created E:\IXOS\extdir\EXDBData\ext_dir\voicerecording\test\LOT_D51271
                    _1197444312010
                    1900\1\ ::Time::tm=ARRAY(0x955c3f0) file testdir\LOT_D51271_1197444312010.mp3 co
                    pied to E:\IXOS\extdir\EXDBData\ext_dir\voicerecording\test\LOT_D51271_119744431
                    2010/
                    file LOT_D51271_1197444312010.mp3 updated at 2009121116:21:13
                    0
                    1
                    
                    Suffix : .mp3
                    Filename initial LOT_D51271_1197444312011.mp3
                    File name testdir\LOT_D51271_1197444312011.mp3 contains illegal characters in fi
                    le name
                    Translated LOT_D51271_1197444312011.mp3
                    rename(testdir\LOT_D51271_1197444312011.mp3 testdir\LOT_D51271_1197444312011.mp3
                    );
                    Basename LOT_D51271_1197444312011
                    4
                    processing file testdir\LOT_D51271_1197444312011.mp3
                    1
                    
                    Suffix : .mp3
                    Filename initial LOT_D51271_1197444312012.mp3
                    File name testdir\LOT_D51271_1197444312012.mp3 contains illegal characters in fi
                    le name
                    Translated LOT_D51271_1197444312012.mp3
                    rename(testdir\LOT_D51271_1197444312012.mp3 testdir\LOT_D51271_1197444312012.mp3
                    );
                    Basename LOT_D51271_1197444312012
                    4
                    processing file testdir\LOT_D51271_1197444312012.mp3
                    1
                    
                    Suffix : .mp3
                    Filename initial LOT_D51271_1197444312013.mp3
                    File name testdir\LOT_D51271_1197444312013.mp3 contains illegal characters in fi
                    le name
                    Translated LOT_D51271_1197444312013.mp3
                    rename(testdir\LOT_D51271_1197444312013.mp3 testdir\LOT_D51271_1197444312013.mp3
                    );
                    Basename LOT_D51271_1197444312013
                    4
                    processing file testdir\LOT_D51271_1197444312013.mp3
                    
                    
                    Leider wieder nu rein Directory angelegt:

                    Comment


                    • #11
                      Perl Skript findet ihr im Anhang.
                      Es gibt keine Anhang

                      Wenn du das Programm geschrieben hast, solltest du wissen, warum nur ein Druchlauf erfolgt.

                      Formatierung des Codes, debuggen oder Printausgaben könnten helfen
                      Christian

                      Comment


                      • #12
                        Originally posted by Christian Marquardt View Post
                        Es gibt keine Anhang

                        Wenn du das Programm geschrieben hast, solltest du wissen, warum nur ein Druchlauf erfolgt.

                        Formatierung des Codes, debuggen oder Printausgaben könnten helfen
                        yep, printausgaben musste ich machen, da ich das script nicht selber testen darf... sprich, ich kann den debugger nicht verwenden...
                        Printausgabe "5" läuft nur einmal, sollte aber für jede Datei wiederholt werden...

                        und das ist auch noch ein weiteres Problem, das Script ist leider nicht von mir geschrieben... es wurde mir einfach in die Finger gedrückt, ohne jegliche Infos, nur dass es nicht läuft, ich solle mal schauen... naja, suboptimale Bedingungen sag ich mal...

                        Comment


                        • #13
                          Es wird dann wohl an irgendeiner if-Bedingung liegen, die da zuschlägt. Sorry, aber ein anderer außer dir kann das nicht testen.
                          Allerdings irgendwie eine "komische" Arbeitsumgebung, wo du das Script nicht in einer Entwicklungsumgebung testen kannst....
                          Christian

                          Comment


                          • #14
                            hier noch das Skript im anhang (habs vorhin vergessen)
                            Attached Files

                            Comment


                            • #15
                              ist eben nicht unsere Arbeitsumgebung... der Kunde will partout keine Fremde Zugriffe in Ihr system, und der der das Skript testet, weiss nicht umbedingt mit dem Debugger umzugehen... :S

                              hab eben auch schon von Anfang an die if-Bedingungen im Visier, aber bin total blind... frustriert mich echt eh... vorallem weils dann eh nur so'n kleiner Fehler ist... :S argh

                              Comment

                              Working...
                              X