QT在进行文本读写时和C++一样,是基于文本流操作的。

QT在读取全部文本时,相对比较便捷。使用readAll()函数,配合split()进行分隔符的拆分(例如行结束符"\n"),可将拆分结果赋值给list,然后进行后续的数据处理。

ringRoadDistList = ringRoadDistStream.readAll().split("\n",QString::SkipEmptyParts);

在C++中也可以实现类似的效果:

    list<string> strList;
char line[];
while (false == staEnLane2Stream.eof())
{
staEnLane2Stream.getline(line, sizeof(line)); //c从staEnLane2Stream按行读取sizeof(line)个数到缓冲区line中(遇到"\n",将提前截止)
strList.push_back(line);
}

如果遇到换行符'\n'(第一种形式)或delim(第二种形式),则读取终止,'\n'或delim都不会被保存进s对应的数组中。

基于文本流的输出,两个类似:

ofstream resultStream;
resultStream.open(staEnLane3Path.c_str(), ios_base::out);
if (false == resultStream.is_open())
{
cerr << "error: unable to open output file: " << staEnLane3Path << endl;
return ;
}
while (lane2Map.end() != j)
{
cout << (*j).first << " " << (*j).second << endl;
resultStream << (*j).first << " " << (*j).second << endl;
++j;
}

举个栗子:

// ringRoadTime.cpp : 定义控制台应用程序的入口点。

#include "stdafx.h"
#include <string>
#include <cstring>
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <list>
#include <map>
using namespace std; int _tmain(int argc, _TCHAR* argv[])
{
string rootPath = "E:/superHighway/ringRoadData/GC/GC_Entry/";
string staEnLane2Name = "GC_stationEntryLane2.csv";
string staEnLane3Name = "GC_stationEntryLane.csv";
string staEnLane2Path = rootPath + staEnLane2Name;
string staEnLane3Path = rootPath + staEnLane3Name;
//ifstream staEnLane2Stream(staEnLane2Path.c_str(), ios::in);
ifstream staEnLane2Stream;
ofstream resultStream; //文件打开,保存数据到list,关闭文件
staEnLane2Stream.open(staEnLane2Path.c_str(), ios_base::in);
if (false == staEnLane2Stream.is_open())
{
cerr << "error: unable to open input file: " << staEnLane2Path << endl;
return ;
}
list<string> strList;
char line[];
while (false == staEnLane2Stream.eof())
{
staEnLane2Stream.getline(line, sizeof(line));
strList.push_back(line);
}
staEnLane2Stream.close();
resultStream.open(staEnLane3Path.c_str(), ios_base::out);
if (false == resultStream.is_open())
{
cerr << "error: unable to open output file: " << staEnLane3Path << endl;
return ;
} //数据插入map中,进行匹配
map<string, string> lane2Map;
list<string>::iterator k = strList.begin();
for (; k != strList.end(); ++k)
{
size_t i = (*k).find_first_of(",");
lane2Map.insert(pair<string, string>((*k).substr(,i), (*k).substr(i+)));
}
map<string, string>::iterator j = lane2Map.begin();
while (lane2Map.end() != j)
{
cout << (*j).first << " " << (*j).second << endl;
resultStream << (*j).first << " " << (*j).second << endl; //基于文本流的数据写入
++j;
}
resultStream.close(); system("pause");
return ;
}

C++文本处理_文件读写的更多相关文章

  1. 零基础逆向工程16_C语言10_宏定义_头文件_内存分配_文件读写

    #define 无参数的宏定义的一般形式为:#define 标识符 字符序列 如:#define TRUE 1 注意事项: 1.之作字符序列的替换工作,不作任何语法的检查 2.如果宏定义不当,错误要到 ...

  2. python基础操作_文件读写操作

    #文件读写# r只能读不能写,且文件必须存在,w只能写不能读,a只能写不能读# w+是写读模式,清空原文件内容# r+是读写模式,没有清空原文件内容,# 只要有r,文件必须存在,只要有w,都会清空原文 ...

  3. C#_文件读写常用类介绍

    首先要熟悉.NET中处理文件和文件夹的操作.File类和Directory类是其中最主要的两个类.了解它们将对后面功能的实现提供很大的便利.      本节先对和文件系统相关的两个.NET类进行简要介 ...

  4. day5_函数_文件读写_用一个函数来满足文件的读或者写_应用默认参数

    import json def op_file_tojson(filename,dic=None): #默认值参数,根据是否传dic字典来判断读还是写 if dic: #如果dic传了值,不是空的,则 ...

  5. 关于Windows文件读写_暗涌_新浪博客

    关于Windows文件读写_暗涌_新浪博客     这几天在研究怎么才能加快windows文件读写速度,搜了很多文章,MSDN也看了不少.稍微给大家分享一下.     限制windows文件读写速度的 ...

  6. Demo02_对结构体进行文件读写_张仕传_作业_

    #include <iostream> using namespace std; #define StructArrarySize 5 // 老师数量 #define StudentNum ...

  7. 7. Buffer_包描述文件_npm常用指令_fs文件读写_模块化require的规则

    1. Buffer 一个和数组类似的对象,不同是 Buffer 是专门用来保存二进制数据的. 特点: 大小固定: 在创建时就确定了,且无法调整 性能较好: 直接对计算机的内存进行操作 每个元素大小为1 ...

  8. QT_8_Qt中的事件处理_定时器事件_定时器类_事件分发器_事件过滤器_绘图事件_高级绘图事件_绘图设备_QFile 文件读写_QFileInfo文件信息

    Qt中的事件处理 1.1. 捕获QLabel中是鼠标事件 1.2. enterevent 鼠标进入 1.3. leaveevent 鼠标离开 1.4. 鼠标按下MyLabel::mousePressE ...

  9. Go语言学习之7 接口实例、终端文件读写、异常处理

    本节主要内容: 1. 终端读写2. 文件读写3. 命令行参数4. Json5. 自定义错误 1. 终端读写 操作终端相关文件句柄常量    os.Stdin:标准输入    os.Stdout:标准输 ...

随机推荐

  1. 源码安装php

    php安装扩展源yum install epel-releaseyum updateyum install libmcrypt libmcrypt-devel mcrypt mhash -yyum i ...

  2. webstorm添加*.vue文件代码提醒支持webstorm支持es6vue里支持es6写法

    本文转自:http://www.lred.me/2016/01/07/webstorm%E6%B7%BB%E5%8A%A0-vue%E6%96%87%E4%BB%B6%E6%94%AF%E6%8C%8 ...

  3. CentOS系统常用基本命令&Centos 7 命令变化

    一:查看cpu信息more /proc/cpuinfo | grep "model name"  grep "model name" /proc/cpuinfo ...

  4. tomcat 远程调试

    1.服务端查看cataline.sh 中的描述  cataline jpda start 开启服务端远程调试 远程调试端口JPDA_ADDRESS="8000" 2.本地代码参考  ...

  5. __clone()方法和传址区别

    示例: <?php class Computer{ public $name = '联想'; public function _run(){ return '运行中'; } } $comp1 = ...

  6. php多态简单示例

    <?php //多态由不同的人执行而产生不同的结果: //一个人通过不同的状态执行同一种动作,产生不同的结果也可称为多态 //多态的原理,就是类都写好了,不要去修改它,只要在类外的的调用参数的更 ...

  7. 【Java EE 学习 74 下】【数据采集系统第六天】【使用Jfreechart的统计图实现】【将JFreechart整合到项目中】

    之前说了JFreechart的基本使用方法,包括生成饼图.柱状统计图和折线统计图的方法.现在需要将其整合到数据采集系统中根据调查结果生成三种不同的统计图. 一.统计模型的分析和设计 实现统计图显示的流 ...

  8. SQL Server架构 -- 数据库文件和文件组

    在SQL SERVER中,数据库在硬盘上的存储方式和普通文件在Windows中的存储方式没有什么不同,也是在特定文件夹下创建不同的文件,然后经过文件存储系统去抓取数据信息.理解文件和文件组的概念可以帮 ...

  9. postgresql 常用数据库命令

    连接数据库, 默认的用户和数据库是postgrespsql -U user -d dbname 切换数据库,相当于MySQL的use dbname\c dbname列举数据库,相当于mysql的sho ...

  10. maven权威指南学习笔记(五)—— POM

    1. 简介 Archetype插件通过 pom.xml 文件创建了一个项目.这就是项目对象模型 (POM),一个项目的声明性描述. 当Maven运行一个目标的时候,每个目标都会访问定 义在项目POM里 ...