读取文件内数据到vector

ywapple 2009-03-19 04:34:37
#include <fstream>
#include <vector>
#include <iterator>
#include <windows.h>
using namespace std;

struct StockList
{
char MarketCode[4];
char StockCode[8];
char Stockname[16];
};

ostream& operator < <( ostream& os, const StockList& sl)
{
return os.write(sl.MarketCode,4).write(sl.StockCode,8).write(sl.Stockname,16);
}

int _tmain(int argc, _TCHAR* argv[])
{
StockList sl;
vector <StockList> v;
sprintf_s(sl.MarketCode, 4, "%s", "SH");
sprintf_s(sl.StockCode, 8, "%s", "600000");
sprintf_s(sl.Stockname, 16, "%s", "浦发银行");
v.push_back(sl);
sprintf_s(sl.MarketCode, 4, "%s", "SH");
sprintf_s(sl.StockCode, 8, "%s", "600001");
sprintf_s(sl.Stockname, 16, "%s", "邯郸钢铁");
v.push_back(sl);
sprintf_s(sl.MarketCode, 4, "%s", "SH");
sprintf_s(sl.StockCode, 8, "%s", "600003");
sprintf_s(sl.Stockname, 16, "%s", "ST东北高");
v.push_back(sl);

ofstream ofile("D:\\v.txt", ios_base::binary|ios_base::trunc);
copy(v.begin(),v.end(),ostream_iterator <StockList>(ofile));

return 0;
}
http://topic.csdn.net/u/20090319/14/720948b8-473d-4812-9a93-c49e4bee1792.html?1106356008
已经实现了的vector写入文件
--------------------------------------------------------------------------------------------------
请问如何让读取文件到vector呢?
文件一样 数据结构一样!
...全文
279 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ywapple 2009-03-19
  • 打赏
  • 举报
回复
呵呵 我的错 开始我的文件已经删了
谢了哈!
beyond071 2009-03-19
  • 打赏
  • 举报
回复
istream& operator >> (istream &is, StockList& sl)
{
is.read(sl.MarketCode, 4);
is.read(sl.StockCode, 8);
is.read(sl.Stockname, 16);
return is;
}

最后return的是is
beyond071 2009-03-19
  • 打赏
  • 举报
回复
你先确定你的D:\\v.txt是否已经写好了哈
ywapple 2009-03-19
  • 打赏
  • 举报
回复
istream& operator>>( istream& is, StockList& sl)
{
//return os >> sl.MarketCode >> sl.StockCode >> sl.Stockname;
is.read(sl.MarketCode, 4);
is.read(sl.StockCode, 8);
is.read(sl.Stockname, 16);
return sl;
}

operator>>( 是这个

beyond071 2009-03-19
  • 打赏
  • 举报
回复
如果一定要在一起的话 在建立ifile前要把ofile干掉先啊

ofile.~basic_ofstream();
ywapple 2009-03-19
  • 打赏
  • 举报
回复
#include <fstream>
#include <vector>
#include <iterator>
#include<windows.h>
using namespace std;

struct StockList
{
char MarketCode[4];
char StockCode[8];
char Stockname[16];
};

ostream& operator << ( ostream& os, const StockList& sl)
{
return os.write((const char*)(&sl),sizeof(StockList));
}
//
StockList& operator>>( istream& is, StockList& sl)
{
//return os >> sl.MarketCode >> sl.StockCode >> sl.Stockname;
is.read(sl.MarketCode, 4);
is.read(sl.StockCode, 8);
is.read(sl.Stockname, 16);
return sl;
}
void VectorWriteToFile()
{
StockList sl;
vector<StockList> v;
sprintf_s(sl.MarketCode, 4, "%s", "SH");
sprintf_s(sl.StockCode, 8, "%s", "600000");
sprintf_s(sl.Stockname, 16, "%s", "浦发银行");
v.push_back(sl);
sprintf_s(sl.MarketCode, 4, "%s", "SH");
sprintf_s(sl.StockCode, 8, "%s", "600001");
sprintf_s(sl.Stockname, 16, "%s", "邯郸钢铁");
v.push_back(sl);
sprintf_s(sl.MarketCode, 4, "%s", "SH");
sprintf_s(sl.StockCode, 8, "%s", "600003");
sprintf_s(sl.Stockname, 16, "%s", "ST东北高");
v.push_back(sl);
//for (int i = 0; i <10; i++)

ofstream ofile("D:\\v.txt", ios_base::binary|ios_base::trunc);
//ostream_iterator<string>(cout," ");
copy(v.begin(),v.end(),ostream_iterator<StockList>(ofile));
}
void VectorReadFromFile()
{
vector <StockList> vec;
ifstream ifile("D:\\v.txt", ios_base::binary);

istream_iterator<StockList> in_iter(ifile);
istream_iterator<StockList> eof;
while(in_iter != eof)
{
vec.push_back(*in_iter);
++in_iter;
}

}
int _tmain(int argc, _TCHAR* argv[])
{
// VectorWriteToFile();
VectorReadFromFile();
return 0;
}
分开了的
beyond071 2009-03-19
  • 打赏
  • 举报
回复

楼主不要把istream和ostream在一个作用域里面用,不然文件还没关闭,怎么能够读取呢?
你这两端代码不能都放main里试验,分开试验
beyond071 2009-03-19
  • 打赏
  • 举报
回复
哦 笔误上面重载里return错写成isreturn了...
ywapple 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 beyond071 的回复:]
C/C++ code
istream& operator >> (istream &is, StockList& sl)
{
is.read(sl.MarketCode, 4);
is.read(sl.StockCode, 8);
is.read(sl.Stockname, 16);
return is;
}





C/C++ code
vector <StockList> vec;
ifstream ifile("D:\\v.txt", ios_base::binary);

istream_iterator<StockList> in_iter(ifile);
istream_iterator<StockList> eof;
wh…
[/Quote]

请问下in_iter=0x00000000
不对哦…………
beyond071 2009-03-19
  • 打赏
  • 举报
回复

istream& operator >> (istream &is, StockList& sl)
{
is.read(sl.MarketCode, 4).read(sl.StockCode, 8).read(sl.Stockname, 16);
isreturn is;
}




vector <StockList> vec;
ifstream ifile("D:\\v.txt", ios_base::binary);
istream_iterator<StockList> in_iter(ifile);
istream_iterator<StockList> eof;
copy(in_iter, eof, back_inserter(vec));


借鉴大家的 再改的简洁些
ywapple 2009-03-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 baihacker 的回复:]
ostream& operator < <( ostream& os, const StockList& sl)
{
return os.write(sl.MarketCode,4).write(sl.StockCode,8).write(sl.Stockname,16);
}

既然是write,就应该对应地用read.
先读到一个StockList sl;
再push_back
[/Quote]

关键是前面怎么用???

我读取用的ofstream
ofstream ofile("D:\\v.txt", ios_base::binary|ios_base::trunc);
copy(v.begin(),v.end(),ostream_iterator <StockList>(ofile));

--------------
麻烦大伙儿看清楚点儿
beyond071 2009-03-19
  • 打赏
  • 举报
回复
sorry 网络卡 发多一次 请谅解
beyond071 2009-03-19
  • 打赏
  • 举报
回复

istream& operator >> (istream &is, StockList& sl)
{
is.read(sl.MarketCode, 4);
is.read(sl.StockCode, 8);
is.read(sl.Stockname, 16);
return is;
}



vector <StockList> vec;
ifstream ifile("D:\\v.txt", ios_base::binary);

istream_iterator<StockList> in_iter(ifile);
istream_iterator<StockList> eof;
while(in_iter != eof)
{
vec.push_back(*in_iter);
++in_iter;
}

刚回到楼主另一个帖子里了
beyond071 2009-03-19
  • 打赏
  • 举报
回复

istream& operator >> (istream &is, StockList& sl)
{
is.read(sl.MarketCode, 4);
is.read(sl.StockCode, 8);
is.read(sl.Stockname, 16);
return is;
}



vector <StockList> vec;
ifstream ifile("D:\\v.txt", ios_base::binary);

istream_iterator<StockList> in_iter(ifile);
istream_iterator<StockList> eof;
while(in_iter != eof)
{
vec.push_back(*in_iter);
++in_iter;
}

刚回到楼主另一个贴里了
baihacker 2009-03-19
  • 打赏
  • 举报
回复
ostream& operator < <( ostream& os, const StockList& sl)
{
return os.write(sl.MarketCode,4).write(sl.StockCode,8).write(sl.Stockname,16);
}

既然是write,就应该对应地用read.
先读到一个StockList sl;
再push_back
Qlaiaqu 2009-03-19
  • 打赏
  • 举报
回复
read

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧