C/C++实战017:fstream读写文本操作详解
Posted qilun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C/C++实战017:fstream读写文本操作详解相关的知识,希望对你有一定的参考价值。
.nc是数控程序文件的后缀,是辅助设计制造(CAD/CAM)时编程用的文件。里面包含了坐标系统,加工指令、辅助功能等,可以在生产过程中引导机床执行数控指令来完成产品的加工。今天要实现的功能是修改nc格式文件中的内容,查找程式中是否存在M30(主程序结束指令),如果存在则用M99替换,如果没有就在后面添加M99(结束子程式指令)。
fstream文件流
C++ 为我们提供了一个标准库 fstream用于文件处理,只要一如头文件<fstream>即可使用该类中的方法。fstream提供了三个类,用来实现c++对文件的操作,他们分别是ifstream(从文件中读取数据)、ofstream(向文件中写人数据)、fstream(读写文件中数据),在实际应用中可以根据需要的不同选择不同的类来定义:如果想以输入方式打开就用ifstream来定义;如果想以输出方式打开就用ofstream来定义;如果想以输入/输出方式来打开就用fstream来定义,这里我只用到fstream类定义。
fstream打开文件
C++程序中要使用一个文件,需要先要打开文件后才能读写,读写完后记得关闭文件。 而fstream类中打开文件可以使用open()方法:void open(const char* filename,int mode,int access),该提供了三个参数分别是打开的文件名、打开文件的方式、打开文件的权限。第一个参数必填,第二个参数默认ios::in|ios::out,第三个参数默认0(普通文件打开。
逐行读取文件
nc文件中的指令都是以行为分割的,这里我们就采用逐行读取的方式来读取文件,这里用到string类型所以需要引入#include <string>,逐行读取采用方法getline()实现,s拿到的就是每行的数据。
查找内容是否存在
我们需要查找内容中是否存在M30指令,所以我们在读取到每行数据时要去判断该行中是否有我们需要的数据,这里我们得到的string类型数据,所以我们可以使用find方法来查找是否存在key,如果不存在则返回string::npos。如果你用的是char*可以使用strstr方法来实现字符串比对。
内容替换
当我们找到了对应的字符串时接下来我们要做的就是将该字符串用M99指令替换掉,这个比较简单通过find找到该字符串所在的位置,然后通过replace方法将其替换掉即可。 这里需要注意的是传入的是指针而非字符串,否则更改的数据不会返回的原来的数据中的。
插入内容
为了重写内容我们需要把拿到的数据临时存下,当文件中没有M30指令时我们需要往文本中添加M99指令,指令必须在%之前所以这里我们需要插入数据。这里我定义一个空字符串,然后通过append函数是向string的后面追加字符串,这样就把每行的数据进行了临时存储。添加“ ”是用来换行的,插入数据我们可以使用insert函数来实现。
保存内容
读取完之后我们对内容进行的适当的修改,接下来就是将数据再次保存起来。文本文件的读写可以利用插入器(<<)和析取器(>>)来进行进行写和读,保存内容实际就是将数据写入到文件中。这里需要注意的是我是新定义了一个save通过插入器(<<)向文件中写入内容。
以上是关于C/C++实战017:fstream读写文本操作详解的主要内容,如果未能解决你的问题,请参考以下文章
关于fstreamifstreamofstream读写文本文件二进制文件详解