分析文本文件以提取字符串
Parsing a Text File To Extract a String
我正在解析一个txt文件,我在其中放置了模板(GUID)来帮助识别数据块。。。我在解析文件中的STRING变量时遇到问题。在解析时,我使用了一个DataPtr对象,该对象根据数据类型的大小进行迭代。。。问题是,我无法正确计算字符串的大小,以便(在读取字符串后)转到下一个数据类型。以下是要解析的示例文件:
xof 0303txt 0032
template Effect {
<C7D92586-6C57-42d3-8F03-0BDF87EC1848>
STRING filename;
}
template Light {
<ADA248C7-97E3-4a42-A4C1-74EE8536FF37>
DWORD type;
array float position[3];
array float direction[3];
array float ambient[4];
array float diffuse[4];
array float specular[4];
float power;
}
template Object {
<B6494248-7D84-42d3-A4AA-0747E22E08D3>
DWORD type;
array float position[3];
array float orientation[4];
STRING name;
STRING filename;
}
Effect {
".//Data/Scene/TrainingRoom/Effects/effect.fx";
}
Light {
1;
-3.0; 1.0; -3.0;
3.0; -1.0; 3.0;
1.0; 1.0; 1.0; 1.0;
1.0; 0.0; 0.0; 0.0;
1.0; 1.0; 1.0; 1.0;
0.1;
}
Object {
1;
0.0; 0.0; 0.0;
0.0; 0.0; 0.0; 1.0;
".//Data/Scene/TrainingRoom/TrainingRoom.x";
}
以下是当前正在工作的代码示例(不带字符串标签):
if(CompareDataObjectType(pDataObj, TID_D3DRMLightCustom))
{
D3DXVECTOR3 *vecPtr = NULL;
D3DXVECTOR4 *colorPtr = NULL;
DWORD *DataPtr = (DWORD*)GetObjectData(pDataObj); // Data Pointer points at 1st data location
m_light.type = *DataPtr++;
vecPtr = (D3DXVECTOR3*)DataPtr;
m_light.position = *vecPtr;
DataPtr+=3;
vecPtr = (D3DXVECTOR3*)DataPtr;
m_light.direction = *vecPtr;
DataPtr+=3;
colorPtr = (D3DXVECTOR4*)DataPtr;
m_light.ambient = *colorPtr;
DataPtr+=4;
colorPtr = (D3DXVECTOR4*)DataPtr;
m_light.diffuse = *colorPtr;
DataPtr+=4;
colorPtr = (D3DXVECTOR4*)DataPtr;
m_light.specular = *colorPtr;
DataPtr+=4;
float *fPtr = (float*)DataPtr;
m_light.power = *fPtr;
return true;
}
这一切都好。。。以下返回不正确的结果:
if(CompareDataObjectType(pDataObj, TID_D3DRMObject))
{
D3DXVECTOR3 *vecPtr = NULL;
D3DXQUATERNION *quatPtr = NULL;
DWORD *DataPtr = (DWORD*)GetObjectData(pDataObj);
m_object.type = *DataPtr++;
vecPtr = (D3DXVECTOR3*)DataPtr;
m_object.position = *vecPtr;
DataPtr+=3;
quatPtr = (D3DXQUATERNION*)DataPtr;
m_object.orientation = *quatPtr;
DataPtr+=4;
m_object.name = (LPCSTR)DataPtr;
size_t length = strlen(m_object.name);
DataPtr+=length;
m_object.filename = (LPCSTR)DataPtr; // filename only contains a portion of the correct string...
return true;
}
如果输入数据包含以null结尾的字符串,则如下所示:
size_t length = strlen(m_object.name);
DataPtr+=length;
应说明空字符:
size_t length = strlen(m_object.name);
DataPtr += length + 1;
相关文章:
- 清除输入缓冲区后未提取字符串流
- 提取字符串中的随机单词
- 提取C++字符串
- 如何提取字符串中的特定值
- 如何提取字符串中的整数?
- 正则表达式:从模式字符串 1.string2'string3 中提取字符串,其中字符串 1 可以包含 '." 字符
- C - 从逗号分隔的浮点线提取字符串
- 如何使用正则表达式提取字符串的不匹配部分
- 处理从 std::istream 中提取字符串的空字符串大小写
- 可视化从文本C++中提取字符串数据
- 如何在C++中有效地提取字符串模式
- 分析文本文件以提取字符串
- C++:从两个符号之间提取字符串
- 提取字符串的一部分并将部分放入字符数组和另一个字符串变量C++
- 如何在c++中提取字符串的一部分
- 使用getline(),然后从用户输入中提取字符串(使用c++)
- 尝试从文本文件中读取列表,然后搜索文本文件,并在c++中提取字符串
- 试图从c++文本文件的单行中提取字符串的一部分
- 从字符数组中提取字符串
- 从JavaScript代码中提取字符串