<?php
$delimiter = '+';
$desiredCol = 3;
$dataNew = array();
if (isset($_POST['desiredCol'])) {
$desiredCol = filter_var($_POST['desiredCol'], FILTER_SANITIZE_NUMBER_INT);
}
if (isset($_POST['delimiter'])) {
$delimiter = filter_var($_POST['delimiter'], FILTER_SANITIZE_NUMBER_INT);
}
if (count($_FILES) > 0) {
$fileName = $_FILES['file']['name'];
$tmpFile = $_FILES['file']['tmp_name'];
if (($fp = fopen($tmpFile, "r")) !== FALSE) {
while (($data = fgetcsv($fp, 1000, ",")) !== FALSE) {
// Lets separate the values
$values = explode($delimiter, $data[$desiredCol - 1]);
// Lets sanitize the values (removes everything but .'s and #'s
$first = filter_var($values[0], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
$second = filter_var($values[1], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
// Lets join them and change the fields
$total = $first + $second;
$data[$desiredCol - 1] = number_format($total,2);
$dataNew[] = $data;
}
fclose($fp);
}
if (($fp = fopen($tmpFile, "w")) !== FALSE) {
foreach ($dataNew as $data) {
$row = implode(",", $data);
fwrite($fp, $row . "\r\n");
}
fclose($fp);
$complete = true;
}
if ($complete) {
// Headers should force download of file
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=\"$fileName\"");
readfile($tmpFile);
exit();
}
}
?>
<html>
<body>
<form action="" method="post" enctype="multipart/form-data">
<label for="file">Delimiter:</label>
<input type="text" name="delimiter" id="delimiter" size="5" value="<?php echo $delimiter ?>" />
<br />
<label for="file">Desired Column:</label>
<input type="text" name="desiredCol" id="desiredCol" size="5" value="<?php echo $desiredCol ?>" /> (1 is the first column)
<br />
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>