data.txt中数据格式为:
-3.00000000000000E+0001 3.00000000000000E+0001 1.41790802462861E+0001
-2.90000000000000E+0001 3.00000000000000E+0001 1.36591880340699E+0001
-2.80000000000000E+0001 3.00000000000000E+0001 1.31611965915303E+0001
-2.70000000000000E+0001 3.00000000000000E+0001 1.26845463044215E+0001
-2.60000000000000E+0001 3.00000000000000E+0001 1.22287192650106E+0001
-2.50000000000000E+0001 3.00000000000000E+0001 1.17932357563260E+0001
-2.40000000000000E+0001 3.00000000000000E+0001 1.13776511425486E+0001
-2.30000000000000E+0001 3.00000000000000E+0001 1.09815531113487E+0001
... ...程序如下:
...
int LineNum; ///数据的行数
double *pOriginX,*pOriginY,*pOriginZ; ///数据存储的地址
CString m_OriginData; ///存储文件内容
...void CInput::OnOpenfile()
{
// TODO: Add your control notification handler code here
CFileDialog fileDlg(TRUE);
fileDlg.m_ofn.lpstrTitle="导入坐标数据文件";
fileDlg.m_ofn.lpstrFilter="Text Files(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0";
fileDlg.m_ofn.lpstrDefExt="txt";
if(IDOK==fileDlg.DoModal())
{
CFile file;
file.Open(fileDlg.GetPathName(),CFile::modeRead);
int nlen =file.GetLength();//The length of the file.
char *pBuffer=new char[nlen+1];//建立一个存储数据的缓冲区
file.Read(pBuffer,nlen); //Reads data into a buffer
pBuffer[nlen+1]='\0';
file.Close();
GetDlgItem(IDC_DISPLAY)->SetWindowText(pBuffer);///////////////////////////////////////////////////////////////////
CStdioFile file1;
CString str;
file1.Open(fileDlg.GetPathName(),CFile::modeRead);//The full path of the file.
while(file1.ReadString(str)) //读取文件一行的内容
{
LineNum++;
}
file1.SeekToBegin(); //Sets the value of the file pointer to the beginning of the file.
///////////////////////////////////以上程序段获得数据文件的行数,以确定动态数组的大小。
double *chX= new double[LineNum];
double *chY= new double[LineNum];
double *chZ= new double[LineNum];//////定义存放XYZ坐标的变长数组;
pOriginX=chX;
pOriginY=chY;
pOriginZ=chZ; //指向变长数组; for(int k=0;k<LineNum;k++)
{
*(pOriginX+k)=0;
*(pOriginY+k)=0;
*(pOriginZ+k)=0;
} ///先将变长数组清0
for(int i=0;i<LineNum;i++)
{
file1.ReadString(str); //modeRead
char ch[100];
sprintf(ch,"%s",str); //Write formatted data to a string.
int strlength=str.GetLength(); //A count of the bytes in the string.
for(int j=0;j<strlength;j++)
{
//怎样才能把坐标区分开来分别存入数组中呢????这个部分我不会写~~~
}
}
}
}
-3.00000000000000E+0001 3.00000000000000E+0001 1.41790802462861E+0001
-2.90000000000000E+0001 3.00000000000000E+0001 1.36591880340699E+0001
-2.80000000000000E+0001 3.00000000000000E+0001 1.31611965915303E+0001
-2.70000000000000E+0001 3.00000000000000E+0001 1.26845463044215E+0001
-2.60000000000000E+0001 3.00000000000000E+0001 1.22287192650106E+0001
-2.50000000000000E+0001 3.00000000000000E+0001 1.17932357563260E+0001
-2.40000000000000E+0001 3.00000000000000E+0001 1.13776511425486E+0001
-2.30000000000000E+0001 3.00000000000000E+0001 1.09815531113487E+0001
... ...程序如下:
...
int LineNum; ///数据的行数
double *pOriginX,*pOriginY,*pOriginZ; ///数据存储的地址
CString m_OriginData; ///存储文件内容
...void CInput::OnOpenfile()
{
// TODO: Add your control notification handler code here
CFileDialog fileDlg(TRUE);
fileDlg.m_ofn.lpstrTitle="导入坐标数据文件";
fileDlg.m_ofn.lpstrFilter="Text Files(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0";
fileDlg.m_ofn.lpstrDefExt="txt";
if(IDOK==fileDlg.DoModal())
{
CFile file;
file.Open(fileDlg.GetPathName(),CFile::modeRead);
int nlen =file.GetLength();//The length of the file.
char *pBuffer=new char[nlen+1];//建立一个存储数据的缓冲区
file.Read(pBuffer,nlen); //Reads data into a buffer
pBuffer[nlen+1]='\0';
file.Close();
GetDlgItem(IDC_DISPLAY)->SetWindowText(pBuffer);///////////////////////////////////////////////////////////////////
CStdioFile file1;
CString str;
file1.Open(fileDlg.GetPathName(),CFile::modeRead);//The full path of the file.
while(file1.ReadString(str)) //读取文件一行的内容
{
LineNum++;
}
file1.SeekToBegin(); //Sets the value of the file pointer to the beginning of the file.
///////////////////////////////////以上程序段获得数据文件的行数,以确定动态数组的大小。
double *chX= new double[LineNum];
double *chY= new double[LineNum];
double *chZ= new double[LineNum];//////定义存放XYZ坐标的变长数组;
pOriginX=chX;
pOriginY=chY;
pOriginZ=chZ; //指向变长数组; for(int k=0;k<LineNum;k++)
{
*(pOriginX+k)=0;
*(pOriginY+k)=0;
*(pOriginZ+k)=0;
} ///先将变长数组清0
for(int i=0;i<LineNum;i++)
{
file1.ReadString(str); //modeRead
char ch[100];
sprintf(ch,"%s",str); //Write formatted data to a string.
int strlength=str.GetLength(); //A count of the bytes in the string.
for(int j=0;j<strlength;j++)
{
//怎样才能把坐标区分开来分别存入数组中呢????这个部分我不会写~~~
}
}
}
}
解决方案 »
- Button的单击事件中能够传递list ctrl表的参数吗?
- vc2003打印问题! “DocumentProperties”: 即使使用参数相关的查找,也未找到标识符
- 菜鸟高分求解:关于DLL编写调用!
- 关于一个C++的类的问题
- 如何使CEdit的滚动条自动显示
- 如何给list control动态的加入小图标?
- 请问如何对数据文件操作??高分相送,在线等候
- vc 获取数据库数据问题
- 在自己的程序中如何有目的的关闭其它已运行的程序
- 使用下载的CDib类、怎么从资源里加载位图文件?是CDib::LoadFile(CFile&); @_@
- IO操作中,是否有可能做到强制让Windows写缓存而不写硬盘?
- 内存绘图 动态修改
将3.00000000000000E+0001 3.00000000000000E+0001 1.41790802462861E+0001
按照空格分隔,第一个数字存入pOriginX,第二个数字存入pOriginY,第三个数字存入pOriginZ很简单的问题,可是就是不会- -||
或者用
sscanf()
有个问题,
2.50000000000000E+0001 1.00000000000000E+0000 4.55668524839770E+0000
2.60000000000000E+0001 1.00000000000000E+0000 4.95604587462237E+0000
2.70000000000000E+0001 1.00000000000000E+0000 5.37549993886696E+0000
2.80000000000000E+0001 1.00000000000000E+0000 5.81539613479712E+0000
2.90000000000000E+0001 1.00000000000000E+0000 6.27570840318381E+0000
3.00000000000000E+0001 1.00000000000000E+0000 6.75636218394042E+0000
-3.00000000000000E+0001 -0.00000000000000E+0000 6.76325647404073E+0000
-2.90000000000000E+0001 -0.00000000000000E+0000 6.30278904318635E+0000
-2.80000000000000E+0001 -0.00000000000000E+0000 5.86088238947563E+0000
-2.70000000000000E+0001 -0.00000000000000E+0000 5.43716207114607E+0000象这样由于正负号导致空格数变化的数据怎么分解呢
Just Try It
const int num = 10;
double x[num], y[num], z[num];
FILE* pf = fopen("data.txt", "r");
for(int i=0; i<num; i++)
fscanf(pf, "%lf %lf %lf", &x, &y, &z);
fclose(pf);
for(int i=0;i<LineNum;i++)
{
file1.ReadString(str);
sscanf(str,"%lf %lf %lf",&pOriginX,&pOriginY,&pOriginZ);
}问个问题:随着for循环的不断进行&pOriginX的地址会自动加1么?还是要写成这样的格式:sscanf(str,"%lf %lf %lf",&pOriginX+i,&pOriginY+i,&pOriginZ+i);请高手指教!
{
file1.ReadString(str);
sscanf(str,"%lf %lf %lf",&pOriginX[i],&pOriginY[i],&pOriginZ[i]);
}正确的做法 谢谢楼上朋友