- 论坛徽章:
- 0
|
问题1 : strstream对象可以用getline吗?
我试过getline,有问题,编译器没有报错,可是取到的是空串,可能是有些地方我没做好.
相关代码如下:
- //----------------------------------------------------
- //Function Name : ReadData
- //
- //Desc : 从当前位置开始读取数据
- //Input : 一个有效的文件流
- //Output :
- //Notice : 当前文件指针必须有效, 必须指向数据头位置
- //----------------------------------------------------
- VOID CReadV23EX::ReadData(fstream& file)
- {
- CHAR FileBuf[LINE_MAX] = {'\0'};
- DWORD dwOldPos = 0;
- V23EX_DATA *lpData = NULL;
- strstream strData( (char *)FileBuf, sizeof(FileBuf) );
- strData.setf(ios::skipws | ios::showpos);
- this->;DataSize = 0; // LONG DataSize; // 每块数据量
- while (!listData.empty()) // list<V23EX_DATA*>; listData; // V23EX_DATA 是自定义的结构,全局
- {
- lpData = listData.front(); // 释放上一个数据资源
- listData.pop_front();
- SAFE_DELETE ( lpData ); // 这是自己定义的宏,完成delete和指针置空操作
- }
- listData.clear();
- dwOldPos = file.tellg();
- file.getline( FileBuf, sizeof(FileBuf));
- FileBuf[strlen( FileBuf ) - 1] = '\0'; // 替换'\r'为'\0'
- while( !file.eof() && FileBuf[0] != '\'' )
- {
- // 记录数据
- lpData = new V23EX_DATA;
- /*********************** 这里是问题所在 **********************************/
- // 比如数据是:
- // -106.5,6.02
- // -106.2,6.08
- // -101.2,6.50
- // -96.2,7.06
- //
- // 对应16进制码为:
- // 2D 31 30 36 2E 35 2C 36 2E 30 32 0D 0A
- // 2D 31 30 36 2E 32 2C 36 2E 30 38 0D 0A
- // 2D 31 30 31 2E 32 2C 36 2E 35 30 0D 0A
- // 2D 39 36 2E 32 2C 37 2E 30 36 0D 0A
- //
- //
- // 第一次取数据行, 很正常, lpData->;data_1 = "-106.0", lpData->;data_2 == "6.02"// 第二次取数据行, 就有问题了:
- // lpData->;data_1[0] = lpData->;data_2[0] = '\0'
- // data_1、data_2 内其余的元素没有动,还是 "106.0" 和 ".02"
- strData.getline ( lpData->;data_1, sizeof(lpData->;data_1), ',');
- strData.getline ( lpData->;data_2, sizeof(lpData->;data_2), '\n');
- /*************************************************************************/
- listData.push_front(lpData);
- this->;DataSize++;
- dwOldPos = file.tellg(); // 记录当前文件指针位置
- file.getline( FileBuf, sizeof(FileBuf) );
- FileBuf[strlen( FileBuf ) - 1] = '\0'; // 替换'\r'为'\0'
- } // end of while
- file.seekg( dwOldPos, ios::beg ); // 恢复文件指针位置(退出循环前多读取了一行)
- }
复制代码
问题2 :把 12 和 -9 格式化为 +012.0 和 -009.0 ,有相关的函数吗?
另外, 对代码有改进意见的朋友也欢迎指出来, 无论是技术方面还是风格方面, 感谢, 感谢, 严重感谢. |
|