parseCsv static method

List<FixedStar> parseCsv(
  1. String text
)

Stars from a file in the format of data/stars/jasne_gwiazdy.csv (see tool/build_fixed_stars.dart). Missing proper motion, parallax and radial velocity are taken as 0; so is a negative parallax (measurement error for distant objects).

Implementation

static List<FixedStar> parseCsv(String text) {
  final lines = [
    for (final line in text.split('\n'))
      if (line.trim().isNotEmpty && !line.startsWith('#')) line,
  ];
  final header = _fields(lines.first);
  int column(String name) => header.indexOf(name);
  final (name, designation, ra, dec, pmra, pmdec, plx, rv, v) = (
    column('nazwa'),
    column('oznaczenie'),
    column('ra'),
    column('dec'),
    column('pmra'),
    column('pmdec'),
    column('plx'),
    column('rv'),
    column('v'),
  );
  return [
    for (final line in lines.skip(1))
      if (_fields(line) case final f)
        FixedStar(
          name: f[name],
          designation: f[designation],
          rightAscension: double.parse(f[ra]),
          declination: double.parse(f[dec]),
          properMotionRa: double.tryParse(f[pmra]) ?? 0,
          properMotionDec: double.tryParse(f[pmdec]) ?? 0,
          parallax: math.max(double.tryParse(f[plx]) ?? 0, 0),
          radialVelocity: double.tryParse(f[rv]) ?? 0,
          magnitude: double.tryParse(f[v]),
        ),
  ];
}