【发布时间】:2015-07-29 19:57:35
【问题描述】:
我正在尝试编写一个读取文件并对其进行编辑的脚本,我正在使用 fopen 进行。
我的问题是,当fwrite它应该输入单词TEST它也会删除一些东西并输入一些数字没有理由。
这是我的代码:
if (($gestor = fopen("files/prueba.pim", "c+")) !== FALSE) {
while (($datos = fgetcsv($gestor, 1000, "<br>")) !== FALSE) {
$numero = count($datos);
for ($c=0; $c < $numero; $c++) {
if ("G81"==substr($datos[$c], 0, 3)){
fwrite($gestor, "COMIENZO DE CICLO".PHP_EOL);
}else {
if (";"!=substr($datos[$c], 0, 1)) echo utf8_encode($datos[$c]."\n");
if ("X"==substr($datos[$c], 0, 1) or "Y"==substr($datos[$c], 0, 1))
fwrite($gestor, "TEST".PHP_EOL);
}
}
}
fclose($gestor);
}
回声仅用于测试目的。
我无法正确粘贴输入和输出不知道为什么所以我将它粘贴到 pastebin 抱歉。
正如您在输出中看到的,G81 I-1. F500. 之后的 2 行刚刚消失,随机数和空格也出现在以 Y 开头的某些行中。
【问题讨论】:
-
在你的代码中你只写了
COMIENZO DE CICLO和TEST,但是在提供的输出中我看到了更多的数据。也许你也在其他地方写文件?此外,如果您希望附加到文件,请使用a标志而不是c(c将覆盖文件开头的内容) -
感谢您的评论 @Justinas ,但正如您所见,使用
c+并没有覆盖文件。你能告诉我你还看到了什么数据吗?我不知道你在说什么。对不起,如果这听起来太粗鲁,在我看来,但我不知道用英语怎么说^^ -
您应该尝试创建一个较小的测试用例 - 请参阅 stackoverflow.com/help/mcve 了解为什么这对您和我们都有帮助的一些提示和解释。
-
你混合读取和写入同一个文件。当然,你会弄得一团糟。打开一个新文件进行写入。从第一个文件 (
fgetcsv()) 中读取数据,对其进行处理,然后将结果放入第二个文件 (fwrite())。关闭这两个文件,然后删除输入文件(或重命名,以保留它作为备份)并用第一个文件的名称重命名第二个文件。 -
这是现在的输入
G81 I-1. F500. X-79.803 Y64.947 X-81.468 Y67.451 X-86.995 Y64.947 X-97.3 Y68.781 X-107.603 Y64.947 X-109.268 Y67.451 X-114.433 Y66.373 X-119.304 Y66.445 Y78.111和这个 otuputG81 I-1. F500. COMIENZO DE CICLO X-81.468 Y67.451 TEST 95 Y64.947 X-97.3 Y68.781 TEST 603 Y64.947 X-109.268 Y67.451 TEST 433 Y66.373 X-119.304 Y66.445 TEST 1你看到的仍然写随机数,试试@axiac 说的。