Wetterstation CSV --> TXT erstellen

olguil

Mitglied
Hallo alle,

ich habe eine Wetterstation, die automatisch in bestimmten Abständen Wetterdaten an verschiedene Stellen in der Welt sendet. Gängige Dateien wie "csv" sind darunter. Nun habe ich ein Problem mit Weedal, einer Seite, die gesendete Daten von Wetterstationen aufbereitet und zur Verfügung für alle Interessierten darstellt.

Nun möchte ich, da Weedal mit der Software VWS (Virtual Weatherstation Ver13.01 v. Ambient) und den erstellten Dateien ein grosses Problem beim Darstellen hat, ein kleines PHP-Tool schreiben, welches die vorhandene CSV-Datei (data2.csv) ausliest und nur bestimmte Daten in eine TXT-Datei (weedaal.txt) schreibt, steuern tue ich die Intervallen des PHP-Tools dann über einen Cronjob meines Servers.

Bestimmte Daten sind nun:
----------------------------------------

akt. Temperatur in °C
Luftfeuchte in %
Luftdruck in hPa
Niederschlag seit 0 Uhr
Windstärke
Windrichtung
Uhrzeit der Datei
akt. Tag (Datum)
Veränderung des Luftdrucks innerhalb der letzten 3 h
----------------------------------------

Wie man oben sieht, muss die erste Zeile in der TXT-Datei frei bleiben.

Bisher habe ich herumprobiert, jedoch kein brauchbares Ergebnis zustande gebracht.

Der Inhalt einer solchen CSV-Datei sieht so aus:
----------------------------------------
1.01,2007,8,31,8,28,3,9,18,270,63,87,19.1,15.4,1012.00,0.00,0.00,0.00,0,15.4,87,0.0,0,0.0,0,0.00,0.0,0,15.2,20.3,18.3,13.3,0.000,0.6,-0.1,-0.07,0.6,0.6,0.6,0.00,0.00
----------------------------------------

Ich weiss inzwischen, dass es genau 41 Datensätze sind, ich jedoch nicht alle brauche, da Weedal nur 9 bestimmte braucht.

Man sieht z.B. in der CSV folgendes, die ich brauche:
2007,8,31 = aktuelles Datum
8,28 = aktuelle Zeit
usw.

Mir wäre schon geholfen, wenn ich die einzelnen "Arrays" herauslesen und darstellen könnte. Bischen habe ich mich mit fgetcsv und fopen beschäftigt, aber, wie gesagt, mit wenig Erfolg.

Hier mal mein gescheiterter Versuch:

PHP:
<?php
$row = 1;                                      // Anzahl der Arrays
$handle = fopen ("data2.csv","r");              // Datei zum Lesen öffnen
while ( ($data = fgetcsv ($handle, 1000, ",")) !== FALSE ) { // Daten werden aus der Datei
                                               // in ein Array $data gelesen
    $num = count ($data);                      // Felder im Array $data
                                               // werden gezählt
    print "<br>\n";
    $row++;                                    // Anzahl der Arrays wird
                                               // inkrementiert
    for ($c=1; $c < $num; $c++) {              // FOR-Schleife, um Felder
        print $data[$c] . "<br>\n";            // des Arrays auszugeben
    


}
}



fclose ($handle);
?>


Wäre für Hilfe echt dankbar, vielleicht hat ja sogar ein ähnliches Script schon fertig und ich könnte es nach den Bedürfnissen von Weedal modifizieren.

Gruss Olli
 
Dein Code sieht doch nicht schlecht aus. Was funktioniert denn daran nicht? Bekommst du nen Fehler oder kommt gar kein Output!?
Oder liegt das Problem daran, dass du nicht weißt wie die Daten dann in eine Textdatei kommen sollen?

Die ganze Sache setzt natürlich voraus, dass du weißt an welcher Stelle der CSV Datei die Daten stehen, die du brauchst, aber davon gehe ich mal aus ;)
 
Ich würde das .csv wie ein ganz normales Textfile behandeln. Folgender Code sollte eigentlich funktionieren. Allerdings bedingt das ein CSV, das wirklich in folgendem Format ist:

Code:
----------------------------------------
1.01,2007,8,31,8,28,3,9,18,270,63,87,19.1,15.4,1012.00,0.00,0.00,0.00,0,15.4,87,0.0,0,0.0,0,0.00,0.0 ,0,15.2,20.3,18.3,13.3,0.000,0.6,-0.1,-0.07,0.6,0.6,0.6,0.00,0.00
----------------------------------------

PHP:
<?php
	//Das Array, in welches die Werte geschrieben werden
	$value_array = Array();

	//Das zu öffnende File
	$file = "some.csv";
	
	//Wenn das File existiert...
	if(is_file($file))	{
		//...wird es geöffnet
		$fh = fopen($file,"r+");

		//Wenn das File geöffnet werden konnte...
		if(is_resource($fh))	{
			//...werden die Daten...
			while(!feof($fh))	{
				//...Linie für Linie bis zum Ende des Files ausgelesen
				$line = fgets($fh);
				
				//Es werden nur Linien als relevant betrachtet, in welchen nicht mehr als ein Minus am Stück vorkommt
				if(!preg_match("#--#", $line))	{
					//Der gefundene, relevante String wird in eine Variable geschrieben
					$relevant_string = $line;
				}
			}
			//Das offene File wird geschlossen
			fclose($fh);
		}else{
			echo "Die Datei konnte nicht ge&ouml;ffnet werden";
		}
	}else{
		echo "Die zu &ouml;ffnende Datei existiert nicht";
	}

	//Der String wird bei jedem Koma getrennt. Jeder Wert ist nun im Ziel-Array in einem eigenen Feld
	$value_array = explode(",", $relevant_string);

	//Das Array wird ausgegeben
	print_r($value_array);
?>

Gruss
De Igäl
 
Hallo,

danke erstmal an euch, Igäl deine Sache hat mich weitergebracht, den Rest, also jetzt eine TXT mit den richtigen Datensätzen zu erzeugen schaffe denke ich.

Danke nochmals für den schnellen Anstoss.

Gruss Olli
 
Obwohl deine Datei ja eigentlich prädestiniert ist für getcsv(); und Igäl's Code diese Funktion mit gets(); und explode(); ja nur simuliert...
 
Hm.. hab noch nie mit fgetcsv gearbeitet. Hab mir jetzt aber mal die Doku dazu durchgelesen. Würde das Ganze nun auch mit fgetcsv lösen. Betrachte meine Funktion von daher nur als Workaround falls fgetcsv partout nicht funktionieren will.
 
Zurück