When I need to draw datapoints from a external data file I’m using lua, like this:

\starttext

\startluacode

Elemento = {}
x = {}
y ={}
z= {}
carga = {}
i=1
context("\\startMPcode”)

context("numeric u; u := 1.5cm;")
for line in io.lines("molecule.xyz") do
   local a, b, c, d, e = string.match(line, '(%a+)%s*%s*(%S+)%s*%s*(%S+)%s*%s*(%S+)%s*%s*(%S+)')
   Elemento[i]= a
   x[i]= tonumber(b)
   y[i]= tonumber(c)
   z[i]= tonumber(d)
   carga[i]= tonumber(e)

   context("label(\"%s\", (%0.6f u, %0.6f u));", a, x[i],y[i])

   i=i+1 
end

context("\\stopMPcode”)

\stopluacode


\stoptext

Is there a way to pass directly the external data to MetaPost without using Lua?

I know that I can use a similar function to gdata from graph.mp. I try to reuse this piece of code, but not works.

\startMPcode

vardef Grdln_@#(expr f) =
  save n_, s_; string s_;
  s_ = readfrom f;
  string @#[];
  if s_<>EOF:
    @#1 := loptok s_;
    n_ = if @#1="%": 0 else: 1 fi;
    forever:
      @#[incr n_] := loptok s_;
      exitif @#[n_]="  ";
    endfor
    @#1<>"  "
  else: false
  fi
enddef;

Grdln_$("molecule.xyz");

\stopMPcode