CStdioFile按行读取内容

CStdioFile File;  // 定义一个CStdioFile类变量File

CString FileData; // 定义一个CString,作为一个缓冲区

//定义n个临时字符串变量,大小依据实际情况,这里暂设为10

char TempStr1[10],TempStr2[10]......TempStrN[10];

File.ReadString(FileData); // 将一行数据读到缓冲区

//将该行数据的n个字符读到n个临时字符串变量

sscanf(FileData,"%s %s %s %s ......%s",TempStr1,TempStr2......TempStrN);

 

这种读法的一个好处是对文本格式要求不严,如下面的格式也可以

(前面可有未知个空格) A1 A2 (两个数据之间也可有未知个空格) A3 A3 ......An

 

CStdioFile File;

File.Open(m_FilePath,CFile::modeRead); //以读模式打开文本文件

CString FileData; //定义一个CString变量作为缓冲区

 

//定义两个临时字符串,并初始化为'\0'

char TempStr1[10];

char TempStr2[10];

memset(TempStr1,'\0',10);

memset(TempStr2,'\0',10);

File.ReadString(FileData);//读取第一行数据,第一行数据为坐标点数据

sscanf(FileData,"%s",TempStr1);

m_PointNum = atoi(TempStr1); // 获取坐标点个数

//逐行读取坐标数据

for (int i = 0;i<m_PointNum;i++)

{

File.ReadString(FileData);

sscanf(FileData,"%s %s",TempStr1,TempStr2);

m_PointArray.Add(CPoint(atoi(TempStr1),atoi(TempStr2)));//将其存入坐标点数组

}

 

CDC *pDC = GetDC(); //获取设备环境;

//根据坐标点绘出直线

for (i = 0;i<m_PointNum-1;i++)

{

pDC->MoveTo(m_PointArray[i].x, m_PointArray[i].y);

pDC->LineTo(m_PointArray[i+1].x, m_PointArray[i+1].y);

}

ReleaseDC(pDC); //使用完后,释放设备环境

}

}

其中示例数据文件的格式是这样的:(第一行为坐标个数,余下的是坐标点数据)

5

10 20

30 40

45 85

100 120

200 300

这个程序的一个优点是对文本数据格式并不严格,只要x坐标和y坐标中间有一个空格就可以了。若要将文本数据传化为其它形式的数据(如将字符型数据转化为浮点型可以利用函数atof()),其中原理是一样的。 

posted @ 2011-07-18 14:13  积木  阅读(5160)  评论(0编辑  收藏  举报