gpt4 book ai didi

c - 有没有一种不错的方法可以用 C 中的另一个单词替换文件中的字符串?

转载 作者:行者123 更新时间:2023-11-30 20:03:36 24 4
gpt4 key购买 nike

有没有办法用 C 语言中的另一个单词替换文件中的字符串?我意识到唯一可能的方法(也许)是使用适当的更改重写临时文件上的第一个文件。问题是,通过这样做,我被迫对同一个文件进行读取和写入(它没有那么优化)。有没有办法在不创建新文件的情况下进行字符串更改?如果是的话,我该怎么做?

最佳答案

如果将字符串 aa 替换为不同字节长度的字符串 bbb (与 UTF-8 字符长度不同,请参阅 utf8everywhere ),则需要要有一个临时文件,所以你暂时需要两倍的磁盘空间。顺便说一句,您可能需要指定一个单词到底是什么(想想单词如何结尾或分隔;combining characters 怎么样?)。

如果原始字符串和替换字符串具有相同的字节长度(例如,aacc 替换,但不是 çà),您可以就地进行替换。

如果文件大小很小(小于几 GB),您可以完全在堆内存中读取它(阅读 C dynamic memory allocation ,使用 malloc免费),remove原始文件,然后从内存中写入(例如使用 fwritefprintf)新文件。

在当前的笔记本电脑或台式机上,大多数文件都足够小以适合内存(例如,因为它们小于千兆字节),但并非全部。您可以在足够大的磁盘上拥有一个 TB 的文件(前提是您的磁盘分区和文件系统允许)。

了解有关 C 的更多信息 stdio input output functions 。无法在文件“中间”或“内部”插入或删除字节,只能在文件末尾插入或删除字节。

如果文件是文本文件(不是二进制文件),您可以逐行读取它(如果有的话使用 getline,或者仔细使用 fgets 并适当处理行溢出)并循环处理每一行。然后,您可以假设每行都适合内存(例如小于 1 GB)。

如果您需要能够处理包含单个 TB 行的巨大文件,您需要更多地考虑如何做到这一点(例如,阅读 finite state machines 和/或以 block 的形式进行处理)。

如果此类替换是您想要高效执行的常见操作,您可能会想到一些不同的(并且更“高效”)的方式将数据保留在磁盘上,也许使用索引文件 gdbm ,或数据库 sqlite .

关于c - 有没有一种不错的方法可以用 C 中的另一个单词替换文件中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48718720/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com