C++ C++;将ASCII文件解析为结构

C++ C++;将ASCII文件解析为结构,c++,struct,C++,Struct,我有一个ascii文件,其中每一行都是一个条目,下面是一个示例: 8331 CP-65 3951 5.62a-0.003 8332 BD-06 5827 6.17b+0.049 8333 Omi IndCP-70 2873 5.53c-0.031 8334 10Nu CepBD+60 2288 4.29d-0.003 8335 81Pi 2CygBD+48 3504 4.23e+0.004 文件格式如下: -----------------------

我有一个ascii文件,其中每一行都是一个条目,下面是一个示例:

8331          CP-65 3951 5.62a-0.003
8332          BD-06 5827 6.17b+0.049
8333   Omi IndCP-70 2873 5.53c-0.031
8334 10Nu  CepBD+60 2288 4.29d-0.003
8335 81Pi 2CygBD+48 3504 4.23e+0.004
文件格式如下:

---------------------------------
   Bytes Format  Units   Label   
---------------------------------
   1-  4  I4     ---     HR       
   5- 14  A10    ---     Name   
  15- 25  A11    ---     DM      
  26-29 F5.2   mag     Vmag  
     30  A1     ---   n_Vmag
  31-36  F6.3 arcsec/yr pmRA
我有一个要填充的对应结构(文件的每一行都是该结构的一个实例):

我提出了以下代码,但不起作用,希望您能提供一些优雅解决方案的指导:

    std::string line;
    //while (std::getline(infile, line))
    for (;;)
    {
        star s;
        std::istringstream iss(line);
        char id[4];
        char name[10];
        char dm[11];

        //if (!infile.read(reinterpret_cast<char*>(&s.id), 4) ||
        if (!infile.read(id, 4) ||
            !infile.read(name, 14) ||
            !infile.read(dm, 25))
        {
            // error or end of file
        }
std::字符串行;
//while(std::getline(infle,line))
对于(;;)
{
星星s;
标准::istringstream iss(线);
字符id[4];
字符名[10];
char-dm[11];
//如果(!infle.read(重新解释铸件(&s.id))4)||
如果(!infle.read)(id,4)||
!infle.read(名称,14)||
!infle.read(dm,25))
{
//错误或文件结束
}

什么是“不工作”意思?请具体说明!与“指导”类似。Stackoverflow是一个问答网站,不是聊天论坛。请,请,在Stackoverflow中搜索“c++读取文件结构”。始终在发布前搜索。这些示例中的一个必须对您有所帮助。在“逐行”中在格式为固定宽度的情况下,我会读取该行(例如,使用
std::getline
),然后将其与该字符串分开。
    std::string line;
    //while (std::getline(infile, line))
    for (;;)
    {
        star s;
        std::istringstream iss(line);
        char id[4];
        char name[10];
        char dm[11];

        //if (!infile.read(reinterpret_cast<char*>(&s.id), 4) ||
        if (!infile.read(id, 4) ||
            !infile.read(name, 14) ||
            !infile.read(dm, 25))
        {
            // error or end of file
        }