【问题标题】:Remove string direct from file without replace the entity file in PHP直接从文件中删除字符串而不替换 PHP 中的实体文件
【发布时间】:2016-11-15 09:04:04
【问题描述】:

我试图通过寻找它的位置然后删除来从文件中删除字符串。我不想将实体文件存储在字符串中而不是替换。我需要直接在文件上替换它,有什么办法可以做到吗?

我必须找到“#”,然后删除,直到找到下一个。

示例: 从 myfile.txt 中删除 #2 数据

  #1|info1|info2|info3|#2|inf11|info12|inf22|#3|inf11|info12|inf22|

删除后:

  #1|info1|info2|info3|#3|inf11|info12|inf22

我该怎么做?

【问题讨论】:

  • 除非您的文件对每个项目使用固定宽度,否则唯一的选择是将整个文件加载到内存中,对其进行操作并保存回来。
  • 不行。可以用其他语言如C或Java吗?
  • 在 C 语言中,您可以使用 mmap() 将文件内容作为内存中的数组访问。
  • @Dom 这并没有说明如何在不读入和重写的情况下做到这一点。

标签: php


【解决方案1】:

PHP 不提供任何直接操作文件内容的方法。你必须读入一个 PHP 变量,然后写回文件。

在 POSIX 系统上的 C 语言中,您可以使用 mmap() 来完成。

int fd = open("myfile.txt", O_RDWR);
struct stat stat_buf;
fstat(fd, &stat_buf);
size_t len = stat_buf.st_size;
char *contents = mmap(NULL, len, PROT_WRITE, MAP_SHARED, fd, 0);
char *num2 = strstr(contents, "#2"); // Find #2
char *num3 = strstr(num2, "#3"); // Find #3 after #2
memmove(num3, num2, len-(num3-contents)); // Shift everything from #3 over
memset(contents + len - (num3 - num2), num3 - num2); // Zero the end of the file
close(fd);

【讨论】:

    猜你喜欢
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    相关资源
    最近更新 更多