RAHUL
06-07-2006, 10:52
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...
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,
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
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...
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,
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