我有大的sql文件,我需要在那里更改一些行,现在我的文件中有这样的数据
INSERT INTO `LINK_LA_TYP` VALUES
('1','8917181','1','24','2'),
('1','8934610','1','24','1'),
('1','9403766','1','30','1'),
('1','9422299','1','30','2'),
我做到了,例如在$ count行上我又写了一次
插入
LINK_LA_TYP
VALUES
但是我的文件看起来像这样:
INSERT INTO `LINK_LA_TYP` VALUES
('1','8917181','1','24','2'),
('1','8934610','1','24','1'),
('1','9403766','1','30','1'),
INSERT INTO `LINK_LA_TYP` VALUES
('1','9422299','1','30','2'),
但我需要前一行符号,改为;我怎么能在大文件中这样做? 所以我需要查看文件并写入行(完成)然后更改为;在前一行,并在每个~500行(取决于计数器)到文件末尾
执行此操作答案 0 :(得分:1)
这是最简单的工作流程:
创建一个临时文件。然后:
完成后,只需将临时文件重命名为正确的文件名,这将删除旧文件。
如果每行将与之前完全相同,您可以改为内联文件。您可以通过将文件指针与fseek正确对齐然后写入来完成此操作。这有点难以实现,但可以节省临时文件的空间(也可能更快一点)。只有在生成的文件大小与原始文件大小完全相同时才会出现这种情况(例如,如果您只将某个字符从一个字符更改为另一个字符)。
答案 1 :(得分:0)
如果你读入文件流(例如通过fgets
;参见那里的例子),你应该计算行数并用第X行的分号替换逗号;并在X + 1处插入一个新行。无需获取上一行。
答案 2 :(得分:0)
花了一些时间来嘲笑这个。
sed -i ':a;N;$!ba;s/,\n INSERT INTO/;\n INSERT INTO/g' your_file.sql
如果你真的想从php脚本运行它,可以把它放在exec()中。