public static List<String[]> readCSVTable(Readable source, int cell_num) throws IOException {
		@SuppressWarnings("resource")
		Scanner in = new Scanner(source);
		List<String[]> vals = new ArrayList<String[]>();
		String exp = "^(.*)";
		for (int i = 1; i < cell_num; i++) {
			exp += ",(.*)";
		}
		Pattern pat = Pattern.compile(exp, Pattern.MULTILINE);
		while (in.hasNextLine()) {
			String line = in.findInLine(pat);
			if (line == null) {
				String nextLine = in.nextLine();
				if (nextLine.equals(""))
					continue;
				else
					throw new IOException("input format error");
			} else {
				if (line.split(",").length != cell_num) {
					throw new IOException("input format error");
				}
				String[] cells = new String[cell_num];
				MatchResult match = in.match();
				for (int i = 0; i < cell_num; i++)
					cells[i] = match.group(i + 1);
				vals.add(cells);
				in.nextLine();
			}
		}
		IOException ex = in.ioException();
		if (ex != null)
			throw ex;
		return vals;
	}