public static YailList fromCsvTable(String csvString) throws Exception { CsvParser csvParser = new CsvParser(new StringReader(csvString)); ArrayList<YailList> csvList = new ArrayList<YailList>(); while (csvParser.hasNext()) { csvList.add(YailList.makeList(csvParser.next())); } csvParser.throwAnyProblem(); return YailList.makeList(csvList); }
private static void makeCsvRow(YailList row, StringBuilder csvStringBuilder) { String fieldDelim = ""; for (Object fieldObj : row.toArray()) { String field = fieldObj.toString(); field = field.replaceAll("\"", "\"\""); csvStringBuilder.append(fieldDelim).append("\"").append(field).append("\""); fieldDelim = ","; } }
// Requires: elements of rows are strings // TODO(sharon): do we want to enforce any consistency constraints here, e.g., // all rows have same number of elements? public static String toCsvTable(YailList csvList) { StringBuilder csvStringBuilder = new StringBuilder(); for (Object rowObj : csvList.toArray()) { makeCsvRow((YailList) rowObj, csvStringBuilder); // http://tools.ietf.org/html/rfc4180 suggests that CSV lines should be // terminated // by CRLF, hence the \r\n. csvStringBuilder.append("\r\n"); } return csvStringBuilder.toString(); }
public static YailList fromCsvRow(String csvString) throws Exception { CsvParser csvParser = new CsvParser(new StringReader(csvString)); if (csvParser.hasNext()) { YailList row = YailList.makeList(csvParser.next()); if (csvParser.hasNext()) { // more than one row is an error throw new IllegalArgumentException("CSV text has multiple rows. Expected just one row."); } csvParser.throwAnyProblem(); return row; } throw new IllegalArgumentException("CSV text cannot be parsed as a row."); }