C++读取OBJ文件 对于f数据 取出任意自己想要的数据
2015-05-13 13:25
316 查看
C++读取OBJ文件 对于f数据 取出任意自己想要的数据
自己建了一个1.txt
文件内容如下
f 77959/79546/77959 37781/38039/37783 37770/38028/37772
f 77959/79546/77959 58979/59636/58979 37781/38039/37783
f 77960/79547/77960 66852/67777/66852 2586/2621/2588
f 8189/8230/8191 9490/9533/9492 21242/21342/21244
f 62968/63763/62968 71857/73031/71857 62957/63752/62957
取出每个数据存放起来
代码如下:
关键问题就是要熟悉函数
fscanf().
自己建了一个1.txt
文件内容如下
f 77959/79546/77959 37781/38039/37783 37770/38028/37772
f 77959/79546/77959 58979/59636/58979 37781/38039/37783
f 77960/79547/77960 66852/67777/66852 2586/2621/2588
f 8189/8230/8191 9490/9533/9492 21242/21342/21244
f 62968/63763/62968 71857/73031/71857 62957/63752/62957
取出每个数据存放起来
代码如下:
#include<stdio.h> #include<iostream> #include<string> #include<fstream> #include<sstream> using namespace std; int main() { FILE *fp; char ext[1000]; string tempStr, lineStr; bool end_of_file = false; double a, b, c; int vnum=0; int fnum=0; //char m[30],n[30],q[30]; int m,n,q,m1,n1,q1,m2,n2,q2; //if ((fp = _wfopen(L"C:\\Users\\DELL\\Desktop\\M1-91(YINHU)-jm17w-zhk.obj", L"r")) == NULL) // return false; if ((fp = _wfopen(L"C:\\Users\\DELL\\Desktop\\1.txt", L"r")) == NULL) return false; //------------统计总数 定点和面片—————————————— //for(int jj=0;jj<20000000;jj++) while(!feof(fp)) { fscanf(fp, "%s", ext);//读取文件第一行的“OFF” //cout<<ext<<"\n"; if(ext[0]=='v'&&ext[1]=='\0') { vnum++; } int i=0,j=0,k=0; if(ext[0]=='f'&&ext[1]=='\0') { fnum++; } //if (strcmp(ext, "OFF") != 0 && strcmp(ext, "off") != 0)//判断文件格式是否是“OFF” // return false; //读取文件第二行的顶点数和面数 //fscanf(fp, "%d%d%d\n", &a, &b, &c); //创建顶点和面数组 //} } cout<<"vnum="<<vnum<<" "<<"fnum="<<fnum<<"\n"; fseek(fp,0,SEEK_SET); //———————————————读取顶底和面片信息———————————— /* //for(int jj=0;jj<20000000;jj++) while(!feof(fp)) { fscanf(fp, "%s", ext);//读取文件第一行的“OFF” //cout<<ext<<"\n"; if(ext[0]=='v'&&ext[1]=='\0') { fscanf(fp, "%lf%lf%lf\n", &a, &b, &c); cout << a <<" "<< b<<" " << c<<" " << "\n"; } int i=0,j=0,k=0; if(ext[0]=='f'&&ext[1]=='\0') { fscanf(fp, "%s%s%s", &m, &n, &q); for (int kk = 0; m[kk] != '/'; kk++) { i = i * 10 + (m[kk] - 48); } for (int kk = 0; n[kk] != '/'; kk++) { j = j * 10 + (n[kk] - 48); } for (int kk = 0; q[kk] != '/'; kk++) { k = k * 10 + (q[kk] - 48); } cout << i <<" "<< j<<" " << k<<" " << "\n"; } //if (strcmp(ext, "OFF") != 0 && strcmp(ext, "off") != 0)//判断文件格式是否是“OFF” // return false; //读取文件第二行的顶点数和面数 //fscanf(fp, "%d%d%d\n", &a, &b, &c); //创建顶点和面数组 //} } */ //————————————读取顶底和面片信息(纹理、法向量)—————— while(!feof(fp)) { fscanf(fp, "%s", ext);//读取文件第一行的“OFF” int i=0,j=0,k=0; if(ext[0]=='f'&&ext[1]=='\0') { fscanf(fp, "%d/%d/%d%d/%d/%d%d/%d/%d", &m, &n, &q,&m1,&n1,&q1,&m2,&n2,&q2); cout<<m<<" "<<n<<" "<<q<<" "<<m1<<" "<<n1<<" "<<q1<<" "<<m2<<" "<<n2<<" "<<q2<<"\n"; } } fclose(fp); }运行结果如下
关键问题就是要熟悉函数
fscanf().
相关文章推荐
- C++读取OBJ文件中的数据(VS2013)
- 读取csv文件转换成你自己想要格式的数据
- c++读取obj文件的数据 其中f中只取面片定点数据
- 自己编写的一个程序:读取XML格式的日志文件,并以一定的数据写入数据库中
- 用C#读取C/C++中struct数据类型生成的文件
- 关于C++二进制文件读取转换,数据版本升级,增加字段等结构调整工具的思路。
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
- 【转载】C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
- C编写以二进制读取文件(任意格式eg :图片),保存到C语言数据格式的TXT文档
- C++利用CStdioFile从txt文件中读取数据
- c++输入文件处理按行读取并且将实现对一行数据分别处理
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组
- C++ 把输出结果写入文件/从文件中读取数据
- .stl文件(CAD三维模型)格式 及 基于C/C++的数据读取
- 从C++文件中读取数据到vector的简捷方法
- java 读取文件——按照行取出(使用BufferedReader和一次将数据保存到内存两种实现方式)
- C/C++语言之由数字26引起的文件的数据保存与读取调试。
- C++ 简单读写文本文件、统计文件的行数、读取文件数据到数组