<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);
ini_set('memory_limit', '1024M'); // or you could use 1G
// CSV auslesen---------------------------------------------------------------------------------------------------------------------
// Intervall zwischen den Zeiten wenn ausgedünnt wird in Minuten:
$intvBetween = 30;
// Intervall in die Vergangenheit wo ausgedünnt werden soll
// in Tagen:
$intvBefore = 90;
$csvFile = 'HK40Log.csv';
$destFile = 'HK40Log-filtered.csv';
$now = new DateTime();
var_dump($now);
$lastWritten = new DateTime();
$file_to_read = fopen($csvFile, 'r');
$file_to_write = fopen($destFile, 'w+');
$lineNr = 1;
while (!feof($file_to_read)) {
echo "Zeile $lineNr<br>";
$line = fgetcsv($file_to_read, 1000, ';');
// Damit der folgende Code fehlerfrei funktioniert
// muss die Zeile erfolgreich geparst sein:
if ($line !== false) {
// Um von der genauen Position von Datum und Zeit unabhängig zu sein,
// benutzen wir eine Regex:
preg_match('/\d\d\.\d\d\.\d{4} \d\d:\d\d:\d\d/', $line[0], $matches);
// Den Fall abfangen, dass dieses Format nicht gefunden wurde:
if (isset($matches[0])) {
var_dump($matches);
$currentTime = DateTime::createFromFormat('d.m.Y G:i:s', $matches[0]);
$diffBefore = $currentTime->diff($now);
//var_dump($diffBefore->days);
if ($diffBefore->days > $intvBefore) {
var_dump('Zeile ist älter als ' . $intvBefore . ' Tage');
// Die Zeile ist älter als $intvBefore,
// prüfen ob das Intervall zwischen zwei Ausgaben
// schon abgelaufen ist:
$diffBetween = $currentTime->diff($lastWritten);
var_dump($diffBetween->days);
if ($diffBetween->i + $diffBetween->h * 60 > $intvBetween) {
var_dump('aber im ' . $intvBetween . ' Min Abstand, ohne Änderung schreiben');
$lastWritten = DateTime::createFromFormat('d.m.Y G:i:s', $matches[0]);
fputs($file_to_write, implode(";", $line) . "\n");
}
} else {
var_dump('Zeile ist jünger als ' . $intvBefore . ' Tage, ohne Änderung schreiben');
// Die Zeile ist jünger als $intvBefore,
// wir schreiben sie direkt in die Zieldatei:
fputs($file_to_write, implode(";", $line) . "\n");
}
} else {
echo 'Fehler beim Parsen von ' . $line[0];
}
}
$lineNr++;
}
fclose($file_to_read);
fclose($file_to_write);
rename('C:/Web/Apache24/htdocs/csvlog/' . $csvFile, 'C:/Web/Apache24/htdocs/csvlog/HK40Log-old.csv');
rename('C:/Web/Apache24/htdocs/csvlog/' . $destFile, 'C:/Web/Apache24/htdocs/csvlog/' . $csvFile);
?>