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. 解决Java程序连接mysql数据库出现CommunicationsException: Communications link failure错误的问题

    一.背景 最近在家里捣鼓一个公司自己搭建的demo的时候,发现程序一启动就会出现CommunicationsException: Communications link failure错误,经过一番排 ...

  2. SpringBoot前世今生

    序 本文主要讲述spring boot的由来,即其它诞生的背景,初衷,现状,及对未来的展望. 背景 在很早的年代,J2EE还是java企业级应用的王者规范,EJB风行其道.后来有一个叫Rod John ...

  3. html常用标签介绍

    常用标签介绍 文本 最常用的标签可能是<font>了,它用于改变字体,字号,文字颜色. 点击查看效果 <font size="6">6</font&g ...

  4. 《Mastering.Ext.JS. 》书上主要示例都搞了个样子出来,纪念

  5. c#3.0新特性

    1.自动属性 public int ID { get; set; } // 上面的ID属性(自动属性)等同于下面的ID属性 // private int _id; // public int ID / ...

  6. maven权威指南学习笔记(四)—— maven生命周期(lifecycle)

    定义: 生命周期是包含在一个项目构建中的一系列有序的阶段 举个例子来说就是maven 对一个工程进行: 验证(validate) -- 编译源码(compile) -- 编译测试源码(test-com ...

  7. 了解 Spring Data JPA

    前言 自 JPA 伴随 Java EE 5 发布以来,受到了各大厂商及开源社区的追捧,各种商用的和开源的 JPA 框架如雨后春笋般出现,为开发者提供了丰富的选择.它一改之前 EJB 2.x 中实体 B ...

  8. OpenGL帧缓存对象(FBO:Frame Buffer Object)(转载)

    原文地址http://www.songho.ca/opengl/gl_fbo.html 但有改动. OpenGL Frame BufferObject(FBO) Overview: 在OpenGL渲染 ...

  9. Linux学习笔记(13)-进程通信|命名管道

    匿名管道只能在具有亲属关系的进程间通信,那么如果想要在不具有亲戚关系,想在陌生人之间通信,那又该怎么办呢? 别慌,Linux身为世界上*强大的操作系统,当然提供了这种机制,那便是命名管道-- 所谓命名 ...

  10. SQL Server 2012 数据库数据导出为脚本

    转自:http://blog.csdn.net/ituff/article/details/8265822 将高版本的的SQL Server数据库移到低版本的SQL Server是一件十分蛋疼的事,最 ...