繁体   English   中英

从读取的文件中拆分单词

[英]Splitting a word from a read file

我正在尝试将文本文件的内容读取到类的属性中。 该文件的结构方式是,每一行包含该类的一个对象所需的所有信息。 一行可能看起来像:

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::string参数line关联的std::istringstream ,并使用>>运算符按顺序将这些值读取到属性中。 这在大多数情况下都是有效的。 我必须创建一些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()来获取TClass ,但是我不知道如何在读入前检查下一个值是否存在。

嗯,我可以peek一下不同于' '的值,然后使用>>运算符...。

好吧,我会尽力而为,让你知道事情的发展。 谢谢您的帮助。 任何其他意见表示赞赏。 写完所有这些后,我很难消除这个问题。

我的建议是看看Boost.Spirit。 它可以让您自然地表达输入字符串的格式,并且如果(当!)输入格式发生更改,将来的更改也将变得更加容易。 另外,它在运行时将运行得更快! http://www.boost.org/doc/libs/1_44_0/libs/spirit/doc/html/spirit/introduction.html祝你好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM