读取文件,解析,存入结构体。

modicum_tk 2012-02-24 03:48:29
用getline()从文件中读取一行数据,用strtok()截取后放到结构体中。

逗号间没有数据的赋0值保存到结构体

逗号后没有数据的也赋0值再存入结构体。

这是数据:
21,0x10,28,0,1,1,1,,,,,,,,,17,,,,,,,6,0xE70C,,,,,,,,,,,,,,,,,8,8,8,8,8,8,8,,,,,,,,,,交差点名称,交差点名称,
.
.
.


结构体是这样的
struct _struct
{
string s1;
string s2;
.
.
.
string s59;
}

求代码。
...全文
749 51 打赏 收藏 转发到动态 举报
写回复
用AI写文章
51 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jim_King_2000 2012-02-27
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 modicum_tk 的回复:]

重定向,没听过诶
[/Quote]
parser.exe <in.txt >out.txt
modicum_tk 2012-02-27
  • 打赏
  • 举报
回复
可以用string数组的,还有程序是在linux下面跑的
modicum_tk 2012-02-27
  • 打赏
  • 举报
回复
重定向,没听过诶
Jim_King_2000 2012-02-27
  • 打赏
  • 举报
回复
哈,上面的程序,你直接重定向,就能处理中文日文字符哦。
Eleven 2012-02-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 modicum_tk 的回复:]
用getline()从文件中读取一行数据,用strtok()截取后放到结构体中。

逗号间没有数据的赋0值保存到结构体

逗号后没有数据的也赋0值再存入结构体。

这是数据:
21,0x10,28,0,1,1,1,,,,,,,,,17,,,,,,,6,0xE70C,,,,,,,,,,,,,,,,,8,8,8,8,8,8,8,,,,,,,,,,交差点名称,交差点名称,
.
.
.……
[/Quote]
你的结构体不能写成个数组吗?59个string类型的成员~
Jim_King_2000 2012-02-27
  • 打赏
  • 举报
回复
这个程序是经过测试的,可以用。不过遗憾的是,它目前处理不了中文和日文字符。

#include "stdafx.h"
#include <boost/tokenizer.hpp>
#include <boost/token_iterator.hpp>

#include <vector>
#include <string>
#include <iterator>
#include <iostream>
#include <algorithm>

#include <cassert>


using boost::tokenizer;
using boost::char_separator;
using boost::keep_empty_tokens;
using std::vector;
using std::wstring;
using std::wcin;
using std::wcout;
using std::istreambuf_iterator;
using std::ostream_iterator;
using std::copy;


int _tmain(int argc, _TCHAR* argv[])
{
istreambuf_iterator<wchar_t> stream_begin(wcin.rdbuf());
istreambuf_iterator<wchar_t> stream_end;

typedef tokenizer<
char_separator<wchar_t>,
istreambuf_iterator<wchar_t>,
wstring> tkz;
char_separator<wchar_t> sep(L",", 0, keep_empty_tokens);
tkz tokens(stream_begin, stream_end, sep);

vector<wstring> str_tokens(tokens.begin(), tokens.end());

copy(str_tokens.begin(), str_tokens.end(), ostream_iterator<wstring, wchar_t>(wcout, L"\n"));
return 0;
}
modicum_tk 2012-02-27
  • 打赏
  • 举报
回复
恩,谢谢;
Jim_King_2000 2012-02-27
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 modicum_tk 的回复:]

那先补零保存到结构体吧。
老大让我定义一个结构体里面再定义59个char *;
我都快疯了
[/Quote]
别担心,我写一个给你参考。要点时间,你稍微等等。
King0325 2012-02-27
  • 打赏
  • 举报
回复
表示菜鸟难以理解以上回复~
modicum_tk 2012-02-27
  • 打赏
  • 举报
回复
那先补零保存到结构体吧。
老大让我定义一个结构体里面再定义59个char *;
我都快疯了
modicum_tk 2012-02-27
  • 打赏
  • 举报
回复
我C++容器什么的以前都没有怎么接触过,一进公司老大就让我弄这个,唉,都好长时间了,每天上班感觉跟上坟一样。唉!!!
Jim_King_2000 2012-02-27
  • 打赏
  • 举报
回复
vector里面的数据如何输出?
modicum_tk 2012-02-27
  • 打赏
  • 举报
回复
整体需求就是将N行下面的数据从文件中读取,
逗号间或逗号后面没有数据的就补0(58个逗号),再保存到结构体中,
读取一行放到一个结构体,再把结构体push到vector,
处理完整个文件,再将vector里面的数据输出

21,0x10,28,0,1,1,1,,,,,,,,,17,,,,,,,6,0xE70C,,,,,,,,,,,,,,,,,8,8,8,8,8,8,8,,,,,,,,,,交差点名称,交差点名称,
93,0x80,134,0,1,1,1,,,,,,,,,5104,13,0xEF1A,,,,,7,0xEF1A,,,,,,,,,,1,,,,,,,C,C,C,C,C,C,C,,,,,,,,,,保険,保険,11秋面積間引きフラグ設定

我qq243822957,万分感激啊.
Jim_King_2000 2012-02-27
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 vanxeger_2 的回复:]

都是有时间的哇啊,写那么长的代码,顶啊!
[/Quote]
用boost的话,很快的,十几行搞定。
vanxeger 2012-02-27
  • 打赏
  • 举报
回复
一行一行的读取,存入CString ,用Find.(“,”)有就直接存,没有就存0;再搞一个循环就可以了!
vanxeger 2012-02-27
  • 打赏
  • 举报
回复
都是有时间的哇啊,写那么长的代码,顶啊!
Jim_King_2000 2012-02-27
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 modicum_tk 的回复:]

老大让我先放到结构体,再push到vector,HELP。
[/Quote]
没必要放结构体……
这样吧,你说说程序的整体需求,我帮你写。你拿着程序再去搞定你老大。
modicum_tk 2012-02-27
  • 打赏
  • 举报
回复
老大让我先放到结构体,再push到vector,HELP。
modicum_tk 2012-02-27
  • 打赏
  • 举报
回复
是那个163邮箱吧,恩,结贴了,谢谢大家
Jim_King_2000 2012-02-27
  • 打赏
  • 举报
回复
jim_king_2000@163.com
加载更多回复(30)

64,688

社区成员

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

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