C++ C++;将ASCII文件解析为结构
我有一个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 文件格式如下: -----------------------
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
}