我试图编写一个脚本来读取文件并对其进行编辑,然后我就用fopen来做。
我的问题是,当fwrite它应该输入单词TEST时,它也会删除一些东西并无理由输入一些数字。
这是我的代码:
G81 I-1. F500.
回声仅用于测试目的。
我无法正确粘贴输入和输出dunno为什么所以我将它粘贴在pastebin中抱歉。
正如您在输出中看到的那样,\bhi\b
之后的2行消失了,在Y开头的某些行中也会出现随机数和空白空格。
答案 0 :(得分:0)
您认为随机数实际上是输入文件的一部分。因为您从文件中读取然后写入文件,所以您将从输入文件中覆盖行的片段。
例如,输入文件中的行16-19
显示为:
G81 I-1. F500.
X-79.803
Y64.947
X-81.468 Y67.451
代码使用(17
)读取行fgetcsv()
然后写入COMIENZO DE CICLO
后跟当前文件指针位置的新行(位于行{{1}的开头}})。行18
和17
包含15个字符和两个换行符。看来你正在Windows上运行代码;它使用两个字符来表示一个新行,这两行总共有19个字符。
恰好18
有17个字符;在你添加两个以上的字符之后编写的新行,总共19个字符。这样,输入中的行COMIENZO DE CICLO
和17
将完全被包含文本18
的单行替换。
这是行COMIENZO DE CICLO
出现在输出文件中的方式:
16-18
对G81 I-1. F500.
COMIENZO DE CICLO
X-81.468 Y67.451
的下一次调用从当前文件指针位置读取,这位于fgetcsv()
行的开头(以前是18
之前的行19
行号是针对人类的,代码使用文件开头的偏移量来保留其内部预订。)原始行fwrite()
(18
)的内容被忽略了代码然后被覆盖。它没有被处理就丢失了。
文件中的下一行(原始文件中第一个Y64.947
,18-20
之后的行fwrite()
):
19-21
代码读取行X-81.468 Y67.451
X-86.995 Y64.947
X-97.3 Y68.781
(18
)并确定它必须X-81.468 Y67.451
。当前文件指针位于行fwrite('PRUEBA'.PHP_EOL)
的开头(行19
)。 X-86.995 Y64.947
会覆盖该行中的第一个fwrite('PRUEBA'.PHP_EOL)
个字符:
6+2
(我使用点而不是换行符)将其更改为:
X-86.995 Y64.947 <--- original
^^^^^^^^
PRUEBA.. <--- replacement
PRUEBA
Y64.947
之前有一个空格字符。它在输入文件中并没有被覆盖。
部分Y64.947
在没有被阅读的情况下永远丢失,下一次调用X-86.995
会读取行fgetcsv()
并且可能无法执行您想要的操作。
这种情况一直持续到文件结束为止。
以下代码显示了如何正确处理文件。您需要使用将输入文件中不需要替换的部分放入输出文件的代码来完成它。插入此代码的位置标有一个大注释,该注释也建议在那里写什么。
Y64.947