大哥们。。我的文本格式是这样的
1.1,2,3
3,2.3,1
1,1,1
3,4,5.6
.....
.....(N行。(大概10000行左右,具体行数不固定。。)
怎么样用正则表达式将里面所有的数字赋给数组啊。。能给段代码并解释下好吗,谢谢。。(先叩谢了。。)

解决方案 »

  1.   

    openFileDialog1.InitialDirectory = ("E:\\C#");
                openFileDialog1.Filter = "Text(*.txt)|*.txt|Word(*.doc)|*doc|all File(*.*)|*.*|TXL(*.Txl)|*.Txl";
                DialogResult r = openFileDialog1.ShowDialog();
                string  filepath = openFileDialog1.FileName;
                if (r == DialogResult.OK)
                {
                    System.IO.FileStream fs;
                    fs = new FileStream(openFileDialog1.FileName,System.IO.FileMode.Open);
                    BinaryReader sr = new BinaryReader(fs);
                    string ss = (sr.ReadChar()).ToString();
                    while(ss!="\r")     //条件
                    {
                        textBox1.Text+=ss;
                        ss = (sr.ReadChar()).ToString();
                    }            }
      

  2.   

    不是这样的,老大,我不想用SPLIT,速度好像很慢,另外我需要的结果是
    文本。。
    1.1,2,3 
    3,2.3,1 
    1,1,1 
    3,4,5.6 
    ....
    结果
    a[1]=1.1
    a[2]=2,a[3]=3,a[4]=3,a[5]=2.3.......,上面的方法分行读出来我还是需要进行SPLIT啊。。不用SPLIT有什么方法可以
    得到我想要的结果啊。
      

  3.   

    用正则更慢。考虑whChina的方法。
      

  4.   

    能给个代码说明吗。。我就是开始用SPLIT觉得速度太慢了,想看看大家有什么好方法。。刚接触C#,不懂的地方太多了。。
      

  5.   

    这个东西还是split比正则快
    不是什么都正则好的
      

  6.   

    可是我现在就是用的SPLIT,很慢啊。。
      using (StreamReader sr = new StreamReader(sfilename))
                {               
                    string text = sr.ReadToEnd();
                    string[] temp = text.Split("\n".ToCharArray());
                    
                    foreach (string str in temp)
                    {
                       if (str == "")  //文本最后几行可能是空行
                        {
                        }
                        else
                        {
                            //MessageBox.Show(aryline[0]);
                            string[] line = str.Split(',');
                     
                            X = Convert.ToDouble(line[0]) / 1000;
                            Y = Convert.ToDouble(line[1]) / 1000;
                            Z = Convert.ToDouble(line[2]) / 1000;
                          .............
    文本文件大概500行就需要2分钟。。我也不知道错误出在哪里了(我电脑2G内存。。不会是我的电脑问题。。)
      

  7.   


    10000行的数据赋给数组,存数据库里面用sql查询起来都很慢,别说存到一个数组里面了.
    先考虑下效率问题吧
      

  8.   

            private void button1_Click(object sender, EventArgs e)
            {
                System.IO.StreamReader  mysr  =  new  System.IO.StreamReader(@"c:\aa.txt");
                DateTime n = DateTime.Now;
                richTextBox1.AppendText(n.ToString()+"\n");
                while((strline  =  mysr.ReadLine())  !=  null)  
                {                                
                    aryline  =  strline.Split(new  char[]{','}); 
                    x= Convert.ToDouble(aryline[0])/1000; //这个数据我在其他地方会使用到 
                    y= Convert.ToDouble(aryline[1])/1000; 
                    z= Convert.ToDouble(aryline[2])/1000;
                    Console.WriteLine("{0},{1},{2}",x,y,z);
                }
                DateTime tt = DateTime.Now;
                richTextBox1.AppendText(tt.ToString()+"\n");
                richTextBox1.AppendText((tt-n).ToString()+"\n");
           }你可以验证一下
    时间很短
    2008-8-1 14:02:46
    2008-8-1 14:02:56
    00:00:10.5468750
    但是上面是有Console输出的,如果这行去掉,那么执行时间如下
    2008-8-1 13:58:06
    2008-8-1 13:58:06
    00:00:00.3437500一秒都不要就完成了所有的操作。
      

  9.   

    忘了说了,我的a.txt文件有3万行
      

  10.   

                Dim re As System.Text.RegularExpressions.Regex
                re = New Regex("^(\d+\.\d+)|(\d+)$")
      这是匹配你文本的正则