![]() |
|
||||||||||||||
| | 网站首页 | 数据库教程 | web编程 | 服务器 | 程序设计 | | ||
|
||
|
||||||
| 为有源头活水来——C++输入输出流的应用实例 | ||||||
作者:佚名 文章来源:不详 点击数: 更新时间:2007-9-12 ![]() |
||||||
|
这是首次发表自己的技术blog,希望大家多多指正。
为了从一个40M+的文本文件中提取需要的信息,编写了一个小程序。 基本思想: 1、 分割原文件(以下简称source)为n份,复制到不同的小文件(temp_i)中 2、 分别处理各个temp_i,每次读一行到buf中,分析bu输出提取结果到结果文件(result_i)中
在这次应用实例中,恰好用到了三种文件流 <fstream> //输出文件流 fstream temp; //输入输出文件流 ifstream log( 怎么才能让文件流变量动态指向多个文件呢? 首先是利用变量动态生成文件名,这是很有用的技巧。 string fileName; fileName = temp.open(fileName.c_str(), ios_base::out); …… //相关处理 temp.clear(); //很多时候如果不执行clear(),打开下个文件会出错 temp.close(); 在处理的时候输入输出文件流和std::cout和std::in支持的格式完全一样,如下, result<< 这样的语句风格很亲切。 有一个技巧是,<<并不是马上将流的内容输出到指定的地方,所以常常我们依靠cout的调试信息输出位置会变得奇怪,这里可以强制让流马上刷新: result.flush(); 另外还有一个很重要的流类是stringstream,选用它全因为C++Primer书上关于string流的第一个诱人的例子,生成的对象buf可以随着 #include stringstream row; while { row.put(ch); …… if { …… row<<ends;//抓取一行的buf 这是很重要的,为这个流添加结束标志 //接下来可以按照string的操作来操作这个流的内容了 size_t size = row.str().size(); 或者flag = strncmp("Building", row.str().c_str()+beg,8)); result<<(row.str().substr(beg, end-beg)).c_str()<<endl; P.S 程序中用了一位网友编写的函数http://www.cppblog.com/dqchen/archive/2006/12/10/16215.aspx,将int快捷的转换为string型。 string int2str( { string str = { str = ( num_ /= 10 ; } str = }
#include ofstream result; int num)if (num == 0 )return " 0 " ;"" ;int num_ = num > 0 ? num : - 1 * num;while (num_)char )(num_ % 10 + 48 ) + str;if (num < 0 )" - " + str;return str;本文来源:http://blog.csdn.net/yza0310/archive/2007/08/27/1760983.aspx
|
||||||
| 文章录入:admin 责任编辑:admin | ||||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | ||||||
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 网站地图 | 管理登录 | | |||
|