Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Eigenartiger Fehler bei der Konkatenation in meinem Perl-Programm

  1. #1
    Registrierter Benutzer
    Registriert seit
    11.11.2005
    Beiträge
    51

    Eigenartiger Fehler bei der Konkatenation in meinem Perl-Programm

    Hallo,

    leider kann ich kein vollwertiges Minibeispiel reinschreiben,
    aber es geht um folgende Subroutine...

    Es sollen bei Aufruf der Subroutine drei Argumente übergeben werden,
    ein String mit lauter Integer($_[0])
    ein Textarray, der manipuliert werden soll($_[2]..$_[-1])
    und eine Kennzeile des Textarray, ab der manipuliert wird($_[1], bzw $_[1]+2)

    Viele der Print-Optionen sollen nur zum Debuggen helfen...

    Code:
         79sub PrintNum{
         80     $_[0]=~ s/^\s*(\d{1,3}[\s\d]+\d{1,3})\s*$/$1/;
         81     my @numbers =split /\s+/,$_[0];
         82     my $NumofNum = @numbers;
         83     my $StdNum = $_[1]+2;
         84
         85     for (my $ctr1=0; $ctr1 < $NumofNum; $ctr1++){
         86         my $line=" " if (($ctr1+1)%15==0||$ctr1==0);
         87         print "Restart line\n"  if (($ctr1+1)%15==0||$ctr1==0);
         88         for (my $ctr2=&TestDigits($numbers[$ctr1]); $ctr2 < 2; $ctr2++){
         89             $line.=" ";
         90         }
         91         $line.="$numbers[$ctr1] ";
         92         print $line;
         93         print "|$ctr1: $numbers[$ctr1]\n";
         94         if ((($ctr1+1)%15==0)||($ctr1+1==$NumofNum)){
         95             $line.="\n";
         96             if($ctr1<15){
         97                 $_[$StdNum]=$line;
         98                 print "\nIn Overwrite-line\n";
         99                 print $line;
        100             }
        101             else{
        102                 splice(@$_, $StdNum, 0, $line);
        103                 print "\nIn splice-line\n";
        104                 print $line;
        105             }
        106             $StdNum++;
        107         }
        108     }
        109 }
    Nun sollen die Zahlen immer in 15-Packs in den Textarray hineingeschrieben werden,
    soweit bin ich aber noch nicht, habe meine Tests bisher unter 15 Zahlen gehalten.
    So ist eine Beispielausgabe für 11 Zahlen zwischen 59 und 70 z.B folgende,
    Code:
    Restart line
      59 |0: 59
     60 |1: 60
     60  61 |2: 61
     60  61  62 |3: 62
     60  61  62  63 |4: 63
     60  61  62  63  64 |5: 64
     60  61  62  63  64  65 |6: 65
     60  61  62  63  64  65  66 |7: 66
     60  61  62  63  64  65  66  67 |8: 67
     60  61  62  63  64  65  66  67  68 |9: 68
     60  61  62  63  64  65  66  67  68  70 |10: 70
    
    In Overwrite-line
     60  61  62  63  64  65  66  67  68  70
    Um den hervorgehobenen Bereich geht es, der eigentliche String geht immer bis zu dem senkrechten Strich(wie nennt man das Zeichen überhaupt, nicht wirklich senkrechter Strich?),

    Dabei ist mir nicht klar, warum die 59 von $ctr1=0 nach $ctr1=1 geschluckt wird,
    denn ein Fehler in der logik bezüglich der einzigen nicht-konkatenierenden Zuweisung habe ich ja mit dem Aufruf "Restart line\n" ausgeschlossen, oder nicht?

    bin dankbar für jeden Hinweis...

    Mfg
    Rahul
    Geändert von RAHUL (06-07-2006 um 11:15 Uhr)

  2. #2
    Registrierter Benutzer
    Registriert seit
    11.11.2005
    Beiträge
    51
    Hallo,
    ich weiß zwar nicht, warum aber das Programm löscht einfach nach dem ersten Durchlauf $line,
    wenn ich $line vor der Konkatenierung ausgeben lasse, erhalte ich eine Fehlermeldung
    nach dem ersten Durchlauf(also ist jetzt $ctr=1)
    Use of uninitialized value in print at ./Create_Statistical_Positions.pl line 89, <COMBINATION> line 12.
    <COMBINATION> ist das Textfile, bzw das Filehandle des Textfiles, aus dem immer die Zahlenreihen gelesen werden, also jeweils $_[0].

    Ich habe das jetzt erstmal gelöst, mit unshift und einfach eine 0 in das erste Element des Array gesetzt, ist auch sehr unsauber, ob das noch Probleme bei längeren Zahlenreihen macht, werde ich dann sehen.

    Bin also weiterhin für Anregungen dankbar...

    MfG
    Rahul
    Geändert von RAHUL (07-07-2006 um 10:43 Uhr)

  3. #3
    Registrierter Benutzer
    Registriert seit
    11.11.2005
    Beiträge
    51

    Doch noch mal ganzes Programm!!!

    So ich habe immer noch das Problem, wahrscheinlich habe ich nicht genau genug hingeschaut, als ich meinte "Problem gelöst",
    deswegen schicke ich mal alle Teile des Programms...

    Vielleicht hat ja jemand Zeit und Interesse sich damit auseinanderzusetzen, weil
    ich blick den Fehler nicht...

    Ich schick drei Anhangsdateien, den Quellcode "Kombination.cpp" der C++-Datei "Kombination.out" (muß noch kompiliert werden")
    , die Perl-Datei "CreateStatisticalPositions.pl"(hier noch Pfad von "Kombination.out" anpassen" Z.37) und eine Inputdatei eines Quantenchemie-Programms "Mayenite.d12", die als Argument von "CreateStatisticalPositions.pl" übergeben wird.

    Ich versteh halt nicht, dass die erste Zahl des Arrays vernichtet wird. Daran ändert auch nichts, wenn ich etwas vor den array shifte.
    Kann es was mit dem Format der Ausgabe-Datei von "Kombination.out" zu tun haben?

    MfG
    Rahul
    Geändert von RAHUL (10-07-2006 um 13:31 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •