我有一个CSV,每晚都会以批发价格从批发商那里下载。
我需要做的是编辑价格列(第2列)并将当前值乘以1.3(30%)。
我的代码用于阅读提供的CSV并仅列出我需要的列,但我似乎无法弄清楚如何编辑价格列。
<?php
// open the csv file in write mode
$fp = fopen('var/import/tb_prices.csv', 'w');
// read csv file
if (($handle = fopen("var/import/Cbl_4036_2408.csv", "r")) !== FALSE) {
$targetColumns = array(1, 2, 3); // get data from the 1st, 4th and 15th column
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$targetData = array(); // array that hold target data
foreach($targetColumns as $column){ // loop throught the targeted columns array
if($column[2]){
$data[$column] = $data[0] * 1.3;
}
$targetData[] = $data[$column]; // get the data from the column
}
# Populate the multidimensional array.
$csvarray[$nn] = $targetData; // add target data to csvarray
// write csv file
fputcsv($fp, $targetData);
}
fclose($handle);
fclose($fp);
echo "CSV File Written Successfully!";
}
?>
请有人指出我正确的方向,解释你是如何计算出这个功能的,所以我可以同时学习。
答案 0 :(得分:0)
您将价格列始终乘以 - $ data [0] * 1.3。 这可能是错的。
其他观点:
如果您在此数据(csv)处理的生命周期中执行过一次,请尝试仅使用mysql本身解决它。创建类似于数据库的表,将.csv数据导入到该mysql表中。然后,SQL可以根据需要运行。
没有循环;没有编码,没有文件读/写,以及对UPDATE要做什么的精确控制。你只需要知道分隔符(行分隔符,例如。\ r \ n,列分隔符(例如逗号或制表符或分号)和双/单引号中的数据编码)
修改数据后,可以再次将其导出回csv。
如果要处理.csv文件本身,请在一个连接中打开它(只读模式),然后写入另一个文件 - 保存原始数据。
答案 1 :(得分:0)
你说包含价格的列是第二个,但然后使用该索引为零。无论如何,整个事情可以更容易
$handle = fopen("test.csv", "r");
if ( $handle !== FALSE) {
$out = "";
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
$data[1] = ((float)$data[1] * 1.3);
$out .= implode(";",$data) . "\n";
}
fclose($handle);
file_put_contents("test2.csv", $out);
}
此代码用逗号作为分隔符打开一个csv文件。 比读取每一行和每一行它将第二列(索引1)乘以1.3
这一行
$out .= implode(";",$data) . "\n";
为新的csb文件生成一行。看到破旧的文件......
关闭与文件的连接后。当你可以一举写下第二个文件时,无法连接两个文件。小文件的确如此