c++中使用ifstream对文件按照行间隔或者符号间隔来读取

2024-02-05 11:52

本文主要是介绍c++中使用ifstream对文件按照行间隔或者符号间隔来读取,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简单的文本存取与读取在的程序中是比较常见的,一般为了读取的时候便于区分数据,我们常常会用空格或者空行来隔开数据字段,所以对于读取文件的操作我们肯定会有些具体的需求比如按照行读取或者按照词来读取(或者说是以空格来间隔数据字段)。我们归类的行间隔、空格间隔、符号间隔文本的读取,本文来接下来介绍的就是这些常规的读取操作。

文章目录

  • 一、按照行来读取
    • 1、用std的getline函数读取
    • 2、使用ifstream的getline读取行
    • 3、行间隔读取
  • 二、按照词(空格间隔数据)读取
    • 1、按照空格分割来读取数据
    • 2、按照行读取又同时空格分割来读取

文章原出处: https://blog.csdn.net/haigear/article/details/136032962

一、按照行来读取

1、用std的getline函数读取

	#include <string>using namespace std;ifstream readIn;readIn.open("test.txt");string line;	while(getline(readIn,line)){	cout<<line<<line.size()<<endl;}readIn.close();

2、使用ifstream的getline读取行

下面的这段代码,直接使用了前面已经打开了的readIn对象,所以,我们直接使用了位置游标回零的函数seekg,要注意的是前面的clear函数,它清理掉了上一次操作的游标记录,如果不使用clear则无法将游标回零,意思是seekg会无效。

	readIn.clear();readIn.seekg(0, ios::beg);char strp[100];while(!readIn.eof()){readIn.getline(strp,100);cout<<strp<<endl;}

3、行间隔读取

实现了上面的按照行读取,在这基础上实现按照行间隔来读取就容易了,只要增加一个队空行的识别即可,代码如下:

	readIn.open("test.txt");string line;while(getline(readIn,line)){if(line.size()!=0)  //这里就实现了对空行的过滤cout<<line<<line.size()<<endl;elsecout<<"-----------";			}

我们通过line的大小就直接过滤出了空行。

二、按照词(空格间隔数据)读取

1、按照空格分割来读取数据

其实,按照词来读取,ifstream是有先天优势的,使用ifstream的流输出功能直接可以输出一个词。代码如下:

	#include <string>using namespace std;ifstream readIn;string str;readIn.open("test.txt");cout<<"read file content and list...."<<endl;while(!readIn.eof()){readIn>>str;if(!readIn.eof()) cout<<str<<" ";		}cout<<endl;

需要注意的是while里的if判断,如果没有这个判断,末尾的词会重复输出,具体可以查看或者测试eof函数的用法。

上面的代码有个明显的问题,它只能按照词的方式来读取,是不会区分行的。如果我们即要区分行又要按照词的方式来读取,如果办呢?

2、按照行读取又同时空格分割来读取

其实,要区分行又要按照词的方式来读取的需求是我们保存一些配置文件最常见的要求。比如这样的文件:

# 对所有 .bat, .cmd 文件强制使用 CRLF
*.bat text eol=crlf
*.cmd text eol=crlf# 对所有 .ps1 文件强制使用 CRLF
*.ps1 text eol=crlf
*.psd1 text eol=crlf
*.psm1 text eol=crlf# 对所有 Visual Studio 解决方案和项目文件强制使用 CRLF
*.sln text eol=crlf
*.vcproj text eol=crlf
*.vcxproj text eol=crlf

当然,我们这里测试的文件还没有这么复杂,没有说要按照某个符号来分割数据。

如果说需要即满足行分割又满足空格分割,那么我们可以这么来实现,先按照行来读取,后再对每行进行处理,代码如下:

	ifstream readIn;readIn.open("test.txt");string line;int pos=0;string tmpstr;while(getline(readIn,line)){if(line.size()!=0){cout<<line<<endl;while(line.find(32)){pos=line.find(32);cout<<line.substr(0,pos)<<pos<<endl;tmpstr=line.substr(pos);line=tmpstr;cout<<tmpstr<<tmpstr.size()<<endl;}}elsecout<<"-----------";}

至于,需要按照其他的分割符来实现数据读取的,也是可以同理处理。

这篇关于c++中使用ifstream对文件按照行间隔或者符号间隔来读取的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/680825

相关文章

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时