On 24/04/2012 18:37, Paul Clark wrote:
> Hi All,
> 
> I have a small project that is stumping me aside from using a
> straight brute force.
> 
> I am processing output from an accounting program that is producing 
> some sort of printer control for some 3rd party print processing. I 
> have several partial lines that have commands to "over write" the 
> line to create bold type. I need combine the lines:
> 
> 1                    Balance Due:
> 0                    Balance Due:            $567.23
> 0                                                    $567.23       Before Due 
> Date:
> 0 Before Due Date:   06/15/12 
> 0 06/15/12
> 
> So the output line should be:
> 
> Balance Due: $567.23 Before Due Date: 06/15/12
> 
> 
> The problem is the lines can be variable so I cannot just use substr
> to copy parts of lines. The brute force was I was going to use is to
> just create an output array for the line and loop through each line
> position by position and if the character was not a space, set that
> position in the output array to the character in the input line.
> 
> Any suggestions for a more elegant solution?

Hello Paul

First of all, when starting a new thread on this list please create a
new email instead of replying to an existing message. Otherwise your
question appears to be threaded as a further comment on an old question.

I imagine the output lines aren't as shown in your mail? I presume the
text to be overwritten appears in the same character colums as in the
preceding lines? Something more like

1                    Balance Due:
0                    Balance Due:            $567.23
0                                            $567.23        Before Due Date:
0                                                           Before Due Date: 
06/15/12
0                                                                            
06/15/12

I would use substr together with the predefined Perl arrays @- and @+ to
overwrite a line buffer with the non-space substrings within each line.
Read about the arrays at

  http://perldoc.perl.org/perlvar.html#Variables-related-to-regular-expressions

Note that the optional fourth parameter of substr replaces the specified
substring.

This piece of code shows the idea.

HTH,

Rob


use strict;
use warnings;

my $line;

while (<DATA>) {

  s/\s+$//;

  my $short = length($_) - length($line);
  $line .= ' ' x $short if $short > 0;

  while (/(\S+)/g) {
    my $beg = $-[1];
    my $len = $+[1] - $-[1];
    substr $line, $beg, $len, $1;
  }
}

print $line;

__DATA__
1                    Balance Due:
0                    Balance Due:            $567.23
0                                            $567.23        Before Due Date:
0                                                           Before Due Date: 
06/15/12
0                                                                            
06/15/12

**OUTPUT**

0                    Balance Due:            $567.23        Before Due Date: 
06/15/12

-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to