tomatocans
asked on
Print Problem
Following is the code for the print statement.
I am trying to get it to print a | after every Part except the last one.
if ($SendLineToLeftover) {
#
# Send the left overs to a file.
#
print LEFT substr($Line, 1), "\n"; # Remove the space added earlier
}
else {
#
# Print the other lines (modified) to standard out.
#
# Create the new line from its parts
$NewLine = "";
for ($i = 1; $i < $LastPartPlus1-1; $i++) {
$NewLine = $NewLine . $Part[$i] . "|";
}
print OUT $NewLine." \n";
}
}
I am trying to get it to print a | after every Part except the last one.
if ($SendLineToLeftover) {
#
# Send the left overs to a file.
#
print LEFT substr($Line, 1), "\n"; # Remove the space added earlier
}
else {
#
# Print the other lines (modified) to standard out.
#
# Create the new line from its parts
$NewLine = "";
for ($i = 1; $i < $LastPartPlus1-1; $i++) {
$NewLine = $NewLine . $Part[$i] . "|";
}
print OUT $NewLine." \n";
}
}
Actually, it looks like you are only interested in @Part from 1 to $LastPartPlus1-2, so
$NewLine=join("|",@Part[1. .$LastPart Plus1-2]);
$NewLine=join("|",@Part[1.
ASKER
Rob,
Following is the whole script:
#! /usr/local/bin/perl
open(RAW, "< /data/oag/jan/oag.0199.dat ");
unlink "left_over.txt";
open(LEFT, "> /data/oag/jan/left_over.tx t");
open(OUT, "> /data/oag/jan/oag.0199.dbl oad");
while (defined($Line = <RAW>))
{
# Add a leading character so that awk's 1-based
# second substr parameter will work
$Line = " " . $Line;
$SendLineToLeftover = 0; #FALSE
chomp $Line;
$i = 1;
$Part[$i] = substr($Line,1,4); $i++;
$Part[$i] = substr($Line,5,4); $i++;
$Part[$i] = substr($Line,10,4); $i++;
$Part[$i] = substr($Line,14,4); $i++;
$Part[$i] = substr($Line,18,4); $i++;
$Part[$i] = substr($Line,22,4); $i++;
$Part[$i] = substr($Line,27,4); $i++;
$Part[$i] = substr($Line,31,1); $i++;
$Part[$i] = substr($Line,32,4); $i++;
$Part[$i] = substr($Line,36,4); $i++;
$Part[$i] = substr($Line,40,1); $i++;
$Part[$i] = substr($Line,41,3); $i++;
$Part[$i] = substr($Line,44,5); $i++;
$Part[$i] = substr($Line,54,1); $i++;
$Part[$i] = substr($Line,55,1); $i++;
$Part[$i] = substr($Line,56,1); $i++;
$Part[$i] = substr($Line,57,1); $i++;
$Part[$i] = substr($Line,58,1); $i++;
$Part[$i] = substr($Line,59,1); $i++;
$Part[$i] = substr($Line,60,1); $i++;
$Part[$i] = substr($Line,61,1); $i++;
$Part[$i] = substr($Line,62,1); $i++;
$Part[$i] = substr($Line,63,4); $i++;
$Part[$i] = substr($Line,67,4); $i++;
$Part[$i] = substr($Line,71,4); $i++;
$Part[$i] = substr($Line,75,3); $i++;
$Part[$i] = substr($Line,78,3); $i++;
$Part[$i] = substr($Line,81,6); $i++;
$Part[$i] = substr($Line,87,6); $i++;
$Part[$i] = substr($Line,93,6); $i++;
$Part[$i] = substr($Line,99,6); $i++;
$Part[$i] = substr($Line,105,3); $i++;
$Part[$i] = substr($Line,109,3); $i++;
$Part[$i] = substr($Line,113,2); $i++;
$Part[$i] = substr($Line,115,1); $i++;
$Part[$i] = substr($Line,116,3); $i++;
$Part[$i] = substr($Line,119,1); $i++;
$Part[$i] = " "; $i++;
$Part[$i] = substr($Line,124,27); $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$LastPartPlus1 = $i;
if ($Part[29] =~ /[0-9]{5}[KROM\{]/) {
$Part[29] = "+" . substr($Part[29],0,5);
}
elsif ($Part[29] =~ /[0-9]{5}[ABCDEFGHIJLNPQ\} ]/) {
$Part[29] = "-" . substr($Part[29],0,5);
}
else {
$SendLineToLeftover = 1; #TRUE
}
if ($Part[31] =~ /[0-9]{5}[KROM\{]/) {
$Part[31] = "+" . substr($Part[31],0,5);
}
elsif ($Part[31] =~ /[0-9]{5}[ABCDEFGHIJLNPQ\} ]/) {
$Part[31] = "-" . substr($Part[31],0,5);
}
else {
$SendLineToLeftover = 1; #TRUE
}
if ($SendLineToLeftover) {
#
# Send the left overs to a file.
#
print LEFT substr($Line, 1), "\n"; # Remove the space added earlier
}
else {
#
# Print the other lines (modified) to standard out.
#
# Create the new line from its parts
$NewLine = "";
for ($i = 1; $i < $LastPartPlus1; $i++) {
$NewLine = $NewLine . $Part[$i] . "|";
}
print OUT $NewLine." \n";
}
}
close LEFT;
close RAW;
close OUT;
Following is the whole script:
#! /usr/local/bin/perl
open(RAW, "< /data/oag/jan/oag.0199.dat
unlink "left_over.txt";
open(LEFT, "> /data/oag/jan/left_over.tx
open(OUT, "> /data/oag/jan/oag.0199.dbl
while (defined($Line = <RAW>))
{
# Add a leading character so that awk's 1-based
# second substr parameter will work
$Line = " " . $Line;
$SendLineToLeftover = 0; #FALSE
chomp $Line;
$i = 1;
$Part[$i] = substr($Line,1,4); $i++;
$Part[$i] = substr($Line,5,4); $i++;
$Part[$i] = substr($Line,10,4); $i++;
$Part[$i] = substr($Line,14,4); $i++;
$Part[$i] = substr($Line,18,4); $i++;
$Part[$i] = substr($Line,22,4); $i++;
$Part[$i] = substr($Line,27,4); $i++;
$Part[$i] = substr($Line,31,1); $i++;
$Part[$i] = substr($Line,32,4); $i++;
$Part[$i] = substr($Line,36,4); $i++;
$Part[$i] = substr($Line,40,1); $i++;
$Part[$i] = substr($Line,41,3); $i++;
$Part[$i] = substr($Line,44,5); $i++;
$Part[$i] = substr($Line,54,1); $i++;
$Part[$i] = substr($Line,55,1); $i++;
$Part[$i] = substr($Line,56,1); $i++;
$Part[$i] = substr($Line,57,1); $i++;
$Part[$i] = substr($Line,58,1); $i++;
$Part[$i] = substr($Line,59,1); $i++;
$Part[$i] = substr($Line,60,1); $i++;
$Part[$i] = substr($Line,61,1); $i++;
$Part[$i] = substr($Line,62,1); $i++;
$Part[$i] = substr($Line,63,4); $i++;
$Part[$i] = substr($Line,67,4); $i++;
$Part[$i] = substr($Line,71,4); $i++;
$Part[$i] = substr($Line,75,3); $i++;
$Part[$i] = substr($Line,78,3); $i++;
$Part[$i] = substr($Line,81,6); $i++;
$Part[$i] = substr($Line,87,6); $i++;
$Part[$i] = substr($Line,93,6); $i++;
$Part[$i] = substr($Line,99,6); $i++;
$Part[$i] = substr($Line,105,3); $i++;
$Part[$i] = substr($Line,109,3); $i++;
$Part[$i] = substr($Line,113,2); $i++;
$Part[$i] = substr($Line,115,1); $i++;
$Part[$i] = substr($Line,116,3); $i++;
$Part[$i] = substr($Line,119,1); $i++;
$Part[$i] = " "; $i++;
$Part[$i] = substr($Line,124,27); $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$LastPartPlus1 = $i;
if ($Part[29] =~ /[0-9]{5}[KROM\{]/) {
$Part[29] = "+" . substr($Part[29],0,5);
}
elsif ($Part[29] =~ /[0-9]{5}[ABCDEFGHIJLNPQ\}
$Part[29] = "-" . substr($Part[29],0,5);
}
else {
$SendLineToLeftover = 1; #TRUE
}
if ($Part[31] =~ /[0-9]{5}[KROM\{]/) {
$Part[31] = "+" . substr($Part[31],0,5);
}
elsif ($Part[31] =~ /[0-9]{5}[ABCDEFGHIJLNPQ\}
$Part[31] = "-" . substr($Part[31],0,5);
}
else {
$SendLineToLeftover = 1; #TRUE
}
if ($SendLineToLeftover) {
#
# Send the left overs to a file.
#
print LEFT substr($Line, 1), "\n"; # Remove the space added earlier
}
else {
#
# Print the other lines (modified) to standard out.
#
# Create the new line from its parts
$NewLine = "";
for ($i = 1; $i < $LastPartPlus1; $i++) {
$NewLine = $NewLine . $Part[$i] . "|";
}
print OUT $NewLine." \n";
}
}
close LEFT;
close RAW;
close OUT;
You could replace a lot of your $Part[$i] = substr statements with an unpack function
ASKER
what's an unpack function
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
replaced
else {
#
# Print the other lines (modified) to standard out.
#
# Create the new line from its parts
$NewLine = "";
for ($i = 1; $i < $LastPartPlus1; $i++) {
$NewLine = $NewLine . $Part[$i] . "|";
}
print OUT $NewLine." \n";
}
}
with
else {
#
# Print the other lines (modified) to standard out.
#
# Create the new line from its parts
$NewLine = "";
$NewLine=join("|",@Part[1. .#@Part]);
print OUT $NewLine." \n";
}
}
keep getting missing right brack error
else {
#
# Print the other lines (modified) to standard out.
#
# Create the new line from its parts
$NewLine = "";
for ($i = 1; $i < $LastPartPlus1; $i++) {
$NewLine = $NewLine . $Part[$i] . "|";
}
print OUT $NewLine." \n";
}
}
with
else {
#
# Print the other lines (modified) to standard out.
#
# Create the new line from its parts
$NewLine = "";
$NewLine=join("|",@Part[1.
print OUT $NewLine." \n";
}
}
keep getting missing right brack error
Best I can tell, you need to get rid of the second to last bracket
ASKER
Getting more syntax errors:
#! /usr/local/bin/perl
open(RAW, "< /data/oag/jan/oag.0199.dat ");
unlink "left_over.txt";
open(LEFT, "> /data/oag/jan/left_over.tx t");
open(OUT, "> /data/oag/jan/oag.0199.dbl oad");
while (defined($Line = <RAW>))
{
# Add a leading character so that awk's 1-based
# second substr parameter will work
$Line = " " . $Line;
$SendLineToLeftover = 0; #FALSE
chomp $Line;
$i = 1;
$Part[$i] = substr($Line,1,4); $i++;
$Part[$i] = substr($Line,5,4); $i++;
$Part[$i] = substr($Line,10,4); $i++;
$Part[$i] = substr($Line,14,4); $i++;
$Part[$i] = substr($Line,18,4); $i++;
$Part[$i] = substr($Line,22,4); $i++;
$Part[$i] = substr($Line,27,4); $i++;
$Part[$i] = substr($Line,31,1); $i++;
$Part[$i] = substr($Line,32,4); $i++;
$Part[$i] = substr($Line,36,4); $i++;
$Part[$i] = substr($Line,40,1); $i++;
$Part[$i] = substr($Line,41,3); $i++;
$Part[$i] = substr($Line,44,5); $i++;
$Part[$i] = substr($Line,54,1); $i++;
$Part[$i] = substr($Line,55,1); $i++;
$Part[$i] = substr($Line,56,1); $i++;
$Part[$i] = substr($Line,57,1); $i++;
$Part[$i] = substr($Line,58,1); $i++;
$Part[$i] = substr($Line,59,1); $i++;
$Part[$i] = substr($Line,60,1); $i++;
$Part[$i] = substr($Line,61,1); $i++;
$Part[$i] = substr($Line,62,1); $i++;
$Part[$i] = substr($Line,63,4); $i++;
$Part[$i] = substr($Line,67,4); $i++;
$Part[$i] = substr($Line,71,4); $i++;
$Part[$i] = substr($Line,75,3); $i++;
$Part[$i] = substr($Line,78,3); $i++;
$Part[$i] = substr($Line,81,6); $i++;
$Part[$i] = substr($Line,87,6); $i++;
$Part[$i] = substr($Line,93,6); $i++;
$Part[$i] = substr($Line,99,6); $i++;
$Part[$i] = substr($Line,105,3); $i++;
$Part[$i] = substr($Line,109,3); $i++;
$Part[$i] = substr($Line,113,2); $i++;
$Part[$i] = substr($Line,115,1); $i++;
$Part[$i] = substr($Line,116,3); $i++;
$Part[$i] = substr($Line,119,1); $i++;
$Part[$i] = " "; $i++;
$Part[$i] = substr($Line,124,27); $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$LastPartPlus1 = $i;
if ($Part[29] =~ /[0-9]{5}[KROM\{]/) {
$Part[29] = "+" . substr($Part[29],0,5);
}
elsif ($Part[29] =~ /[0-9]{5}[ABCDEFGHIJLNPQ\} ]/) {
$Part[29] = "-" . substr($Part[29],0,5);
}
else {
$SendLineToLeftover = 1; #TRUE
}
if ($Part[31] =~ /[0-9]{5}[KROM\{]/) {
$Part[31] = "+" . substr($Part[31],0,5);
}
elsif ($Part[31] =~ /[0-9]{5}[ABCDEFGHIJLNPQ\} ]/) {
$Part[31] = "-" . substr($Part[31],0,5);
}
else {
$SendLineToLeftover = 1; #TRUE
}
if ($SendLineToLeftover) {
#
# Send the left overs to a file.
#
print LEFT substr($Line, 1), "\n"; # Remove the space added earlier
}
else {
#
# Print the other lines (modified) to standard out.
#
# Create the new line from its parts
$NewLine = "";
for ($i = 1; $i < $LastPartPlus1; $i++) {
$NewLine = $NewLine . $Part[$i] . "|";
}
print OUT $NewLine." \n";
}
}
close LEFT;
close RAW;
close OUT;
can u say exactly how u would chnage this code to eliminate the last |
thanks
#! /usr/local/bin/perl
open(RAW, "< /data/oag/jan/oag.0199.dat
unlink "left_over.txt";
open(LEFT, "> /data/oag/jan/left_over.tx
open(OUT, "> /data/oag/jan/oag.0199.dbl
while (defined($Line = <RAW>))
{
# Add a leading character so that awk's 1-based
# second substr parameter will work
$Line = " " . $Line;
$SendLineToLeftover = 0; #FALSE
chomp $Line;
$i = 1;
$Part[$i] = substr($Line,1,4); $i++;
$Part[$i] = substr($Line,5,4); $i++;
$Part[$i] = substr($Line,10,4); $i++;
$Part[$i] = substr($Line,14,4); $i++;
$Part[$i] = substr($Line,18,4); $i++;
$Part[$i] = substr($Line,22,4); $i++;
$Part[$i] = substr($Line,27,4); $i++;
$Part[$i] = substr($Line,31,1); $i++;
$Part[$i] = substr($Line,32,4); $i++;
$Part[$i] = substr($Line,36,4); $i++;
$Part[$i] = substr($Line,40,1); $i++;
$Part[$i] = substr($Line,41,3); $i++;
$Part[$i] = substr($Line,44,5); $i++;
$Part[$i] = substr($Line,54,1); $i++;
$Part[$i] = substr($Line,55,1); $i++;
$Part[$i] = substr($Line,56,1); $i++;
$Part[$i] = substr($Line,57,1); $i++;
$Part[$i] = substr($Line,58,1); $i++;
$Part[$i] = substr($Line,59,1); $i++;
$Part[$i] = substr($Line,60,1); $i++;
$Part[$i] = substr($Line,61,1); $i++;
$Part[$i] = substr($Line,62,1); $i++;
$Part[$i] = substr($Line,63,4); $i++;
$Part[$i] = substr($Line,67,4); $i++;
$Part[$i] = substr($Line,71,4); $i++;
$Part[$i] = substr($Line,75,3); $i++;
$Part[$i] = substr($Line,78,3); $i++;
$Part[$i] = substr($Line,81,6); $i++;
$Part[$i] = substr($Line,87,6); $i++;
$Part[$i] = substr($Line,93,6); $i++;
$Part[$i] = substr($Line,99,6); $i++;
$Part[$i] = substr($Line,105,3); $i++;
$Part[$i] = substr($Line,109,3); $i++;
$Part[$i] = substr($Line,113,2); $i++;
$Part[$i] = substr($Line,115,1); $i++;
$Part[$i] = substr($Line,116,3); $i++;
$Part[$i] = substr($Line,119,1); $i++;
$Part[$i] = " "; $i++;
$Part[$i] = substr($Line,124,27); $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$Part[$i] = " "; $i++;
$LastPartPlus1 = $i;
if ($Part[29] =~ /[0-9]{5}[KROM\{]/) {
$Part[29] = "+" . substr($Part[29],0,5);
}
elsif ($Part[29] =~ /[0-9]{5}[ABCDEFGHIJLNPQ\}
$Part[29] = "-" . substr($Part[29],0,5);
}
else {
$SendLineToLeftover = 1; #TRUE
}
if ($Part[31] =~ /[0-9]{5}[KROM\{]/) {
$Part[31] = "+" . substr($Part[31],0,5);
}
elsif ($Part[31] =~ /[0-9]{5}[ABCDEFGHIJLNPQ\}
$Part[31] = "-" . substr($Part[31],0,5);
}
else {
$SendLineToLeftover = 1; #TRUE
}
if ($SendLineToLeftover) {
#
# Send the left overs to a file.
#
print LEFT substr($Line, 1), "\n"; # Remove the space added earlier
}
else {
#
# Print the other lines (modified) to standard out.
#
# Create the new line from its parts
$NewLine = "";
for ($i = 1; $i < $LastPartPlus1; $i++) {
$NewLine = $NewLine . $Part[$i] . "|";
}
print OUT $NewLine." \n";
}
}
close LEFT;
close RAW;
close OUT;
can u say exactly how u would chnage this code to eliminate the last |
thanks
The last comment is the original script? Has it ever worked without syntax errors? Need to see the actual error statement(s) generated by perl. I don't have time, right now, to rewrite the script for you. As far as I can tell, the second to last bracket, right after the print OUT $NewLine."\n";, needs to be deleted.
ASKER
The only problem with the last sript is that a | is placed after the last field of output
chop $NewLine;
print OUT $NewLine." \n";
print OUT $NewLine." \n";
ASKER
Thanks
$NewLine=join("|",@Part);
or maybe I don't understand the intent of the script.