[GRASS-SVN] r59286 - grass/trunk/raster/r.in.xyz

svn_grass at osgeo.org svn_grass at osgeo.org
Wed Mar 19 19:17:43 PDT 2014


Author: hamish
Date: 2014-03-19 19:17:43 -0700 (Wed, 19 Mar 2014)
New Revision: 59286

Modified:
   grass/trunk/raster/r.in.xyz/main.c
Log:
add skip= option to avoid free-form header lines

Modified: grass/trunk/raster/r.in.xyz/main.c
===================================================================
--- grass/trunk/raster/r.in.xyz/main.c	2014-03-18 18:34:32 UTC (rev 59285)
+++ grass/trunk/raster/r.in.xyz/main.c	2014-03-20 02:17:43 UTC (rev 59286)
@@ -98,14 +98,14 @@
     FILE *in_fp;
     int out_fd;
     char *infile, *outmap;
-    int xcol, ycol, zcol, vcol, max_col, percent;
+    int xcol, ycol, zcol, vcol, max_col, percent, skip_lines;
     int method = -1;
     int bin_n, bin_min, bin_max, bin_sum, bin_sumsq, bin_index;
     double zrange_min, zrange_max, vrange_min, vrange_max, d_tmp;
     char *fs;			/* field delim */
     off_t filesize;
     int linesize;
-    unsigned long estimated_lines;
+    unsigned long estimated_lines, line;
     int from_stdin;
     int can_seek;
 
@@ -120,7 +120,6 @@
     int row, col;		/* counters */
 
     int pass, npasses;
-    unsigned long line;
     char buff[BUFFSIZE];
     double x, y, z;
     char **tokens;
@@ -149,7 +148,7 @@
     struct Option *input_opt, *output_opt, *delim_opt, *percent_opt,
 	*type_opt;
     struct Option *method_opt, *xcol_opt, *ycol_opt, *zcol_opt, *zrange_opt,
-	*zscale_opt, *vcol_opt, *vrange_opt, *vscale_opt;
+	*zscale_opt, *vcol_opt, *vrange_opt, *vscale_opt, *skip_opt;
     struct Option *trim_opt, *pth_opt;
     struct Flag *scan_flag, *shell_style, *skipline;
 
@@ -220,6 +219,16 @@
 	  "z-coordinate column to be filtered by the zrange option");
     zcol_opt->guisection = _("Input");
 
+    skip_opt = G_define_option();
+    skip_opt->key = "skip";
+    skip_opt->type = TYPE_INTEGER;
+    skip_opt->required = NO;
+    skip_opt->multiple = NO;
+    skip_opt->answer = "0";
+    skip_opt->description =
+	_("Number of header lines to skip at top of input file");
+    skip_opt->guisection = _("Input");
+
     zrange_opt = G_define_option();
     zrange_opt->key = "zrange";
     zrange_opt->type = TYPE_DOUBLE;
@@ -330,6 +339,10 @@
     zscale = atof(zscale_opt->answer);
     vscale = atof(vscale_opt->answer);
 
+    skip_lines = atoi(skip_opt->answer);
+    if (skip_lines < 0)
+	G_fatal_error(_("Please specify reasonable number of lines to skip"));
+
     /* parse zrange and vrange */
     if (zrange_opt->answer != NULL) {
 	if (zrange_opt->answers[0] == NULL)
@@ -534,6 +547,12 @@
 	npasses = 1;
     }
 
+    /* skip past header lines */
+    for (line = 0; line < (unsigned long)skip_lines; line++) {
+	if (0 == G_getl2(buff, BUFFSIZE - 1, in_fp))
+	    break;
+    }
+
     if (scan_flag->answer) {
 	if (zrange_opt->answer || vrange_opt->answer)
 	    G_warning(_("Range filters will not be taken into account during scan"));
@@ -581,9 +600,16 @@
 	if (npasses > 1)
 	    G_message(_("Pass #%d (of %d) ..."), pass, npasses);
 
-	if (can_seek)
+	if (can_seek) {
 	    rewind(in_fp);
 
+	    /* skip past header lines again */
+	    for (line = 0; line < (unsigned long)skip_lines; line++) {
+		if (0 == G_getl2(buff, BUFFSIZE - 1, in_fp))
+		    break;
+	    }
+	}
+
 	/* figure out segmentation */
 	pass_north = region.north - (pass - 1) * rows * region.ns_res;
 	if (pass == npasses)
@@ -786,7 +812,6 @@
 	G_message(_("Writing to output raster map..."));
 	for (row = 0; row < rows; row++) {
 
-            G_percent(row, rows, 5);
 	    switch (method) {
 	    case METHOD_N:	/* n is a straight copy */
 		Rast_raster_cpy(raster_row,
@@ -1077,6 +1102,8 @@
 		G_fatal_error("?");
 	    }
 
+	    G_percent(row, rows, 5);
+
 	    /* write out line of raster data */
 	    Rast_put_row(out_fd, raster_row, rtype);
 	}



More information about the grass-commit mailing list