我有一个.idx文件,我想用C ++读取这个文件。该文件中的所有项目均以\ 0标记分隔。我想得到那个项目清单。我尝试按如下方式实现它:
while (file.read(buffer, sizeof buffer), chars_read = file.gcount()){
string search_term = "\0";
string contentElement = buffer;
string::size_type foundoffset = contentElement.find(search_term);
if (foundoffset != string::npos){
//Do something...
}
//code continue here.
.....
}
但是在C ++中," \ 0"被视为null,如果您有使用C ++的经验,请指导我如何操作。请注意,此idx文件是二进制文件。 谢谢!
答案 0 :(得分:3)
不要在二进制文件上使用<root>
[TEXT:"\n "]
<children>
[TEXT:"\n "]
<foo1 val="23"/>
[TEXT:"\n "]
<foo2 val="14"/>
[TEXT:"\n "]
<foo3 val="5"/>
[TEXT:"\n "]
</children>
[TEXT:"\n"]
</root>
。如果使用原始char数组,请在其中进行搜索,例如使用SELECT * FROM patient p1
WHERE weight > 1.2*(select avg(weight)
FROM patient p2 WHERE p1.gender = p2.gender AND p1.ward_no = p2.ward_no)
。
例如:
std::string
答案 1 :(得分:3)
如果buffer
是一个字符数组(例如char buffer[...]
),那么contentElement
字符串的构造只能读到'\0'
中的buffer
。< / p>
但是,有一个std::string
constructor允许您设置字符串的内容长度,如果包含的字符串可以包含嵌入的终结符字符,则应该使用该字符串:
std::string contentElement(buffer, chars_read);
虽然出于您的目的,我建议您远离std::string
,然后直接在缓冲区中搜索。例如std::find
。