while (<XMLFILE>) {
# ... do stuff ...
print "\cM";
print $ctr;
}
The \cM will print a CR which brings the cursor back to the start of the line, allowing the next print statement to print over it. | [reply] [d/l] [select] |
If I understand correctly, you want something like:
print("\rProcessed line number $ctr.");
Test code:
for $ctr (1..10) {
sleep(1);
print("\rProcessed line number $ctr.");
}
print("\rDone. \n");
Similar to how "\n" (Line Feed) moves the cursor to the begining of the next line, "\r" (Carriage Return) moves the cursor to the begining of the current line.
| [reply] [d/l] [select] |
Based on an alternate guess that what you want might be to output the numbers of the lines you've processed into a reasonably visible block, thusly:
0 1 2 3 4 5 6 7 8 9 10 11
12 13 14 15 16 17 18 19 20 21 22 23
24 25 26 27 28 29 30 31 32 33 34 35
36 37 38 39 40 41 42 43 44 45 46 47
48 49 50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69 70 71
72 73 74 75 76 77 78 79 80 81 82 83
84 85 86 87 88 89 90 91 92 93 94 95
96 97 98 99 100 101 102 103 104 105 106 107
108 ....
you'll have to decide how wide you want to go on your particular DOS screen, and then use a second counter to hold the output to the width you want.
That's done indirectly, below: maxing $ctr2 at 12 means the lines of (3 digit) numbers will be not more than 62 chars wide, which should be visible_at_a_glance on any screen that I consider likely.
$ctr2=0;
for ($ctr = 0; $ctr < 180; ++$ctr) # 180 arbitrary
{
print "$ctr "; # val followed by two spaces
$ctr2++; # flag
if ($ctr2 == 12)
{
print "\n";
$ctr2 = 0;
}
}
exit;
But for your next question, you'll get a more concise answer set, quicker, if you save us guessing your intent. Show some input; show what you hope/expect your output to be... and, for good measure, try to demonstrate some effort with code rather than "do something here.."
and please, though your code in this one was not hard to decipher, use <code> ... <\code> tags around code.
hth
| [reply] [d/l] |
| [reply] |
OTOH... just cause you can use a flag doesn't mean you always should: 433667
| [reply] |
If the "do something" is simple, could just use a one-liner like:
perl -ne " do_stuff() ; print $. . ' '" exportB.xml
Otherwise, your loop seems fine (you could still use $. instead, which shows the current input record number, of $ctr if you wanted -- see perlvar man page for details).
As long as $ctr or whatever you print doesn't have a newline in it, it should "roll" the way you want. In my example above i separated each print with a space.
side note -- what's the nature of "do something here"? read: is this something more suited for XML::Simple or the like? | [reply] [d/l] [select] |