package com.yeshi.fanli.util;
|
|
import java.io.BufferedReader;
|
import java.io.FileReader;
|
import java.io.InputStreamReader;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.regex.Matcher;
|
import java.util.regex.Pattern;
|
|
/**
|
* CsvParser
|
*/
|
public class CsvParser {
|
// Saved input CSV file pathname
|
private String inputCsvFile;
|
|
// Space mark , ; : etc.
|
private String spaceMark = ",";
|
|
/**
|
* Contructor
|
*
|
* @param inputCsvFile
|
*/
|
public CsvParser(String inputCsvFile, String spaceMark) {
|
this.inputCsvFile = inputCsvFile;
|
this.spaceMark = spaceMark;
|
}
|
|
/**
|
* Contructor
|
*
|
* @param inputCsvFile
|
*/
|
public CsvParser(String inputCsvFile) {
|
this.inputCsvFile = inputCsvFile;
|
this.spaceMark = ",";
|
}
|
|
/**
|
* Get parsed array from CSV file
|
*
|
* @return
|
*/
|
public Object[] getParsedArray() throws Exception {
|
List<List<String>> retval = new ArrayList<List<String>>();
|
|
String regExp = getRegExp();
|
BufferedReader in = new BufferedReader(new FileReader(this.inputCsvFile));
|
String strLine;
|
String str = "";
|
|
while ((strLine = in.readLine()) != null) {
|
Pattern pattern = Pattern.compile(regExp);
|
Matcher matcher = pattern.matcher(strLine);
|
List<String> listTemp = new ArrayList<String>();
|
while (matcher.find()) {
|
str = matcher.group();
|
str = str.trim();
|
|
if (str.endsWith(spaceMark)) {
|
str = str.substring(0, str.length() - 1);
|
str = str.trim();
|
}
|
|
if (str.startsWith("\"") && str.endsWith("\"")) {
|
str = str.substring(1, str.length() - 1);
|
if (CsvParser.isExisted("\"\"", str)) {
|
str = str.replaceAll("\"\"", "\"");
|
}
|
}
|
|
if (!"".equals(str)) {
|
listTemp.add(str);
|
}
|
}
|
|
// Add to retval
|
retval.add(listTemp);
|
}
|
in.close();
|
|
return retval.toArray();
|
}
|
|
/**
|
* Regular Expression for CSV parse
|
*
|
* @return
|
*/
|
private String getRegExp() {
|
// TODO 未完
|
|
StringBuffer strRegExps = new StringBuffer();
|
|
return strRegExps.toString();
|
}
|
|
/**
|
* If argChar is exist in argStr
|
*
|
* @param argChar
|
* @param argStr
|
* @return
|
*/
|
private static boolean isExisted(String argChar, String argStr) {
|
|
boolean blnReturnValue = false;
|
if ((argStr.indexOf(argChar) >= 0) && (argStr.indexOf(argChar) <= argStr.length())) {
|
blnReturnValue = true;
|
}
|
return blnReturnValue;
|
}
|
|
/**
|
* Test
|
*
|
* @param args
|
* @throws Exception
|
*/
|
public static void main(String[] args) throws Exception {
|
CsvParser parser = new CsvParser("C:\\Users\\IBM_ADMIN\\Desktop\\Test CSV Files\\dummydata_not quoted_1.csv");
|
// CsvParser parser=new CsvParser("C:\\Users\\IBM_ADMIN\\Desktop\\Test
|
// CSV Files\\dummydata_not quoted_2.csv");
|
// CsvParser parser=new CsvParser("C:\\Users\\IBM_ADMIN\\Desktop\\Test
|
// CSV Files\\dummydata_quoted.csv");
|
// CsvParser parser=new CsvParser("C:\\Users\\IBM_ADMIN\\Desktop\\Test
|
// CSV Files\\dummydata_quoted_2.csv");
|
|
// CsvParser parser=new CsvParser("C:\\Users\\IBM_ADMIN\\Desktop\\Test
|
// CSV Files\\dummydata_1.csv",";");
|
// CsvParser parser=new CsvParser("C:\\Users\\IBM_ADMIN\\Desktop\\Test
|
// CSV Files\\dummydata_2.csv",":");
|
|
Object[] arr = parser.getParsedArray();
|
// System.out.println(arr);
|
|
for (Object obj : arr) {
|
System.out.print("[");
|
|
List<String> ls = (List<String>) obj;
|
|
for (String item : ls) {
|
System.out.println(item + ",");
|
}
|
|
System.out.println("],");
|
}
|
}
|
}
|