したがって、次のような行を含む CSV ファイルがあります。
126404 "560-00877" "センター キャップ、グレード A、グレー、" 877 2 34.29 0
次のようにタイムスタンプ列を追加したいと思います。
126404 "560-00877" "センター キャップ、グレード A、グレー、" 877 2 34.29 0 2005-04-06
CSV ファイルを開き、各行にタイムスタンプを追加する単純な (r) php メソッドはありますか?
ありがとう!
これです?
$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);
ファイルの各行を配列に読み取り、書き戻すときに各行にタイムスタンプを追加できます。
$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')
ニーズに合わせて行を変更するだけです。
標準関数で得られる最も近い方法は、解析/エスケープ作業を行う 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);