{"record":{"id":"e4e15c24ca429822","repo":"languagetool-org/languagetool","slug":"input-file-does-not-contain-specified-column","errorCode":null,"errorMessage":"Input file does not contain specified column ","messagePattern":"Input file does not contain specified column ","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"languagetool-dev/src/main/java/org/languagetool/dev/RuleDetails.java","lineNumber":103,"sourceCode":"\n    RuleDetails details = new RuleDetails(Languages.getLanguageForShortCode(langCode), ngramPath);\n\n    CSVFormat format = CSVFormat.RFC4180.withFirstRecordAsHeader();\n\n    try (CSVParser parser = CSVParser.parse(new File(inputFile), Charset.defaultCharset(), format)) {\n      try (CSVPrinter printer = new CSVPrinter(new BufferedWriter(new FileWriter(outputFile)), format)) {\n        Map<String, Integer> oldHeader = parser.getHeaderMap();\n        List<String> newHeader = new ArrayList<>(Collections.nCopies(oldHeader.size(), null));\n\n        for (Map.Entry<String, Integer> entry : oldHeader.entrySet()) {\n          newHeader.set(entry.getValue(), entry.getKey());\n        }\n        newHeader.add(\"description\");\n        newHeader.add(\"category\");\n        printer.printRecord(newHeader);\n\n        if (!oldHeader.containsKey(column)) {\n          throw new RuntimeException(\"Input file does not contain specified column \" + column);\n        }\n\n        List<CSVRecord> records = parser.getRecords();\n\n\n        records.stream().sequential().map(record -> {\n          String ruleId = record.get(column);\n          Rule rule = details.getRuleById(ruleId);\n          List<String> transformedValues = new ArrayList<>();\n          record.iterator().forEachRemaining(transformedValues::add);\n          if (rule == null) {\n            transformedValues.add(\"\");\n            transformedValues.add(\"\");\n          } else {\n            transformedValues.add(rule.getDescription());\n            transformedValues.add(rule.getCategory().getId().toString());\n          }\n          return transformedValues;","sourceCodeStart":85,"sourceCodeEnd":121,"githubUrl":"https://github.com/languagetool-org/languagetool/blob/2e990059ce67d5e2a0f7f7ca5d31160c6709df4b/languagetool-dev/src/main/java/org/languagetool/dev/RuleDetails.java#L85-L121","documentation":"RuleDetails.main reads an input CSV and validates that the user-specified column name exists in the original header before transforming records. It throws a RuntimeException when the requested column is absent from the CSV header.","triggerScenarios":"Running RuleDetails with a --column value that does not match any header in the input CSV, including case/whitespace mismatches or columns added only in newer file versions.","commonSituations":"Typo in the column name; using a column name from a different CSV format; BOM or trailing spaces in headers preventing exact match.","solutions":["Check the actual header names in the input CSV and pass an exact match for the column","Run the tool with the column name exactly as spelled in the file (case-sensitive)","Inspect/clean the CSV header (remove BOM, trailing spaces) if the column looks correct"],"exampleFix":"// before\nmvn exec:java ... -Dexec.args=\"--column patternId rules.csv\"\n// after\nhead -1 rules.csv  # confirm header, then use exact name\nmvn exec:java ... -Dexec.args=\"--column pattern_id rules.csv\"","handlingStrategy":"validation","validationCode":"try (CSVParser p = CSVFormat.DEFAULT.parse(reader)) {\n  Set<String> headers = p.getHeaderNames();\n  if (!headers.contains(column)) throw new IllegalArgumentException(\"Column not in CSV: \" + column);\n}","typeGuard":null,"tryCatchPattern":"try { new RuleDetails().main(args); } catch (RuntimeException e) { if (e.getMessage().startsWith(\"Input file does not contain specified column\")) { System.err.println(\"Check header names with: head -1 <csv>\"); } }","preventionTips":["Inspect the CSV header before choosing a column name","Match column names exactly (case, spaces, no BOM)","Pass column names programmatically from the parsed header rather than by hand"],"tags":["csv","column","cli-argument"],"backgroundTag":"invalid-cli-argument","analyzedSha":"2e990059ce67d5e2a0f7f7ca5d31160c6709df4b","analyzedAt":"2026-09-06T09:20:17.015Z","contentChangedAt":"2026-09-06T09:20:17.015Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}