c - 如何在文件C中搜索并替换字符串

标签 c string file fseek file-pointer

我必须修改文件中的字符串,其结构如下:

Name: Name1
Surname: Surname1
ID: 00000000
Age: 30


Name: Name2
Surname: Surname2
ID: 00000001
Age: 32

...

我想这样做:我要求输入ID,我问他想更改什么(如果是姓名,ID或年龄),然后我问他想更改什么。然后我在文件中搜索 ID,如果他想更改姓氏,我将 FSEEK 移至 -1;对于姓名,我将 FSEEK 移至 -2;如果他想更改年龄,我将 FSEEK 移至 +1。

那么,有没有更简单或更快速的方法来做到这一点?

谢谢:)

最佳答案

您无法在文件内插入或删除某些字节序列。您只能覆盖现有字节,或在文件末尾附加新字节(这就是 <stdio.h> 文件的标准化方式,POSIX 或 Windows 文件的行为方式,以及几乎每个 file system -我不知道今天有什么异常(exception) - 有效)

因此,您可以从旧文件生成一个新文件(然后可能 rename 新文件与旧文件一样)。

您还可以读取内存中的所有文件并从内存中输出整个新内容。

您可能应该考虑更高级别的抽象:索引文件 GDBM或简单的数据库 Sqlite (或真实的数据库,如 PostgreSQLMongoDb 等...)

请注意,当前的处理器比磁盘快得多(hard spinning disks 的速度接近一百万倍 - 访问时间在几十毫秒内 - ,而 SSD 的速度可能是千倍 - 访问时间约为一百微秒)。因此,花费一些 CPU 时间来“组织”写入"file"或“网络”的数据是很有意义的(而且比上个世纪更有意义)。

如果使用笔记本电脑或台式机,它现在有大量 RAM(几 GB),因此很可能您的所有数据都适合内存。此外,RAM 带宽比磁盘、SSD 或网络带宽高得多(而且 RAM 延迟也低得多)。 如果您管理大量数据(超过一千兆字节),那么使用数据库系统是明智的(特别是,因为您可能不会一次写入所有数据)。

您可能对 serialization 感兴趣, application checkpointing , JSON ....

关于c - 如何在文件C中搜索并替换字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28897504/

相关文章:

java - Java中的文件删除

ios - 将附近的对象渲染在其他对象之上时,OpenGL 会变慢

if 语句中的条件

c - 我想在我的计算机上哪里保存一个txt文件,我想用c程序打开它来阅读?

将数组中的 char 元素与运算符进行比较

python - 如何验证字符串是否仅包含字母、数字、下划线和破折号?

c# - 在字符串列表中查找子字符串

c - 对于我的 C 代码,我读取文件并对它进行排序会产生垃圾输出。为什么?

python MySQL 模块类文件名

c - 使用套接字发送/接收字符串