我有一个12个XML文件,我从中提取一个CSV文件,我从中提取第1列并将值附加到tt.txt文件。
现在,我需要从这个.txt文件中提取值...每次写入数据时...... 但问题是,当我使用
时$ contents = fread($ fd,filesize($ filename));
fclose($ fd);
$ delimiter =',';
$ splitcontents = explode($ delimiter,$ contents);
每次添加tt.txt文件时,IT只会从文件的第一个值读取!
我希望你能理解这个问题。我需要的是,我希望$ contents只包含附加的新数据......而不是每次都从文件的开头读取...
有没有办法实现这一点,或者php失败了?/
这个问题是从TXT文件中提取 - >执行计算 - >写INTO新的txt文件。问题是我无法从中间值读取到新值.PHP总是从文件的开头读取。
答案 0 :(得分:0)
我认为您需要存储最后一个文件位置。
调用filesize获取当前长度,读取文件,稍后检查文件大小是否不同(或者你可能知道其他方式,并使用fseek将光标移动到文件中,然后从那里读取。
IE:
$previousLength = 0;
// your loop when you're calling your new read function
$length = filesize($filename);
fseek($fd,$previousLength);
$contents = fread($fd,$length - $previousLength);
$previousLength = $length;
答案 1 :(得分:0)
它只读取第一个字段,因为PHP不会自动假设换行符(\n
)表示新记录;你必须自己处理这个问题。
使用您已有的内容,我会执行以下操作:
$contents = fread($fd, filesize($filename));
close($fd);
/* Now, split up $contents by newline, turning this into an array, where each element
* is, in effect, a new line in the CSV file. */
$contents = explode("\n", $contents);
/* Now, explode each element in the array, into itself. */
foreach ($contents as &$c) {
$c = explode(",", $c);
}
将来,如果您想逐行扫描,因为您可能会通过阅读整个文件来占用太多资源,请使用fgets()
。< / p>
答案 2 :(得分:0)
我在数组方面并不擅长,但听起来我需要一个关联数组(我正在用下面的代码做类似的事情。 $ lines = explode(“\ n”,$ contents);
foreach ($lines as $line) {
$parts = explode(',', $line);
if (count($parts) > 0) {
$posts = array();
$posts[] = array('name' => $parts[3],'email' => $parts[4],'phone' => $parts[5],'link' => $parts[6],'month' => $parts[0],'day' => $parts[1],'year' => $parts[2]); }
foreach ($posts as $post):
$post = array_filter(array_map('trim', $post));