package timeflow.format.file; import java.util.*; import timeflow.util.*; import timeflow.model.Display; public class DelimitedText { private char delimiter; public DelimitedText(char delimiter) { if (delimiter=='"') throw new IllegalArgumentException("Can't use quote as delimiter."); this.delimiter=delimiter; } private static boolean isBreak(char c) { return c=='\n' || c=='\r'; } public List read(String text) { ArrayList results=new ArrayList(); int n=text.length(); StringBuffer currentToken=new StringBuffer(); ArrayList currentList=new ArrayList(); boolean quoted=false; for (int i=0; i(); if (i0 || currentToken.toString().trim().length()>0) { currentList.add(currentToken.toString()); results.add((String[])currentList.toArray(new String[0])); } return results; } public String write(String s) { return write(new String[] {s}); } public String write(String[] data) { StringBuffer b=new StringBuffer(); for (int i=0; i0) b.append(delimiter); // if null, just don't write anything. if (data[i]==null) continue; // does it have weird characters in it? boolean weird=false; int n=data[i].length(); for (int j=0; j lines=t.read(s); return lines.get(0); } public static void main(String[] args) throws Exception { String bad=IO.read("test/bad-all.txt"); String[][] s=DelimitedFormat.readArrayFromString(bad, System.out); System.out.println("len="+s.length); /* //DelimitedText c=new DelimitedText(';'); //List arrays=c.read(IO.read("test/bad.txt")); //List arrays=c.read("a;b;\"x;y\";c"); //List arrays=c.read("a;\"a\n\rq\";b;\"x;y\";c"); //List arrays=c.read("a;b;\"with a \"\"blah\";c\nd;e;f\ng;h;i"); //List arrays=c.read("a,\"b\",\"c\r\nd\"\r\ne,f,g\nh,i,j"); for (String[] s:arrays) { System.out.println("["+Display.arrayToString(s)+"]"); } */ } }