解析csv格式的java函數(shù) | |
|
評論
你的方法的確很輕量級。
之前的一個項目用到csvjdbc(http://sourceforge.net/projects/csvjdbc),提供了Java 訪問 csv 文件的的 JDBC 驅(qū)動,它其實是把一個 csv 文件當做一個數(shù)據(jù)庫表來操作,提供簡單的查詢 回復(fù) 更多評論
之前的一個項目用到csvjdbc(http://sourceforge.net/projects/csvjdbc),提供了Java 訪問 csv 文件的的 JDBC 驅(qū)動,它其實是把一個 csv 文件當做一個數(shù)據(jù)庫表來操作,提供簡單的查詢 回復(fù) 更多評論
應(yīng)網(wǎng)友的要求又用javascript實現(xiàn)了一個。用了正則雖然編碼方便一些,但是難以描述錯誤的格式,所以只能處理結(jié)構(gòu)正確的csv了,而且某些特殊的情況下也有可能解析錯誤:
var st = 'asdf,"""asd,fgg""","asd""fgh","as""d,f""gh",ab cd ef\nasdf,"asd"",""fgg","asd""fgh","as""d,f""gh",ab cd ef\nasdf,"asd,fgg","asd""fgh","as""d,f""gh",ab cd ef';
st = st.replace(/([^,])""([^,])/g,"$1$quote;$2")
st = st.replace(/""/g,"$quote;")
st = st.replace(/,"/g,",$left;")
st = st.replace(/",/g,"$right;,")
var ar = st.split("\n");
var result = [];
for(var i=0;i<ar.length;i++){
var a= ar[i].split(",");
for(var j=0;j<a.length;j++){
if(/\$left;/.test(a[j]) && !(/\$right;/.test(a[j]))){
a[j]=a[j]+","+a[j+1];
a.splice(j+1,1);
j--;
}else{
a[j]=a[j].replace(/(\$left;)|(\$right;)/g,"").replace(/\$quote;/g,'"');
}
}
result[i]= a;
}
document.write("<table border=1>")
for(var i=0;i<result.length;i++){
document.write("<tr>");
for(var j=0;j<result[i].length;j++)
document.write("<td>"+result[i][j]+"</td>");
document.write("</tr>");
}
document.write("</table>")
回復(fù) 更多評論
var st = 'asdf,"""asd,fgg""","asd""fgh","as""d,f""gh",ab cd ef\nasdf,"asd"",""fgg","asd""fgh","as""d,f""gh",ab cd ef\nasdf,"asd,fgg","asd""fgh","as""d,f""gh",ab cd ef';
st = st.replace(/([^,])""([^,])/g,"$1$quote;$2")
st = st.replace(/""/g,"$quote;")
st = st.replace(/,"/g,",$left;")
st = st.replace(/",/g,"$right;,")
var ar = st.split("\n");
var result = [];
for(var i=0;i<ar.length;i++){
var a= ar[i].split(",");
for(var j=0;j<a.length;j++){
if(/\$left;/.test(a[j]) && !(/\$right;/.test(a[j]))){
a[j]=a[j]+","+a[j+1];
a.splice(j+1,1);
j--;
}else{
a[j]=a[j].replace(/(\$left;)|(\$right;)/g,"").replace(/\$quote;/g,'"');
}
}
result[i]= a;
}
document.write("<table border=1>")
for(var i=0;i<result.length;i++){
document.write("<tr>");
for(var j=0;j<result[i].length;j++)
document.write("<td>"+result[i][j]+"</td>");
document.write("</tr>");
}
document.write("</table>")
回復(fù) 更多評論
只有注冊用戶登錄后才能發(fā)表評論。 | ||
![]() |
||
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
|
||
相關(guān)文章:
|
||