surface rendering from data points

I have what I thought would be a common situation but so far, after a lot of googling and studying, I am kind of stuck.

I have to render a surface for which I have XYZ data points (on a text file), where XY is a regular grid (but not fully filled). So far, I am defining triangles manually, and computing vertex normals, in order to use GL_TRIANGLES. There is way too many manual things in my way of doing this, so I started searching for a better solution.

My main problems are to sistematically define the triangles and decide which ones share a given vertex.

I have been studying NURBS, bezier surfaces, tessellation and a few other things, but I cannot find a way to plot my surface in an intelligent way.

I should say that I am not a programmer, but someone who learned how to program until now by studying examples found online (which has been quite good so far).