c++读取txt文件到结构体 20
txt中内容如下:249JeffGordon680LarryFine1044PearlJam1044JeffAment1079BobHoskins1296BoydGain...
txt中内容如下:
249 Jeff Gordon
680 Larry Fine
1044 Pearl Jam
1044 Jeff Ament
1079 Bob Hoskins
1296 Boyd Gaines
1554 Mickey Rourke
第一列为ID,第二列为name 展开
249 Jeff Gordon
680 Larry Fine
1044 Pearl Jam
1044 Jeff Ament
1079 Bob Hoskins
1296 Boyd Gaines
1554 Mickey Rourke
第一列为ID,第二列为name 展开
3个回答
展开全部
需要用到fstream头文件
用ifstream进行读取
读取到结构体里面主要是每次读取对应结构体变量长度的数据到该结构体里面
具体参考下面demo
strcut stockType
{
string personAddress;
string personCity;
string personState;
int personZIP;
};
void addressType :: getData()
{
ifstream infile;
int index;
string inputFile;
stockType addressTypeList[NO_OF_PERSON];
cout<<"Enter the file path: ";
cin>>inputFile; //输入txt文件路径
cout<<endl;
infile(inputFile.c_str()); //infile按照指定路径读取txt文件
for(index = 0; index < NO_OF_PERSON; index++)//读取txt文件至struct
{
infile>>addressTypeList[index].personAddress;
infile>>addressTypeList[index].personCity;
infile>>addressTypeList[index].personState;
infile>>addressTypeList[index].personZIP;
}
}
展开全部
不是 紧凑存储 的话不能直接读取到结构体中,要读取文件后进行处理
像你这种文本的,建议改成以下形式,就更方便读取
249,Jeff,Gordon,
680,Larry,Fine,
FILE *pFile=fopen("c:\\aaaaa.txt","rb");
CStdioFile csFile(pFile);
CString Str;
char buf1[10]={0};
char buf2[20]={0};
char buf3[20]={0};
int id=0;
while(csFile.ReadString(Str))
{
sscanf("%[^,],%[^,],%[^,],",buf1,buf2,buf3);
id=atoi(buf1);
//把id,bu2,buf3数据存入结构体
}
如果是用紧凑存储的话名字空间要定长
246Jeff Gordon
680Larry Fine
类似这样的话可以直接读取
其它同上,只是while中处理不一样
USER info;//假如USER是结构体
while(csFile.ReadString(Str))
{
memcpy(&info,Str.GetBuffer(0),Str.GetLength());
//保存info结构体到你的数组结构中
}
像你这种文本的,建议改成以下形式,就更方便读取
249,Jeff,Gordon,
680,Larry,Fine,
FILE *pFile=fopen("c:\\aaaaa.txt","rb");
CStdioFile csFile(pFile);
CString Str;
char buf1[10]={0};
char buf2[20]={0};
char buf3[20]={0};
int id=0;
while(csFile.ReadString(Str))
{
sscanf("%[^,],%[^,],%[^,],",buf1,buf2,buf3);
id=atoi(buf1);
//把id,bu2,buf3数据存入结构体
}
如果是用紧凑存储的话名字空间要定长
246Jeff Gordon
680Larry Fine
类似这样的话可以直接读取
其它同上,只是while中处理不一样
USER info;//假如USER是结构体
while(csFile.ReadString(Str))
{
memcpy(&info,Str.GetBuffer(0),Str.GetLength());
//保存info结构体到你的数组结构中
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
struct ID{
int x;
string y;
};
int main()
{
ofstream fout("e:/测试.dat",ios::out);
if(!fout)
{
cout<<"Cannot open output file.\n";
return 1;
}
fout<<"249,Jeff Gordon \n"
"680,Larry Fine \n"
"1044,Pearl Jam \n"
"1044,Jeff Ament \n"
"1079,Bob Hoskins \n"
"1296,Boyd Gaines \n"
"1554,Mickey Rourke \n";
fout.close();
ifstream fin("e:/测试.dat",ios::in);
if(!fin)
{
cout<<"Cannot open input file.\n";
return 1;
}
vector<ID> v;
int i=0;
ID d1;
while (fin)
{
fin>>d1.x;
getline(fin,d1.y);
v.push_back(d1);
i++;
}
for(i=0;i<v.size()-1;i++)
{
cout<<v[i].x<<" "<<v[i].y<<endl;
}
fin.close();
return 0;
}
调试通过。
#include <fstream>
#include <string>
#include <vector>
using namespace std;
struct ID{
int x;
string y;
};
int main()
{
ofstream fout("e:/测试.dat",ios::out);
if(!fout)
{
cout<<"Cannot open output file.\n";
return 1;
}
fout<<"249,Jeff Gordon \n"
"680,Larry Fine \n"
"1044,Pearl Jam \n"
"1044,Jeff Ament \n"
"1079,Bob Hoskins \n"
"1296,Boyd Gaines \n"
"1554,Mickey Rourke \n";
fout.close();
ifstream fin("e:/测试.dat",ios::in);
if(!fin)
{
cout<<"Cannot open input file.\n";
return 1;
}
vector<ID> v;
int i=0;
ID d1;
while (fin)
{
fin>>d1.x;
getline(fin,d1.y);
v.push_back(d1);
i++;
}
for(i=0;i<v.size()-1;i++)
{
cout<<v[i].x<<" "<<v[i].y<<endl;
}
fin.close();
return 0;
}
调试通过。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询