[GRASSLIST:6823] Re: struggling with v.in.ascii
Hamish
hamish_nospam at yahoo.com
Fri May 20 03:22:59 EDT 2005
> since I am still struggling with v.in.ascii, I had a closer look at
> the code and made some weird observations (meaning: I don't understand
> what I see).
>
> to set the scene:
> I am using GRASS on a debian/testing system, but grass compiled from
> source.
Same here.
32bit i386 standard everything? compile time optimizations?
Did you try the Debain 6.0.0 package? (v.in.ascii has been updated
since then for MacOS9 input file support [ie G_getl2()]).
> s.in.ascii in grass54 is reading the file (see below) without
> problems. v.in.ascii in grass61cvs from today is checking the file and
> comes up with the right conclusions about the number of columns and
> the respective data types (see below), but is not writing anything to
> the resulting vector dataset (it contains only a database link).
It works fine for me using the sample data below.
Adding '-z z=3' makes nodes=5, points=5 (last two points share same
x,y).
> > more points.txt
> 248445.02 700247.69 39.31 66
> 248445.02 700247.88 39.36 56
> 248445.02 700248.06 39.22 50
> 248445.02 700248.00 39.13 50
> 248445.02 700248.00 39.12 50
can you send this file to me as a gzip'd attachment? (to preserve any
weird newlines, etc)
> Looking at the code:
> The function points_analyse (called in in.c, line 195) goes through
> the input file and should write, amongst other things, the lines
> containing actual data to the file tmpascii.
Yes; I don't know how necessary it is to write out the entire datafile
as an intermediary step but that's the way it is right now.
> But, I found tmpascii to be empty after this function call (printed
> ascii and tmpascii to stdout => ascii: copy of input file and
> tmpascii: nothing)
>
> That's why the function points_to_bin (called in in.c, line 385)
> cannot fetch any data.
why "w+" and not "w" on line 190 of in.c?
tmp = G_tempfile();
if (NULL == (tmpascii = fopen(tmp, "w+"))) {
*** ==> Does the following work? <== ***
GRASS> g.tempfile pid=$$
> The while-loop in (points.c, line 172) is never entered, because the
> file G_getl2 is supposed to read is empty.
yup.
> What I don't understand is that writing of a dataline to tmpascii in
> the function points_analyse (points.c, line 90) seems to be
> successful. The return value of fprintf states 29 chars were written.
> When I write the same to stdout it looks okay, as well. What happens
> to tmpascii ?
temp files are stored in $MAPSET/.tmp/$HOST/ anything in there?
> Clues are more than welcome.
g.gisenv set="DEBUG=5"
> v.in.ascii works just perfect, if I put "ascii" instead of "tmpascii"
> in the call of the function points_to_bin (in.c line 385).
Is that what these next two cases represent?
> GRASS 6.1.cvs (aberfoyle61):~ > v.in.ascii in=points.txt format=point
> \ fs=' ' out=test1
> Maximum input row length: 29
> Maximum number of columns: 4
> Minimum number of columns: 4
> column: 1 type: double
> column: 2 type: double
> column: 3 type: double
> column: 4 type: integer
> Building topology ...
> 0 primitives registered
> 0 areas built
> 0 isles built
> Attaching islands:
> Attaching centroids: Topology was built.
> Number of nodes : 0
> Number of primitives: 0
> Number of points : 0
> Number of lines : 0
> Number of boundaries: 0
> Number of centroids : 0
> Number of areas : 0
> Number of isles : 0
>
>
> GRASS 6.1.cvs (aberfoyle61):~ > v.in in=points.txt format=point \
> fs=' ' out=test2
> Maximum input row length: 29
> Maximum number of columns: 4
> Minimum number of columns: 4
> column: 1 type: double
> column: 2 type: double
> column: 3 type: double
> column: 4 type: integer
> Building topology ...
> 5 primitives registered
> Building areas: 100%
> 0 areas built
> 0 isles built
> Attaching islands:
> Attaching centroids: 100%
> Topology was built.
> Number of nodes : 4
> Number of primitives: 5
> Number of points : 5
> Number of lines : 0
> Number of boundaries: 0
> Number of centroids : 0
> Number of areas : 0
> Number of isles : 0
>
>
?
Hamish
More information about the grass-user
mailing list