docs: @Override
      public void writeFile(String arg0, Map result) {
  
          // Initial variables
          BufferedWriter bwB;                         // output object
          StringBuilder sbData = new StringBuilder(); // construct the data info in the output
  
          try {
  
              // Set default value for missing data
              setDefVal();
  
              // Get version number
              if (dssatVerStr == null) {
                  dssatVerStr = getObjectOr(result, "crop_model_version", "").replaceAll("\\D", "");
                  if (!dssatVerStr.matches("\\d+")) {
                      dssatVerStr = DssatVersion.DSSAT45.toString();
                  }
              }
  
              // Initial BufferedWriter
              arg0 = revisePath(arg0);
              outputFile = new File(arg0 + "DSSBatch.v" + dssatVerStr);
              bwB = new BufferedWriter(new FileWriter(outputFile));
  
              // Output Batch File
              // Titel Section
              String crop = getCropName(result);
              String dssatPath = "C:\\DSSAT" + dssatVerStr + "\\";
              String exFileName = getFileName(result, "X");
              int expNo = 1;
  
              // Write title section
              sbData.append("$BATCH(").append(crop).append(")\r\n!\r\n");
              sbData.append(String.format("! Command Line : %1$sDSCSM0%2$s.EXE B DSSBatch.v%2$s\r\n", dssatPath, dssatVerStr));
              sbData.append("! Crop         : ").append(crop).append("\r\n");
              sbData.append("! Experiment   : ").append(exFileName).append("\r\n");
              sbData.append("! ExpNo        : ").append(expNo).append("\r\n");
              sbData.append(String.format("! Debug        : %1$sDSCSM0%2$s.EXE \" B DSSBatch.v%2$s\"\r\n!\r\n", dssatPath, dssatVerStr));
  
              // Body Section
              sbData.append("@FILEX                                                                                        TRTNO     RP     SQ     OP     CO\r\n");
              // Get DSSAT Sequence info
              HashMap dssatSeqData = getObjectOr(result, "dssat_sequence", new HashMap());
              ArrayList<HashMap> dssatSeqArr = getObjectOr(dssatSeqData, "data", new ArrayList<HashMap>());
              // If missing, set default value
              if (dssatSeqArr.isEmpty()) {
                  HashMap tmp = new HashMap();
                  tmp.put("sq", "1");
                  tmp.put("op", "1");
                  tmp.put("co", "0");
                  dssatSeqArr.add(tmp);
              }
              // Output all info
              for (HashMap dssatSeqSubData : dssatSeqArr) {
                  sbData.append(String.format("%1$-92s %2$6s %3$6s %4$6s %5$6s %6$6s", exFileName, "1", "1", getObjectOr(dssatSeqSubData, "sq", "1"), getObjectOr(dssatSeqSubData, "op", "1"), getObjectOr(dssatSeqSubData, "co", "0")));
              }
  
              // Output finish
              bwB.write(sbError.toString());
              bwB.write(sbData.toString());
              bwB.close();
          } catch (IOException e) {
              LOG.error(DssatCommonOutput.getStackTrace(e));
          }
      }