C++学习进阶版(二):与文件相关的函数用法

目录

1、读取文件的指定行

(1)main函数中直接读

(2)封装成函数

① 无返回值类型

② 直接返回读取的内容

2、求文件的行数

3、文件内容读取成一个字符串


1、读取文件的指定行

(1)main函数中直接读

#include <iostream>
#include <fstream>
#include <string>

int main() {
    // 要读取的行号,例如第5行
    int line_number = 5;
    int i = 0; 
    std::ifstream file("G:/MyCode/c++/test.dump");

    if (file.is_open()) {
        std::string line;
        // 从1开始计数,因为行号通常是从1开始的
        while (std::getline(file, line)) {
            ++i;
            if (i == line_number) {
                // 成功读取了目标行
                std::cout << "Line " << line_number << ": " << line << std::endl;
                break; // 找到目标行后退出循环
            }
        }
        if (i != line_number) {
            std::cerr << "Could not find line " << line_number << std::endl;
        }

        file.close();
    } else {
        std::cerr << "Unable to open file" << std::endl;
    }

    return 0;
}

(2)封装成函数

① 无返回值类型

#include <iostream>
#include <fstream>
#include <string>

// 函数声明,只接受行号 n 作为参数
void readSpecificLineFromFile(int n);

int main() {
    int line_number = 5; // 要读取的行号
    readSpecificLineFromFile(line_number);
    return 0;
}

// 函数定义,读取并输出第 n 行的内容
void readSpecificLineFromFile(int n) {
    std::ifstream file("G:/MyCode/c++/test.dump");
    int current_line = 0;
    if (file.is_open()) {
        std::string line;
        while (std::getline(file, line)) {
            ++current_line;
            if (current_line == n) {
                std::cout << "Line " << n << ": " << line << std::endl;
                file.close();
                return;
            }
        }
        std::cerr << "Could not find line " << n << std::endl;
        file.close();
    } else {
        std::cerr << "Unable to open file" << std::endl;
    }
}

② 直接返回读取的内容

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

// 函数声明,只接受行号 n 作为参数
std::string readLineFromFile(int n);

int main() {
    int line_number = 5; // 要读取的行号
    std::string line= readLineFromFile(line_number);
    cout << line <<endl;
    return 0;
}


// 函数定义,读取并输出第 n 行的内容
std::string readLineFromFile(int n) {
    std::ifstream file("G:/MyCode/c++/test.dump");
    int current_line = 0;
    std::string line;
    std::string lineContent;
    if (!file.is_open()) {
        std::cerr << "Unable to open file" << std::endl;
        return ""; // 返回空字符串表示文件无法打开
    }
    while (std::getline(file, line)) {
        ++current_line;
        if (current_line == n) {
            lineContent = line;
            break;
        }
    }
    file.close(); // 确保文件被关闭

    return lineContent; // 返回找到的行内容,或空字符串表示未找到
}

2、求文件的行数

#include <iostream>
#include <fstream>
#include <string>

// 函数声明
int countLines(const std::string& filename);

int main() {
    int lineCount = countLines("1.dump");
    if (lineCount > 0) {
        std::cout << "The file '1.dump' has " << lineCount << " lines." << std::endl;
    } else {
        std::cerr << "The file '1.dump' could not be opened or is empty." << std::endl;
    }
    return 0;
}

// 函数定义
int countLines(const std::string& filename) {
    std::ifstream file(filename);
    int lineCount = 0;

    // 检查文件是否成功打开
    if (file) {
        std::string line;
        // 逐行读取文件直到文件末尾
        while (std::getline(file, line)) {
            ++lineCount;
        }
    } else {
        // 如果文件无法打开,返回0表示没有行
        lineCount = 0;
    }

    // 关闭文件
    file.close();

    // 返回文件的行数
    return lineCount;
}

3、文件内容读取成一个字符串

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <stdexcept>

// 函数声明,读取文件并将其内容合并为一个字符串
std::string readAndConcatenateDumpFile(const std::string& filename);

int main() {
    try {
        std::string filename = "1.dump";  // 文件路径
        std::string fileContents = readAndConcatenateDumpFile(filename);
        
        // 打印文件内容,这里仅打印前100个字符作为示例
        std::cout << "Contents of file '" << filename << "':" << std::endl;
        std::cout << fileContents << std::endl;

    } catch (const std::runtime_error& e) {
        std::cerr << "Error: " << e.what() << std::endl;
        return 1;  // 非正常退出,返回错误码
    }

    return 0;  // 正常退出
}

// 函数定义,读取文件并将其内容合并为一个字符串
std::string readAndConcatenateDumpFile(const std::string& filename) {
    std::ifstream file(filename);
    if (!file.is_open()) {
        throw std::runtime_error("Failed to open the dump file.");
    }
    std::stringstream ss;
    std::string line;

    while (std::getline(file, line)) {
        ss << line;
    }
    file.close();
    return ss.str();
}

最近在用C++写指令文件的解码和状态机转换,其中的一些函数,供大家参考。

后续相关的会更新在文章中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/565570.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

让流程图动起来

我们平时画流程&#xff0c;然后贴到文档&#xff0c;就完事了。但是过程演示的时候&#xff0c;如果只是一张静态图&#xff0c;很难吸引到听众的注意力&#xff0c;表达效果并不太好。常用的方法是可以用PPT进行动态演示&#xff0c;做PPT也是需要花一些时间&#xff0c;同时…

跳跃游戏 II (贪心, 动态规划)

题目描述(力扣45题) : 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到…

基于 TLE9879EvalKit 使用 Micro Inspector Pro

文章目录 1.前言2.环境准备3.DataScreen 功能3.1 例程准备3.2 测试仪表板功能 4.Oscilloscope 功能4.1 例程准备4.2 测试示波器功能 5.对比 FreeMaster6.推荐阅读 1.前言 之前参加 Infenion 的 2023 年双 11 活动&#xff0c;领取了一块 TLE9879 的开发版TLE9879 EvalKit&…

哈希表详解

目录 1.unordered系列关联式容器 2.哈希 3.unordered_map和unordered_set哈希实现 4.代码总和 1.unordered系列关联式容器 1.1unordered系列 c98的STL里面提供了底层为红黑树的关联式容器(set和map); 但是在结点数目很多的时候查询的效率就低了, 所以c11里STL又提供了四个…

mysql基础14——视图

视图 视图是一种虚拟表 可以把一段查询语句作为视图存储在数据库中 需要的时候把视图看作一个表&#xff0c;对里面的数据进行查询 视图并没有真正存储数据 避免了数据存储过程中可能产生的冗余 提高了存储的效率 子查询 嵌套在另一个查询中的查询 派生表 如果在查询中…

Java中的super

package day33; ​ public class Person {public String name;public int age; ​public Person() {System.out.println("调用了父类的无参构造");} } ​ package day33; ​ public class teacher extends Person{public teacher() {System.out.println("调用了…

Springboot+Vue项目-基于Java+MySQL的在线文档管理系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

单机单实例部署Kafka及测试

文章目录 部署Docker 测试启动测试创建Topic生产者消费者 集成Manager的部署dockerfile效果 参考资料 在我们做和kafka开发相关的工作时&#xff0c;往往希望独立部署一套kafka测试环境。而kafka部署时&#xff0c;不能只是简单安装kafka自身组件&#xff0c;还要安装zookeeper…

你准备好迎接它了吗?英伟达CEO黄仁勋预言:人形机器人将成为未来主流

在近日举行的“CadenceLIVE 硅谷 2024”大会上&#xff0c;英伟达公司的首席执行官黄仁勋与大会主办方Cadence公司的CEO进行了一场富有深度的对话。在这场引人瞩目的交流中&#xff0c;黄仁勋大胆预测&#xff0c;未来人形机器人将成为主流&#xff0c;引领科技发展的新潮流。 …

n!的位数:面向对象的解法

Description:针对每个非负整数n&#xff0c;计算其n!的位数。 Input:输入数据中含有一些整数n(0≤n<10^7)。 Output:根据每个整数n&#xff0c;输出其n!的位数&#xff0c;每个数占独立一行。Output:重新排列01串的顺序。使得串按基本描述的方式排序。 #include <iostr…

MATLAB——M文件

M文件 MATLAB允许编写两种程序文件- 脚本−脚本文件是扩展名为.m的程序文件。在这些文件中&#xff0c;您编写了一系列要一起执行的命令。脚本不接受输入&#xff0c;也不返回任何输出。它们对工作区中的数据进行操作。 函数−函数文件也是扩展名为.m的程序文件。函数可以接…

数图可视化品类空间管理系统入编《零售门店数字化赋能专项报告(2024年)》

数图可视化品类空间管理系统荣幸入编中国连锁经营协会发布的 《零售门店数字化赋能专项报告&#xff08;2024年&#xff09;》&#xff0c;报告以零售门店为切入点&#xff0c;通过引入“5P”的技术框架及梳理业内配套最佳实践方案&#xff0c;理出一套科学的、完整的零售门店数…

未来城市可视化,A3D引擎支持,免费搭建全新一代数字孪生!

AMRT3D数字孪生引擎https://www.amrt3d.com/#/ 什么是未来城市&#xff1f;它是新型数字化理念的载体&#xff0c;以数字孪生与物理世界城市的融合为核心&#xff0c;通过数字孪生技术在数字空间实时构建城市&#xff0c;采用数据整合和分析预测来实时模拟、预测、控制整体城市…

使用gdal均匀筛选点矢量

使用gdal均匀筛选点矢量 作用&#xff1a; 通过计算各点之间的欧式距离&#xff0c;筛选出符合目标的、均匀发布在空间中的N个数据点。 效果示意图 运行环境 python 3.10 安装&#xff1a;tqdm、numpy和tqdm这三个库 完整代码 import numpy as np from osgeo import ogr,…

星域社区原版APP源码/社区交友App源码/动态圈子群聊php源码

简介 初始版本是由RuleAPP规则之树开发的&#xff0c;而星域社区则是在此基础上进行了二次开发和美化。作者花了近一年的时间来打磨它&#xff0c;现在即将推出Pro版。如果你只想免费使用的话&#xff0c;可以使用原始的RuleAPP版本。但是&#xff0c;如果你想要获得更好的美观…

python3爬虫笔记2

1 urlpare模块 urlparse模块主要用于处理URL字符串&#xff0c;它的核心功能是将URL拆分为多个组成部分&#xff0c;并允许你通过名字属性或索引来访问这些部分。通过调用urlparse模块的相关函数&#xff0c;你可以轻松解析URL&#xff0c;获取其不同组件的信息&#xff0c;如…

究竟该怎么寄快递才能安全无误的送到手中呢?

最近&#xff0c;小编上班了发现有同事在吐槽快递送到手中的时间很晚了&#xff0c;比预计的时间差了很多&#xff0c;并且产品也有不同程度的损坏。这就让我们很是恼火了&#xff0c;但是细细研究后才发现有一部分的原因竟然是我们的原因才导致的寄快递出现了很多纰漏。 首先…

sql(ctfhub)

一.整数型注入 输入1 输入2 输入2-1&#xff0c;回显为1的结果&#xff0c;说明是数字型&#xff0c;只有数字型才可加减 判断字段数为2 查询数据库 查表 查列 显示flag内容 二.字符型注入 输入1 输入2 输入2-1&#xff0c;说明为字符型&#xff0c;不是数字型 判断闭合方式为…

MyBatis 框架学习(I)

MyBatis 框架学习(I) 文章目录 MyBatis 框架学习(I)1. 介绍2. 准备&测试3. MyBatis 注解基础操作3.1 日志输出3.2 Insert 操作3.3 Delete 操作3.4 Update 操作3.5 Select 操作 总结 1. 介绍 之前我们学习过利用JDBC操作数据库进行项目开发&#xff0c;但我们发现它操作起来…

mysql基础19——日志

日志 mysql的日志种类非常多 通用查询日志 慢查询日志 错误日志 与时间有关联 二进制日志 中继日志 与主从服务器的同步有关 重做日志 回滚日志 与数据丢失有关 通用查询日志 记录了所有用户的连接开始时间和截至时间 以及给mysql服务器发送的所有指令 当数据异常时&…