一数据文件格式如下:第一列为行号,第二列为时间戳(单位微秒μS),第三列起是数据;(有不确定的n列浮点数和m列0/1状态数)数据项均以逗号','分隔,回车换行结束。数据实例如下(本例有3列浮点数,2列状态数,实际情况两者是不确定的,可能有19列浮点数,300列状态数...):1,0,24,-4,-13,0,0
2,1250,21,4,-19,0,1
3,2500,15,13,-21,0,1
我的应用是需要将否点数按列画曲线,横坐标为时间戳,纵坐标为该时间戳对应的该列的数值;问题:
如何在程序中建一结构来描述和保存这些数据更有效(首先是易读,其次才是效率),浮点数与状态数分开处理。给出一个正则表达式,能够方便将一行数据拆分成对应的字串数组?[  0]: 1
[  1]: 0
[  2]: 24
[  3]: -4
[  4]: -13
[  5]:0
[  6]: 0

解决方案 »

  1.   


    就不要用正则表达式了。            using (StreamReader sr = new StreamReader("data.txt"))
                {
                    string line;
                    while ( (line = sr.ReadLine()) != null)
                    {
                        string[] tokens = line.Split(new char[] { "," });
                        
                        int lineNum = 0;
                        float f = 0;                    int.TryParse( tokens[0], out lineNum );
                        float.TryParse(tokens[2], out f);
                        //...
                    }
                }
      

  2.   

    Gomoku:
    再请教,能否建一个类对象适应这个数据文件可能的变化呢?这样,将来可以考虑将数据放到对象中,取出或查询就更方便。
      

  3.   

    如果很多列的话全放到一个datatable就不太合适了。
    可以考虑这样
    table1:
    行号,时间戳table2[行号]:
    浮点位table3[行号]:
    符号位正则很简单:
                
                MatchCollection match = Regex.Matches(strFile,@"(?<=,|\n).+?(?=\n|$)");   //按行分存入match 数组            MatchCollection match = Regex.Matches(strFile,@"(?<=,|^).+?(?=,|$)");   //按逗号分
      

  4.   

    (? <=, ¦^).+?(?=, ¦$) //按逗号分 测试发现以上存在语法错误(估计是拼写错误),改了之后结果还不对。
    (?<=,|^).+?(?=,|$)
      

  5.   

    我测过才放上来的
    你在程序一个一个字符自己打,最好的测试工具是.net
      

  6.   

    string[] tokens = srline.Split(new char[] {","});显示错误:
    错误 1 无法将类型“string”隐式转换为“char” Form1.cs 43 59 ComTReader如何进行显式的转换呢? 需要将字串逗号","转换为字符?
      

  7.   


    string[] tokens = srline.Split(new char[] {','});