我正在尝试将文本文件的内容读入类的属性中。该文件的结构使得每一行都包含该类的一个对象所需的所有信息。一行可能如下所示:
TYC 9537 00066 1 341.76920751 -88.32499920 8.762 9.294 mc1 hd 210531 0.385 8.80 P F5 5 6440 F5 V
我一直在做的是将文件中的行读取到带有 的流中getline()
,在这样的函数中:
void LoadFile( std::vector<TycDat*> & target , std::fstream & source )
{
std::string line ;
while( std::getline( source , line ) )
{
target.push_back( new TycDat ( line ) ) ;
}
}
TycDat
类的名称在哪里,target
我要存储它的 Vector 是哪里,以及source
已经指向该文件的文件流是哪里。
在构造函数中,TycDat
我创建了一个std::istringstream
与std::string
参数关联的对象,line
并使用>>
运算符将值按顺序读取到属性中。这在大多数情况下都有效。我必须创建一些char
数组才能读取其中的一些,例如hd 210531
对应于操作员将拆分的数组。string
>>
我真正的问题来自最后一个部分,在示例中为8.80 P F5 5 6440
. 它说 F5 实际上是两个值,一个字母和一个数字,我需要将它们分别存储为 char 和 int。此外,最后的 int 可能并不总是存在。
我现在正在做的是,在正确阅读 P 之后:
std::string aux_ ;
iss >> aux_ ;
TClass = aux_[0] ; // Temperature class (7)
if ( aux_.size() > 1 ) SClass = std::atoi( aux_.data()+1 ) ; // SubClass
我不喜欢那样,主要是因为我正在制作一个新的string
. 但我不知道如何让它正常工作。问题在于将单词分开(我想我可以ignore
一个字符然后使用TClass = iss.get()
get TClass
,但我不知道如何在读入之前检查下一个值是否存在。
嗯,我可以peek
寻找与 不同的值' '
,然后使用>>
运算符....
好吧,我会试试我猜,让你知道它是怎么回事。谢谢您的帮助。任何其他意见表示赞赏。写完这一切后,我对删除问题感到难过。