请教~字符串处理~
一个csv文件中有如下内容:1,2,3
1,"2,3",4
1,"""2,3,4,"",5
怎样处理后输入以下内容:
1 2 3
1 2,3 4
1 "2,3,4," 5 --------------------编程问答-------------------- DataTable dt = GetCsvData("D:/temp/", "test");
foreach (DataRow r in dt.Rows) {
r[1] = r[1].ToString().Replace("\"", "");
}
public DataTable GetCsvData(string filePath, string fileName) {
string path = System.IO.Path.Combine(filePath, fileName + ".csv");
string connString = @"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + filePath + ";Extensions=asc,csv,tab,txt;";
DataTable dt = null;
try {
using (System.Data.Odbc.OdbcConnection odbcConn = new System.Data.Odbc.OdbcConnection(connString)) {
odbcConn.Open();
System.Data.Odbc.OdbcCommand oleComm = new System.Data.Odbc.OdbcCommand();
oleComm.Connection = odbcConn;
oleComm.CommandText = "select * from [" + fileName + "#csv]";
System.Data.Odbc.OdbcDataAdapter adapter = new System.Data.Odbc.OdbcDataAdapter(oleComm);
DataSet ds = new DataSet();
adapter.Fill(ds, fileName);
odbcConn.Close();
if (ds.Tables.Count > 0)
dt = ds.Tables[0];
}
}
catch (Exception ex) {
throw ex;
}
return dt;
} --------------------编程问答-------------------- 帮忙顶一下,我也学习一下
--------------------编程问答-------------------- 我刚才测了下,你的csv文件格式不规范,用odbc的方式取的不对,只能逐行处理了
哪里来的这种数据呀 --------------------编程问答--------------------
public DataTable GetCsvByStreamReader(string strF) {--------------------编程问答-------------------- 前两行好办,但第三行是什么规则,为什么是这样的结果?
if (string.IsNullOrEmpty(strF))
return null;
System.IO.FileInfo fileLog = new System.IO.FileInfo(strF);
if (!fileLog.Exists)
return null;
int intColCount = 0;
bool blnFlag = true;
DataTable dt = new DataTable();
DataColumn mydc;
DataRow mydr;
string strline;
string[] aryline;
System.IO.StreamReader mysr = new System.IO.StreamReader(fileLog.FullName);
while ((strline = mysr.ReadLine()) != null) {
aryline = strline.Split(new char[] { '|' });
if (blnFlag) {
blnFlag = false;
intColCount = aryline.Length;
for (int i = 0; i < aryline.Length; i++) {
mydc = new DataColumn(aryline[i]);
dt.Columns.Add(mydc);
}
}
mydr = dt.NewRow();
for (int i = 0; i < intColCount; i++) {
mydr[i] = aryline[i];
}
dt.Rows.Add(mydr);
}
return dt;
}
说明一下规则,光看例子看不出规则来 --------------------编程问答-------------------- List<string> lst=new List<string>();
forach(string s in FileReadAllLines(""))
{
//Regex.Replace
// ""[^""]*"" # 双引号字符串
} --------------------编程问答-------------------- 对啊,主要是第三行不太好办。。。
哎。。。 --------------------编程问答--------------------
第三行没有规律可循啊
--------------------编程问答--------------------
你什么规则?不给规则,让大家怎么处理? --------------------编程问答-------------------- 猜测
分3块
MatchCollection mc = Regex.Matches(yourStr,@"(?m)([^,]+),(.+?),([^,]+$)");--------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 第三行有规律可寻 --------------------编程问答-------------------- 需求不明确, 有一个" 的情况下去除掉? 有多个的情况下, 只剩一个? --------------------编程问答-------------------- 这三个的规则都不相同,要分开处理 --------------------编程问答-------------------- 针对的就是你说的那个字符串么?还是没遇见此类字符串就进行相应改变? --------------------编程问答--------------------
foreach(Match m in mc)
{
m.Groups[1].Value;//第一段
m.Groups[2].Value;//第二段
m.Groups[3].Value;//第三段
}
--------------------编程问答--------------------
string oneline = "1,2,3";
string twoline = "1,\"2,3\",4";
string streeline = "1,\"\"\"2,3,4,\"\",5";
oneline =oneline.Replace(","," ");
twoline = twoline.Replace(",\"", " ").Replace("\",", " ");
streeline = streeline.Replace(",\"\"", " ").Replace(" ,", ",\" ");
第一次见到这样提问的,真是开眼了
给个例子,不说规律;问什么规律,只说有规律可寻;别人给的答案也不说对不对,就在那自说自话
坚强路过。。。
补充:.NET技术 , C#