当前位置:编程学习 > C#/ASP.NET >>

请教~字符串处理~

一个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
  // ""[^""]*""   #     双引号字符串

} --------------------编程问答-------------------- 对啊,主要是第三行不太好办。。。
哎。。。 --------------------编程问答--------------------
第三行没有规律可循啊
--------------------编程问答--------------------
引用 7 楼 xuboskydream 的回复:
对啊,主要是第三行不太好办。。。
哎。。。


你什么规则?不给规则,让大家怎么处理? --------------------编程问答-------------------- 猜测
分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(" ,", ",\" ");
--------------------编程问答--------------------
引用 13 楼 xuboskydream 的回复:
第三行有规律可寻


第一次见到这样提问的,真是开眼了

给个例子,不说规律;问什么规律,只说有规律可寻;别人给的答案也不说对不对,就在那自说自话

坚强路过。。。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,