[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