2017-07-06 42 views
0

我需要做的是能够在每次运行.php到名为testdata_new.csv的另一个.csv时从testdata.csv移动第一行(附加数据)。使用php将第一行从csv移动到另一个使用php

这是数据的一个例子,其包括姓名,年龄,职业

实施例数据testdata.csv:

约翰,32,科学家
玛丽,25,雇主
尼克,36 ,设计师
Miky,46岁,销售
亚历克斯,29,物流

这是.php运行它的方式: 从testdata.csv(john,32,scientist)剪下第一行,并将其粘贴到第一行(标题)下的新testdata_new.csv,该行始终为“Name年龄工作“。 用其余行保存testdata_new.csv和testdata.csv。

我做了一些测试,但我仍然远离解决方案。

<?php 

    $file = "testdata.csv"; 
    $f = fopen($file, "r"); 
    $i = 0; 

    $file2 = str_replace(".csv", "_new.csv", $file); 
    $f2 = fopen($file2,"a"); 

    while ($i<2) { 
     $record = fgetcsv($f); 
     foreach($record as $field) { 
      echo $field . "<br>"; 
     } 

     $i++; 
    } 

    fwrite($f2,fread($f, filesize($file))); 

    fclose($f); 
    fclose($f2); 

?> 

执行该脚本将显示template.csv文件 的第一行,并会生成名为template_new.csv其中包含以下行的另一个文件:

玛丽,25,雇主
尼克,36岁,设计师
Miky,46岁,销售
亚历克斯,29,物流

我真的需要在template_new.csv文件只是显示在第一行:

约翰,32,科学家

并再次保存template.csv没有第一行作为想法是剪切和粘贴行,如下:

玛丽,25,雇主
尼克,36岁,设计师
Miky,46岁,销售
亚历克斯,29,物流

谢谢大家提前的帮助!

+0

你在哪里挣扎?你的代码是什么,它做什么? – Mischa

+0

在代码块之前应该怎么做代码。但是我无法将它从.csv中移出第一行。到现在为止,第一行是粘贴的,但是将其余行(除第一行外)粘贴到新文件。 –

+0

还有两个开放点......你在哪里挣扎?你的代码是什么?我想帮助您,但我不想复制您的代码以知道它究竟做了什么,因此请告诉我们... – Mischa

回答

0

一样容易,因为这;-)

$old_file = 'testdata.csv'; 
$new_file = 'testdata_new.csv'; 

$file_to_read = file_get_contents($old_file); // Reading entire file 
$lines_to_read = explode("\n", $file_to_read); // Creating array of lines 

if ($lines_to_read == '') die('EOF'); // No data 

$line_to_append = array_shift($lines_to_read); // Extracting first line 

$file_to_append = file_get_contents($new_file); // Reading entire file 

if (substr($file_to_append, -1, 1) != "\n") $file_to_append.="\n"; // If new file doesn't ends in new line I add it 

// Writing files 
file_put_contents($new_file, $file_to_append . $line_to_append . "\n"); 
file_put_contents($old_file, implode("\n", $lines_to_read)); 
+0

嗨NetVivius,谢谢你的回答!第一次运行脚本时,它非常完美。从old_file中剪下第一行,然后将其附加到new_file。正是我在寻找的东西。问题是第二次运行该脚本。将old_file中的所有剩余行(不仅是第一行)剪切到附加到new_file的行上。每次运行脚本时,我都需要它做同样的事情(只剪切第一行)。谢谢 –

+0

你确定你没有多次运行脚本? 'array_shift'函数只占用“旧”文件的第一行。我测试了它,它应该工作。请再检查一次。 – NetVicious

+0

这真的很奇怪。我多次测试它。我从服务器中删除新旧文件,并从头开始重新创建它们。在你答案后的10分钟之前,我再测试一次。它总是一样的。第一次一切正常,第二次将所有行从旧文件移动到新文件。我第一次运行5分钟后再次运行脚本,以避免计时问题。没有什么,同样的行为... –

相关问题