Code Bye

新手求助[文本]C语言如何删除文本内指定的的字符或单词 插入字符或单词怎么实现?

我们大一C语言要做课程设计,最后这些功能实在不会实现,因为课讲得慢,对文本的处理方法不懂,恳求各位分享下处理思路,感激不尽!告诉我大概处理思路就行,我是个初学者,很多东西不懂,要讲得浅显点哦~

现在我不会实现的功能是:
      1、删除文本内的字符或单词串
      2、 插入字符或者单词串
      3、替换字符或单词
      4、每个单词最后一个字母改为大写
处理完的结果都要保存回原txt文件

这些功能如果是针对数组实现,我都会。但针对文本实现这些功能,一点都不懂。其实我只是不知道怎么样处理文本数据比较方便,希望能得到各位前辈的帮助!先谢谢!

新人报道。
第一次发帖,不知道积分有什么用,不过还是省点吧…

50分
我来说说我的理解。

首先,文本文件在磁盘上的存储一般是一块一块连续的,

如果单纯修改文件的内容(一对一修改),这种情况下不会修改文件的长度,这样还好,直接读到那个位置将新数据写入即可。

但是如果涉及到了文件长度的修改,比如删除了一些字符,或者是插入了一些字符,这样必然会影响之后的数据位置的偏移。

所以我的思路是,先读出数据,存到一个buffer里,然后按要求修改数据,最后再把数据写入文件(写入之前将文件truncate为0)。

上面的思路有一个问题,如果文件比较大,那buffer也不可能想多大就多大对吧,
可以每次读出一部分数据比如2048个字节,先修改这2048个字节的数据,再写入另外一个新的文件,继续读数据,修改,再继续追加写入那个新的文件。最后将旧文件删除,将新文件名字改为旧文件的名字。
(这里注意一种情况,就是,每次读出的数据,最后那个单词什么的,可能被截截断了,所以要做一个特殊处理)。

—————–
个人理解,大神一般都在楼下面。

50分
既然是初学者, 那就不要考虑太多. 
最简单的实现场景即可.
1. 读取原文件到内存缓冲区.  (可以假定文件不超过1K)
2. 按需要增删改查字符串.
3. 重新写回文件.
先做好这个, 再来看1楼提到大文件操作, 你就明白得多了.
按需要增删改 要怎么实现的?

例如文本内容
——————————————
abc test is abc
dfg test1
——————————————
例如我要在里面某个位置增加一个字符或单词,要怎么找到我需要的位置并插入呢?删除也同理

引用 2 楼 xiaohuh421 的回复:

既然是初学者, 那就不要考虑太多. 
最简单的实现场景即可.
1. 读取原文件到内存缓冲区.  (可以假定文件不超过1K)
2. 按需要增删改查字符串.
3. 重新写回文件.
先做好这个, 再来看1楼提到大文件操作, 你就明白得多了.

按需要增删改 要怎么实现的?
例如文本内容
——————————————
abc test is abc
dfg test1
——————————————
例如我要在里面某个位置增加一个字符或字符串 要怎么找到我需要的位置呢?删除也同理

引用 1 楼 henuyx 的回复:

我来说说我的理解。

首先,文本文件在磁盘上的存储一般是一块一块连续的,

如果单纯修改文件的内容(一对一修改),这种情况下不会修改文件的长度,这样还好,直接读到那个位置将新数据写入即可。

但是如果涉及到了文件长度的修改,比如删除了一些字符,或者是插入了一些字符,这样必然会影响之后的数据位置的偏移。

所以我的思路是,先读出数据,存到一个buffer里,然后按要求修改数据,最后再把数据写入文件(写入之前将文件truncate为0)。

上面的思路有一个问题,如果文件比较大,那buffer也不可能想多大就多大对吧,
可以每次读出一部分数据比如2048个字节,先修改这2048个字节的数据,再写入另外一个新的文件,继续读数据,修改,再继续追加写入那个新的文件。最后将旧文件删除,将新文件名字改为旧文件的名字。
(这里注意一种情况,就是,每次读出的数据,最后那个单词什么的,可能被截截断了,所以要做一个特殊处理)。

—————–
个人理解,大神一般都在楼下面。

存到缓存区之后可以随便自主修改的吗?我不知道怎么实现这个功能…


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明新手求助[文本]C语言如何删除文本内指定的的字符或单词 插入字符或单词怎么实现?