一个文本txt
G01 X0 Y1.5
G03 X-1.5 Y1.5 I-1.5 J0
G01 X-1.5 Y0字符串读每行的内容,我要把字符串里面的值拿出来
比如第一行G就把1拿出来,X就把0拿出来,Y就把1.5拿出来
我用了个函数
比如我现在拿X的值,
double X=double.Parse(read.Substring(read.IndexOf("X")+1,1));
我把X的值拿出来了,但是第二行X的值是-1.5 我怎么把这个Length长度计算出来呢(就是说不能写死的长度);
读第一行字符串的时候 我长度写的是1,第二行我不可能写4把。怎么解决他的通用性质呀。!有更好的函数处理它吗?小弟谢谢各位了!!!!!!

解决方案 »

  1.   

    不知道C#里面有没有像C语言的scanf函数,要是有的话就方面了如果没有,可以一行一行读取文本每一行使用空格进行Split,然后根据第一个字母是G,X,Y等,就知道后面的数字了比如拆分出来
    G01,第1个字符是G,再把G去掉,就是后面的值
    X0
      

  2.   

    double GetValue(string txt,int row,string V)
    {
      string []  line=txt.split("\r\n");
    string []  fds= line[row].split(" ");
    for(int i=0;i<fds.length;i++){
       if(fds[i].subtring(0,1)==V){
              return double.Parse(fds[i].substring(1));
       }
    }
     return 0;
    }
      

  3.   

    C++是这样的
    G = atoi(strName.Mid(strName.Find("G")+1,128));
    都不会有跃界,这个我添多了报错,写少了值又不对
    分字符串我试过了。
    问题是我还要去做判断 他是否是G 或M
    if (read.Contains("G") == true)
                    {
                      G=int.Parse(read.Substring(read.IndexOf("G") + 1, 2));
    }
    G20
    G91
    G99 X1 Y0 I0 J0
    G41
    M07
    G01 X0 Y1.5
    G03 X-1.5 Y1.5 I-1.5 J0
    G01 X-1.5 Y0
    G01 X0 Y8.5
    G01 X1.5 Y-0
    G02 X10 Y-10 I-0 J-10
    G01 X0 Y-1.5
    G01 X-8.5 Y0
    M08
    G40
    M02
    这怎么分割呢??我觉得那个不是很好用·
      

  4.   

                Regex reg = new Regex(@"(?<=G).*(?=X)");
                MessageBox.Show(reg.Match("G01 X0 Y1.5").Value);
                Regex reg = new Regex(@"(?<=(X\d*)).*(?=Y)");
                MessageBox.Show(reg.Match("G01 X0 Y1.5").Value);
                Regex reg = new Regex(@"(?<=Y\d*).*$";
                MessageBox.Show(reg.Match("G01 X0 Y1.5").Value);
      

  5.   

    每一行使用空格进行Split,然后根据第一个字母是G,X,Y等,就知道后面的数字了 up
      

  6.   

    string iniStr = "G03 X-1.5 Y1.5 I-1.5 J0 ";
                string[] str = new string[4];            for (int i = 0; i < 4; i++)
                {
                    str[i] = iniStr.Substring(1, iniStr.IndexOf(' ')-1);
                    iniStr = iniStr.Substring(iniStr.IndexOf(' ') + 1);
                }            for (int i = 0; i < str.Length; i++)
                {
                    Console.Write(str[i].ToString());
                }
                Console.Read();输出为:03-1.51.5-1.50 
      

  7.   


                Regex reg = new Regex(@"(?<=G).*(?=X)");
                MessageBox.Show(reg.Match("G01 X0 Y1.5").Value);
                Regex reg2 = new Regex(@"(?<=(X\d*)).*(?=Y)"); 
                MessageBox.Show(reg2.Match("G01 X0 Y1.5").Value); 
                Regex reg3 = new Regex(@"(?<=(Y\d*)).*"); 
                MessageBox.Show(reg3.Match("G01 X0 Y1.5").Value);
      

  8.   

    文件的读行 readLine 函数
      

  9.   

    先把每行的读出来,再用SPLIT拆分,然后再操作吧
      

  10.   

    C++是这样写的 你看多简单
    if (strName.Find("G") != -1)
    {
    G = atoi(strName.Mid(strName.Find("G")+1,128)); if ( G==0 || G==1 )
    {
    CutBufferCounter++;
    LastGCode=G;
    X = atof(strName.Mid(strName.Find("X")+1,128));
    X = X*TempScale;
    Y = atof(strName.Mid(strName.Find("Y")+1,128));
    Y = Y*TempScale;
    }
      

  11.   

    ,但是第二行X的值是-1.5 我怎么把这个Length长度计算出来呢(就是说不能写死的长度); 
    …………………………………………………………
    你用Y的索引-X的索引-1(减去空格的长度)
      

  12.   

    read:A 20 l 303 r 288 s 108 
    *.Substring(read.IndexOf("l") + 1, read.IndexOf("r") - read.IndexOf("l") - 1);//取303
      

  13.   

    OK了 谢谢了啊  哎  我怎么没想到呢,我去拿空格的索引-1去了,我说怎么老报错啊·!··
    呵呵·zhangyanyang谢谢你了啊··下班了··