Mercurial Hosting > luan
view core/src/luan/modules/parsers/Csv.java @ 728:11839152caef
remove stripe
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 10 Jun 2016 14:58:46 -0600 |
parents | bb3818249dfb |
children |
line wrap: on
line source
package luan.modules.parsers; import luan.LuanTable; public final class Csv { public static LuanTable toList(String line) throws ParseException { return new Csv(line).parse(); } private final Parser parser; private Csv(String line) { this.parser = new Parser(line); } private ParseException exception(String msg) { return new ParseException(parser,msg); } private LuanTable parse() throws ParseException { LuanTable list = new LuanTable(); while(true) { Spaces(); String field = parseField(); list.rawPut(list.rawLength()+1,field); Spaces(); if( parser.endOfInput() ) return list; if( !parser.match(',') ) throw exception("unexpected char"); } } private String parseField() throws ParseException { parser.begin(); String rtn; if( parser.match('"') ) { int start = parser.currentIndex(); do { if( parser.endOfInput() ) { parser.failure(); throw exception("unclosed quote"); } } while( parser.noneOf("\"") ); rtn = parser.textFrom(start); parser.match('"'); } else { int start = parser.currentIndex(); while( !parser.endOfInput() && parser.noneOf(",") ); rtn = parser.textFrom(start).trim(); } return parser.success(rtn); } private void Spaces() { while( parser.anyOf(" \t") ); } }