偶们给人做数值计算程序,需要读入一些文本文件.txt或者.dat
里面数据有的是以“空格”分开,有的是以“tab”分开,有的是以“,”分开,而且每行的数据数量不一致,有的多,有的少,有没有好的办法,区分开这三类分隔符的一行数据,如下数据:
12.00
1.000, 2.000,     2.0000      4.5555
4.555另外,数据文件的长短不确定,不知道有多少行,采用arraylist 是否是最好的办法?

解决方案 »

  1.   

    看看是否符合csv格式规范。用csv数据驱动读取看看。
      

  2.   

    每次读取一行,之后split()分开
      

  3.   

    split 要定义一些分隔符号吧另外,csv数据驱动???是虾米东西??新手看
      

  4.   

    你可以在读文件时手动略过所有不需要的字符,如下代码
        class Program
        {
            static void Main()
            {
                //这里我用StringReader做示例,读文件传入StreamReader,他们都是TextReader
                using (StringReader sr = new StringReader("1.2   1.3 ,  1.4\t \r\n 1.5  , \n  1.6 \t , 1.7"))
                {
                    foreach(double d in new MyFilter(sr,'\t',' ','\n','\r', ',').Collect())
                        Console.WriteLine(d);
                }
            }    }    class MyFilter
        {
            readonly char[] spaces;
            TextReader tr;        public MyFilter(TextReader tr, params char[] spaces)
            {
                if (tr == null || spaces == null)
                    throw new ArgumentNullException();
                this.tr = tr;
                this.spaces = spaces;
            }        public double[] Collect()
            {
                List<double> @return = new List<double>();
                StringBuilder sb = new StringBuilder();
                char c;
                while (tr.Peek() != -1)
                {
                    c = (char)tr.Read();
                    if (Array.IndexOf<char>(spaces, c) >= 0)
                    {
                        if (sb.ToString() != String.Empty)
                        {
                            @return.Add(Convert.ToDouble(sb.ToString()));
                            sb = new StringBuilder();
                        }
                        continue;
                    }
                    sb.Append(c);
                }
                if (sb.ToString() != String.Empty)
                {
                    @return.Add(Convert.ToDouble(sb.ToString()));
                    sb = new StringBuilder();
                }
                return @return.ToArray();
            }
        }
      

  5.   

    好像没什么难度,split分隔即可!
      

  6.   

    先replace一下,都变成“,”,然后分。