这个函数是一个工业数控上的G代码编译程序, G代码的格式如下,我把它存在了记事本中。现在利用CStdioFile fs.Open打开文件,然后利用ReadString对文件的每一行进行读取。读取出来一行字符串后在接着对字符串中的字符进行处理。现在的关键问题是程序按行读取字符串没有问题。可是要求程序有循环指令,也就是遇到G22就要进行循环,它的循环体式G22到G80之间的行数.
G代码格式: G22 L4 G1 U-120 V-110 U120 V110 G80 M60 G0 X-123 Y0 Z0 M62 G22 L4 G1 U120 V-110 U-120 V-110 G80 M60 M00 G0 X123 Y0 Z0 M62 G22 L4 G1 U-120 V-110 U120 V-110 G80 M60 部分代码 if(fs.Open(SourPath, CFile::modeRead | CFile::typeText)) while(1) { if(fs.ReadString(str1)==NULL)break; // 利用ReadString读取每一行代码 str1 ='
'; //在行结束的时候给它加上一个换行符 while(str1[n]!='
') //对字符串中的每个字符进行判断 { switch(str1[n]) { case 'X':case 'x': Read(str1,n,xn); //如果有X,就把X后边的数字读取出来,赋值给xn,以备下边的处理。 bX=true; break; case 'Y':case 'y': Read(str1,n,yn); bY=true; break; case 'Z':case 'z': Read(str1,n,zn); bZ=true; break; case 'U':case 'u': ReadNum(str1,n,un1); bU=true; break; case 'V':case 'v': ReadNum(str1,n,vn); bV=true; break; case 'W':case 'w': Read(str1,n,wn); bW=true; break; case 'G':case 'g': //如果遇到G,就把G后边的数字读取出来。 Read(str1,n,code); switch(code) { //5 case 0: case 1: case 2: case 3: Line=code; break; case 4: //G04暂停G04 X或者是P,X和P都为暂停时间,单位不一样 case 17: case 18: case 19: PlanGroup=code; break; case 22: bG22=true;
case 80: //绝对值方式编程 bG80=true; break; break; default: break; } switch(str1[n])判断到这里一个字符判断完毕
n ; } while(str1[n]!='
') |