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. mysqlDBA(1-3年)

    1.熟悉Aliyun操作系统的管理.配置和系统调优: 2.熟悉mysql管理 3.熟悉mysql主从复制,主主复制 4.熟悉数据库的备份策略,监控策略,性能测量策略 5.熟悉linux/unix操作系 ...

  2. REPL环境

    一.Node的REPL基本操作 REPL(Read-eval-print-loop):交互式解析器 在REPL环境下,可以定义和运行变量.函数.对象. REPL的常用命令: 进入node,即进入了RE ...

  3. SQL语法和运算符(一)

    一个数据库通常包含一个或多个表.每个表由一个名字标识,表包含带有数据的记录(行). 一些最重要的SQL命令(SQL对大小写不敏感): 一.SQL语法 select:从数据库中提取数据 update:更 ...

  4. FileStream读写文件【StreamWriter 和 StreamReader】

    FileStream对象表示在磁盘或网络路径上指向文件的流.这个类提供了在文件中读写字节的方法,但经常使用StreamReader或StreamWriter执行这些功能.这是因为FileStream类 ...

  5. cout输出控制——位数和精度控制

    刷到一道需要控制输出精度和位数的题目 刚开始以为单纯使用 iomanip 函数库里的 setprecision 就可以,但 OJ 给我判了答案错误,后来一想这样输出并不能限制位数只能限制有效位数. 比 ...

  6. linux中redis的php扩展安装

    PHP中的扩展一般都是在安装环境的时候就已经装好了的.但是有的一些扩展在后期想要加上去的话也是可以的.php支持后期安装扩展. 想要安装扩展就需要先去下载安装扩展所需要的扩展源码包.autoconf. ...

  7. border-radius四个值的问题

    我们都知道border-radius后面如果是4个值的话,依次代表的是左上角.右上角.右下角.左下角. 但是这样写呢:border-radius:10px 20px 30px 40px/50px 40 ...

  8. 【面试题】D

    一面: 1.介绍实习项目,负责那一部分: 2.C++的三大特性: 3.7层网络协议:应用层协议有哪些,TCP/IP属于哪一层,三次握手: 4.Linux: 4.1.查看进程: 4.2.vim文件与to ...

  9. 使用极光推送(www.jpush.cn)向安卓手机推送消息【服务端向客户端主送推送】C#语言

    在VisualStudio2010中新建网站JPushAndroid.添加引用json帮助类库Newtonsoft.Json.dll. 在web.config增加appkey和mastersecret ...

  10. SQL SERVER 2005修改数据库名称,包括物理文件名和逻辑名称

    SQL SERVER 2005修改数据库名称,包括物理文件名和逻辑名称   原来数据库名称为 aa,物理文件名称为 aa.mdf 和 aa_log.ldf:   需要修改数据库名称为 bb,物理文件名 ...