所以我有一個CSV與這個樣子行文件:添加時間戳列預先存在的CSV
126404「560-00877」,「中心帽,A級,灰色,」 877 2 34.29 0
我想添加一個時間戳列,因此它們看起來像這樣:
126404 「560-00877」, 「中心帽,A級,灰色,」 877 2 34.29 0 2005-04-06
是否有簡單的(r)php方法打開CSV文件併爲每行添加時間戳?
謝謝!
所以我有一個CSV與這個樣子行文件:添加時間戳列預先存在的CSV
126404「560-00877」,「中心帽,A級,灰色,」 877 2 34.29 0
我想添加一個時間戳列,因此它們看起來像這樣:
126404 「560-00877」, 「中心帽,A級,灰色,」 877 2 34.29 0 2005-04-06
是否有簡單的(r)php方法打開CSV文件併爲每行添加時間戳?
謝謝!
,你可以讀取文件的每一行到一個數組,和時間戳附加到每個行,當你把它寫回:
$filename="/path/to/file.txt";
// Backup
if(!copy($filename, 'backup.txt')){
die('Failed to backup!');
}
// Store file contents in array
$arrFile = file($filename);
// Open file for output
if(($fp = fopen($filename,'w')) === FALSE){
die('Failed to open!');
}
// Write contents, inserting $data as second line
$currentLine = 0;
$cntFile = count($arrFile);
while($currentLine <= $cntFile){
fwrite($fp, $arrFile[$currentLine].",".date('y-m-d').",\n");
$currentLine++;
}
// Delete backup
unlink('backup.txt');
只需修改符合date('Y-M-D')
,以滿足您的需求。
嗯...它似乎在寫入文件,但不會追加任何內容(日期)。有任何想法嗎? – JoeMH
可能是這裏有'backup.xml'的拼寫錯誤...此外,您將整個文件讀入內存,PHP默認內存限制可能太長。爲簡單起見,可能跳過了,所以讓海報知道。 – Yuriy
不,我不認爲backup.xml輸入錯誤是問題,但我仍然糾正它。你能用日期向我們展示整條線嗎?另外,試着用'date('y-m-d',$ time)'來衡量。 – dotancohen
這個嗎?
$data = file("file.csv",FILE_IGNORE_NEW_LINES);
$fp = fopen("file_new.csv","w");
foreach((array)$data as $val) {
fwrite($fp,$val." ".$timestamp."\r\n"); // build the $timestamp
}
fclose($fp);
由於默認的PHP內存限制,一次讀取整個文件時很容易耗盡內存。爲了簡單起見,您可能只是略過了一點,所以只是讓問題海報知道。 – Yuriy
是的,用戶只是要求一個簡單的方法,所以我就這樣做了。 – 2012-06-06 11:15:12
你可以用標準的功能得到使用fgetcsv/fputcsv裏面做解析/逃逸的工作對你最接近:
$hSrc = fopen('path/to/file.csv', 'o');
if ($hSrc === false) {
throw new Exception('Cannot open source file for reading!');
}
$hDest = fopen('path/to/new.csv', 'w');
if ($hDest === false) {
throw new Exception('Cannot open destination file for writing!');
}
$timestamp = date('Y-m-d');
// reading source file into an array line by line
$buffer = 1000; // should be enough to accommodate the longest row
while (($row = fgetcsv($hSrc, $buffer, ' ')) !== false) {
$data['timestamp'] = $timestamp;
// writing that modified row into a new file
if (fputcsv($hDest, $data, ' ') === false) {
throw new Exception('Failed to write a CSV row!');
}
}
fclose($hDest);
fclose($hSrc);
$ buffer = 1000; //應該足以容納最長的行。你永遠不會知道我的意見.. – 2012-06-06 11:16:10
正確,這是我的錯,因爲我試圖提供「安全」的代碼。該參數是可選的,以加快處理速度,如果保留默認值0,則沒有限制(除了自然限制)。 – Yuriy
我這樣做:
<?php
$file_path = "yourfile.txt";
$file = file($file_path, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach ($file as $line => $content)
{
$file[$line] = $content." ".date('Y-m-d');
}
$file = implode("\n",$file);
file_put_contents($file_path, $file);
?>
甜。這工作完美。謝謝。 – JoeMH
簡單( r)比什麼? – salathe