Teil 2.2 - Textdateien CSV
Achtung: Neue und aktualisierte Versionen der Tutorials finden Sie hier:
http://www.pscl.ch.csv Dateien lassen sich auf verschiedene Arten einbinden. Hier wird eine flexible PHP Variante vorgestellt, falls Datum und Werte umformatiert werden müssen.
1. Beispiel Quelldatei:
z.B. "data.csv"
01.11.2013;00:00;26.0;88;1000.5
01.11.2013;00:05;26.0;82;1000.6
01.11.2013;00:10;25.9;85;1000.7
01.11.2013;00:15;25.5;87;1000.2
...
2. Das PHP Script
Um diese Datei in ein vom amchart lesbares Format umzuwandeln, verwenden wir ein PHP Script welches ähnlich aufgebaut ist, wie das Datenbank Import Script aus Teil 3.1:
<?php
//Dateiname der Importdatei
$dateiname = "data.csv";
//Start Datenzeile der Importdatei
$startzeile = 1;
//Die Import Datei öffnen
if (($handle = fopen("$dateiname", "r")) !== FALSE)
{
//2 zähler
$lcin = 0;
$lcout = 0;
//Jede Zeile abarbeiten (Hier das csv Trennzeichen anpassen ";")
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)
{
//zeilenzähler Importdatei erhöhen
$lcin++;
//importdatei zeilen überspringen
if($lcin >= $startzeile)
{
//kein komma in Ausgabe Zeile 1
if ($lcout != 0)
{
echo ", \n";
}
//komma ab zeile 2
$lcout = 1;
// datum und Zeit zerlegen
//Spalten $data[0][1] und Trennzeichen anpassen ". :")
$splitDate = explode(".", $data[0]);
$splitTime = explode(":", $data[1]);
// Datum und Zeit neuen Variablen zuweisen
// Variablen zuweisen (Spalten anpassen: "splitDate[0][1][2]")
$csvYear = $splitDate[2];
$csvMonth = $splitDate[1];
$csvDay = $splitDate[0];
$csvHour = $splitTime[0];
$csvMinute = $splitTime[1];
// Timestamp erstellen
$ts = strtotime("$csvYear-$csvMonth-$csvDay $csvHour:$csvMinute");
// Ein Timestamp lässt sich einfacher formatieren. zb. "2013-11-25 00:00"
// $jsDate2 = date('"Y-m-d H:i"', $ts);
// Date Format erstellen (js date object). zb. "new Date(2013,10,25,0,0)"
$jsYear = date('Y', $ts); // 2013
$jsMonth = date('n',$ts)-1; // 10 (js month start with 0)
$jsDay = date('j', $ts); // 25 (ohne führende null)
$jsHour = date('G', $ts); // 0 (ohne führende null)
$jsMinute = intval(date('i', $ts)); // 0 (ohne führende null)
$jsDate = "new Date($jsYear,$jsMonth,$jsDay,$jsHour,$jsMinute)";
//Werte mit komma als Dezimalzeichen sollten auf punkt geändert werden mit
//$data[2] = str_replace(",", ".", "$data[2]");
// Ausgabe Datenzeile für amcharts "new Date(2013,10,25,0,0),t:1.0,etc)
// Spalten an Werte anpassen z.b Temp in Spalte 3 "$data[2]"
echo "{date: $jsDate,t:".$data[2].",h:".$data[3].",p:".$data[4]."}";
}
}
// Import Datei schliessen
fclose($handle);
}
?>
Das Script sollte folgendes ausgeben:
{date: new Date(2013,10,1,0,0),t:26,0,h:88,p:1000.5},
{date: new Date(2013,10,1,0,5),t:26,0,h:82,p:1000.6},
{date: new Date(2013,10,1,0,10),t:25,9,h:85,p:1000.7},
{date: new Date(2013,10,1,0,15),t:25,5,h:87,p:1000.2}