Ley's assume from my earlier example 'bits' consists of separate values in the form
0.0,0.0,1.0
And that those represent the X,Y,Z values of a point...

points=[] bits.each{|bit| xyz=bit.split(',') xyz.clone.each_with_index{|e, i| xyz[i] = xyz[i].to_f } points << Geom;;Point3d.new(xyz) }

'points' is now an array of Point3d values based on converting the CSV lines' strings into three floats, representing XYZ values.
Assuming that the points are logically ordered you need four for each face of a cube, so you need to have 4 lines x 6 faces, you read the first 4 then the next 4 etc and make a face for each 'set' in turn.
Points will need to be duplicated doing it this way.
If you known it's a simple cube then you only need to define the 4 points making the base and in code pushpull that into a 3d form...