385.0000 
 -999.2500  -999.2500    67.9240     2.0666     1.4081     0.1000  -999.2500    
 -999.2500    21.6660 
  395.0000
 -999.2500  -999.2500    68.4528     2.0593     1.4192     0.1000  -999.2500
 -999.2500    21.6660 
  405.0000 
 -999.2500  -999.2500    70.0220     2.0547     1.4306     0.1000  -999.2500
 -999.2500    21.6374 
  上面是部分数据,我要绘制曲线,其中385.0000、395.0000和405.0000为x轴坐标,其余的数为9条不同的曲线在y轴的坐标,(这里只写了3组y轴坐标)像这种不是一行下来,中间换行的数据格式应该怎么读取?是否要用到正则表达式什么的?请大家帮帮忙。

解决方案 »

  1.   

    数据来源与哪里? 硬件设备?txt文件?
      

  2.   

    同上?还是已经存到了String中?
      

  3.   

    streamreader.ReadLine一行行读出数据,然后用空格来拆分字符串,最后逐个转换成double数据。至于数据的整合,相对比较简单,毕竟有规律。
      

  4.   

    我也写不出来 除非能 知道什么是X 什么是Y
    比如
     X 385.0000 
     Y -999.2500  -999.2500    67.9240     2.0666     1.4081     0.1000  -999.2500    
      -999.2500    21.6660 
      

  5.   

    回楼上,就是第一行是x,后两行是9条不同曲线在x处的y坐标值,有人能给出比较详细的代码么?
      

  6.   

    StreamReader sr=new StreamReader(@"c:\test.txt");
    while(true)
    {
    try
    {
    string X=sr.ReadLine().Trim();
    string[] Y=Regex.Split(sr.ReadLine().Trim()+" "+sr.ReadLine().Trim()," +");
    }
    catch
    {
    break;
    }
    }
    sr.Close();//大概这样
      

  7.   

    回楼上,多谢了,另外,要是y坐标不仅仅占两行,而是不确定,如下格式
    x   385.0000
    y   数据
        数据
        .....
    x   395.0000
    y   数据
        数据
        .....
    这样,还有办法读么?
      

  8.   

    另外,如果这些数据在某个函数中已经由下列语句
    StreamReader sr = File.OpenText(fstr);
    String s = sr.ReadLine();
    一行一行存入String 中,又该怎么做?
      

  9.   

    没有规律怎么读出来
    没办法确定哪行是什么数据了如果可以知道,一个x后面必然跟9个y坐标
    这样的话,是可以的
    加一个计数器
    一行行的读,然后找到第一个作为x,然后连续找到的9个作为y
    再开始找到的又作为第一个处理这样是可以的
      

  10.   

    确定第一行肯定是x,就一个数,其后数行y的个数i也可以确定,但y的行数不确定,要得到一个字符串数组。
      

  11.   

    StreamReader sr=new StreamReader(@"c:\test.txt");
    while(true)
    {
    try
    {
    string X=sr.ReadLine().Trim();
    string strY=sr.ReadLine().Trim();
    string[] Y=Regex.Split(strY," +");
    int i=9;//i为Y个数
    while(Y.Length!=i)
    {
    strY=(strY+" "+sr.ReadLine().Trim()).Trim();
    Y=Regex.Split(strY," +");
    }
    }
    catch
    {
    break;
    }
    }
    sr.Close();//大概这样实际上 每次ReadLine 就是取一行数据,就算你事先已经都取出来 这里换成相应数据就好