public String[] read(long unique) {
    try {
      while (true) {
        String line = reader.readLine();
        if (line == null) return null;

        if (line.trim().length() == 0) continue;

        String[] result = parser.parse(line);

        if (result.length == 0) continue;

        // resolve any global variable references
        for (int rx = 0; rx < result.length; rx++) {
          String val = result[rx];
          if (val.endsWith("}") && (val.startsWith("{") || val.startsWith("${"))) {
            // Object resolved = globals.get(val.replaceAll("\\$|\\{|\\}", ""));
            Object resolved = ValueGenerator.resolveValue(val, globals);
            result[rx] = (resolved != null ? resolved.toString() : "");
            // Logger.getLogger("readValue").info(String.format("resolved var %s -> %s", val,
            // result[rx]));
          }
        }

        return result;
      }
    } catch (Exception e) {
      Logger.getLogger("FileFormatter.read").info("Error reading line: " + e.toString());
      e.printStackTrace();
      return null;
    }
  }