954,541 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

White space at the end of .csv file

We have a script that creates a .csv file that in turn is fed into a python script. Our .csv file is being generated with a line feed at the bottom, and this is hammering the python script. Is there a way to get rid of that extra line that is being generated?

Thanks
DS

drsmith
Light Poster
41 posts since Oct 2007
Reputation Points: 10
Solved Threads: 0
 

So are you in control of either the producer or consumer, source code wise?

Is the producer a perl script?

Salem
Posting Sage
Team Colleague
11,531 posts since Dec 2005
Reputation Points: 5,862
Solved Threads: 953
 

Yes...we produce the offending .csv file. Can't seem to get it to create without their being a blank line at the bottom.

drsmith
Light Poster
41 posts since Oct 2007
Reputation Points: 10
Solved Threads: 0
 

Well we could guess, or you could post code.

Salem
Posting Sage
Team Colleague
11,531 posts since Dec 2005
Reputation Points: 5,862
Solved Threads: 953
 

Sorry, here is the code. Was hoping there was something obvious to use.

#!/awips/dev/per15/bin/perl
#
################################################################################
#
#  This program will parse out MAX, MIN, PRECIP, SNOWFALL, SNOW DEPTH from 
#  the file WRKPCP and place in a file that will be used for GIS 
#  GRAPHICS injestion.
#
################################################################################
#
# delete any outdated TOPWRKPCP files
#
unlink </awips/dev/localapps/kmltools/WRKPCP>;
#
# call new file into program directory.
#
#
$pil1="TOPWRKPCP";
$textdbCMD = "textdb -r ".$pil1." > /awips/dev/localapps/kmltools/WRKPCP";
$textdb = `$textdbCMD`;
#
# copy all of the lines in WRKPCP first
#
$i=1;
open (PCP1, "< /awips/dev/localapps/kmltools/WRKPCP");
while (<PCP1>) {
 $line1[$i]=$_;
 #print "$line1[$i]\n";
 $count1=$i;
 ++$i;
}
close (PCP1);
#
# copy all lat and long
#
$k=1;
open (PCP2, "< /awips/dev/localapps/kmltools/pcplatlon.txt");
while (<PCP2>) {
 $line2[$k]=$_;
 #print "$line2[$k]\n";
 $count2=$k;
 ++$k;
}
close (PCP2);
#
#  ....start parsing
#
#
for ($i=1; $i<=$count1; ++$i){

     if ($line1[$i] =~/.{5}?\:/){
         #print "hey this should  be a line\n";
         $line1[$i] =~/(.{5}?)\:(.{26}?)\:.{2}?(.{5}?).{1}?(.{5}?).{3}?(.{5}?).{3}?(.{4}?).{2}?(.{2}?)/;
         $site[$i]=$1;
	 $location[$i]=$2;
	 $high[$i]=$3;
	 $low[$i]=$4;
	 $precip[$i]=$5;
	 $snowfall[$i]=$6;
	 $snowdepth[$i]=$7;
     }
}
for ($k=1; $k<=$count2; ++$k){

     if ($line2[$k] =~/^[A-Z]{3}.+?/ || $line2[$k] =~/^[A-Z]{5}.+?/){
         #print "hey this should  be a line2\n";
         $line2[$k] =~/(.{5}?).+?([A-Z]{3}).+?([0-9]{2}\.[0-9]{4}).+?(\-[0-9]{2}\.[0-9]{4}).+?/ || $line2[$k] =~/(.{3}?).+?([A-Z]{3}).+?([0-9]{2}\.[0-9]{4}).+?(\-[0-9]{2}\.[0-9]{4}).+?/;
         $site3[$k]=$1;
	 $cwa[$k]=$2;
	 $lat[$k]=$3;
	 $lon[$k]=$4;
     }
}
#
# ...post process to remove empty characters
#
for ($i=1; $i<=$count1; ++$i){
     #print "site= $site[$i]\n";
     if ($site[$i]=~/[A-Z]{4}[0-9]{1}/){
         #print "this 5 string line must occur\n";
         $site1[$i]= $site[$i]; 
     }
     else {
         $site[$i]=~/([A-Z]{3}).+?/;
	 $site1[$i]= $1;
     }
     if ($high[$i] eq "     "){
        $high1[$i]= "";
     }
     else {
        $high1[$i]=int($high[$i]);
     }
     if ( $low[$i] eq "     "){
         $low1[$i]= "";
     }
     else {
          $low1[$i]=int($low[$i]);
     }
}
#
#
#
$num=1;
# if highs equal number then keep        
#
#
#   eliminate blank lines.............
#
#
#
@num=0;
$sline=1;
for ($i=1; $i<=$count1; ++$i){
     if ($site[$i]=~/[A-Z]{3}.+?/ || $site[$i]=~/[A-Z]{5}.+?/){
         $num[$sline]=$i;
	 $tline=$sline;
	 #print "tline=  $tline\n";
	 ++$sline;
     }
}

$m=1;
$spacer2="  ";
for ($j=$num[1]; $j<=$num[$tline]; ++$j){
     $site2[$m]=$site1[$j];
     if ($site1[$j]=~/[A-Z]{4}[0-9]{1}/){
         $site5[$m]=$site1[$j];
     }
     else {
          $site5[$m]=$site1[$j].$spacer2;
     }
     $location2[$m]=$location[$j];
     $high2[$m]=$high1[$j];
     $low2[$m]=$low1[$j];
     $precip2[$m]=$precip1[$j];
     $snowfall2[$m]=$snowfall1[$j];
     $snowdepth2[$m]=$snowdepth1[$j];
     $endnum=$m;
     ++$m;
}
for ($i=1; $i<=$endnum; ++$i){
     $location3[$i]=$location2[$i];
     #print "location3= $location3[$i]\n";
     if ( $location3[$i]=~/^\s+.*?\s+/){
      #print "this is a match\n";
      $location3[$i]=~/^\s+(.*?)\s+/;
      $location4[$i]=$1;
     }
     #print "location= $location2[$i] location without trailing space= $location4[$i]\n"; 
}
$num=1;
# if highs equal number then keep      
for ($i=1; $i<=$endnum; ++$i){
    if ($high2[$i]=~/[0-9]{2}/ || $high2[$i]=~/[0-9]{3}/ ){
        $lnum[$num]=$i;
	#print "lnum= $lnum[$num] high1= $high1[$i]\n";
	++$num;
    }
}

for ($i=1; $i<=$endnum; ++$i){
     #print "STD     LOCATION                     HIGH   LOW    PCPN   SNOWFALL   SNOWDEPTH\n";
     #print "$site2[$i]      $location2[$i]         $high2[$i]     $low2[$i]    $precip2[$i]     $snowfall2[$i]      $snowdepth2[$i]\n";
     #print "cwa= $cwa[$i]    lattitude= $lat[$i]    longitude= $lon[$i]\n";
}
# station ID's
$stnid[1]="KS-CD-99";
$stnid[2]="KS-LY-99";
$stnid[3]="KS-SN-99";
$stnid[4]="KS-DG-99";

265 of the stnid

#
#
$spacer=" ";
$spacer3=",";
$newsnow="NA";
$snowdepth="NA";
$waterequiv="NA";
#
for ($i=1; $i<=$num; ++$i){
     for ($j=1; $j<=$endnum; ++$j){
          #print "site2=$site2[$i]and site3=$site3[$j]end\n";
	  if ($site2[$lnum[$i]] eq $site3[$j]){
	      #print "hey there site2= $site2[$lnum[$i]] site3= $site3[$j] \n";
	      #print "lnum=$lnum[$i] i= $i\n";
              $finline1[$i]=$stnid[$lnum[$i]].$spacer3.$location4[$lnum[$i]].$spacer3.$lat[$j].$spacer3.$lon[$j].$spacer3.$high2[$lnum[$i]].$spacer3.$low2[$lnum[$i]].$spacer3.$newsnow.$spacer3.$snowdepth.$spacer3.$waterequiv;
	    #$finline[$i]=$site5[$i].$spacer3.$cwa[$j].$spacer3.$lat[$j].$spacer3.$lon[$j].$spacer3.$location2[$i].$spacer3.$high2[$i].$spacer3.$low2[$i].$spacer3.$precip2[$i].$spacer3.$snowfall2[$i].$spacer3.$snowdepth2[$i];
	    #$finline[$i]=$site5[$i].$spacer3.$cwa[$j].$spacer3.$lat[$j].$spacer3.$lon[$j].$spacer3.$location2[$i].$spacer3.$high2[$i].$spacer3.$low2[$i].$spacer3.$precip2[$i].$spacer3.$snowfall2[$i].$spacer3.$snowdepth2[$i];
	    #print "$finline[$i]\n";
	  }
      }  
     #print "STD     LOCATION                     HIGH   LOW    PCPN   SNOWFALL   SNOWDEPTH\n";
     #print "$site2[$i]      $location2[$i]         $high2[$i]     $low2[$i]    $precip2[$i]     $snowfall2[$i]      $snowdepth2[$i]\n";
     #print "cwa= $cwa[$i]    lattitude= $lat[$i]    longitude= $lon[$i]\n";
}
$q=1;
for ($j=1; $j<=$num; ++$j){
     if ($finline1[$j]=~/KS\-[A-Z]{2}\-[0-9]{2}.+/){
     #print "hey this has KS in it\n";
     $num1=$q;
     $finline[$q]=$finline1[$j];
     print "q= $q and $finline[$q]\n";
     ++$q;
     } 
}

#$finline[0]="SID,CWA,LATITUDE,LONGITUDE,LOCATION,HIGH,LOW,PCPN,SF,SD";
#print "finline= $finline[0]\n";
#
#... format
#
#unlink </data/local/GIS/WRKGIS.txt>;
unlink </awips/dev/localapps/kmltools/WRKGIS1.csv>;
#
#open (MLB2, "> /awips/dev/localapps/kmltools/WRKGIS1.txt");
#print @finline;
# write(MLB1);
#format MLB1=
#SID,CWA,LATITUDE,LONGITUDE,LOCATION,HIGH,LOW,PCPN,SF,SD
#.
close (MLB1);

#close(my @finline);

print " num1= $num1\n";

#$q=$q-1;

#print " the new q= $q\n";

#open (MLB2, ">> /data/local/GIS/WRKGIS.txt");
open (MLB2, ">> /awips/dev/localapps/kmltools/WRKGIS1.csv");
for ($i=1; $i<=$num1; ++$i){
 if ($finline[$i] =~/[A-Z]+/ ){
 write(MLB2);
format MLB2=
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$finline[$i];
.
 }
}
close (MLB2);
#
#$i=1;
#open (PCP5, "< /awips/dev/localapps/kmltools/WRKGIS.csv");
#while (<PCP5>) {
# if ($line2[$i] =~/[A-Z]+/ ){
#  $line2[$i]=$_;
#  $line2[$i] >> "/awips/dev/localapps/kmltools/WRKGIS1.csv";
#  print "$line2[$i]\n";
#  $count1=$i;
#  ++$i;
# }
#}
#close (PCP5);

#open (MLB3, ">> /awips/dev/localapps/kmltools/WRKGIS1.csv");
#while (<MLB3> {
#    print @line2;
#}
#close (MLB3);
#
#...send out
#    	 
##$pil10="TOPWRKGIS";
##$textdbCMD = "textdb -w ".$pil10." </home/gargan/WRKGIS";
##$textdb = `$textdbCMD`;
drsmith
Light Poster
41 posts since Oct 2007
Reputation Points: 10
Solved Threads: 0
 

just a guess, in this block of code:

#open (MLB2, ">> /data/local/GIS/WRKGIS.txt");
open (MLB2, ">> /awips/dev/localapps/kmltools/WRKGIS1.csv");
for ($i=1; $i<=$num1; ++$i){
 if ($finline[$i] =~/[A-Z]+/ ){
 write(MLB2);
format MLB2=
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$finline[$i];
.
 }
}


change$i<=$num1 to $i<$num1

KevinADC
Posting Shark
921 posts since Mar 2006
Reputation Points: 246
Solved Threads: 67
 

We attempted that but it did not work. We are now looking at how to handle it the blank line through the python script we feed the .csv file to. Thanks

drsmith
Light Poster
41 posts since Oct 2007
Reputation Points: 10
Solved Threads: 0
 

OK, good luck.

KevinADC
Posting Shark
921 posts since Mar 2006
Reputation Points: 246
Solved Threads: 67
 

This question has already been solved

Post: Markdown Syntax: Formatting Help
You