Array oder "Stream" ... und ein nerviger Bug

Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 09:41:29 von Tobias Wendorff

Hey Leute,

ich habe hier eine CSV-Datei, die zum Jahresende wohl ca. 40.000
Zeilen haben wird. Es handelt sich um die Aufzeichnung einer
Klimastation (konvertiert aus dBASE4).

Zur einfachen Verwaltung will ich Tagesspannen (z.B. vom
01.10.2006 bis 31.10.2006) automatisch in eine neue Datei
schreiben lassen und dann weiterverarbeiten.

Meines Erachtens nach geht das in zwei Methoden:

1) "stream" (ich nenne es mal so):
Ich lese die Zeilen in einer Schleife aus, prüfe wann der
Starttag da ist und schreibe die Zeile in eine andere Datei.
Wenn der Endtag erreich ist, mache ich die Datei zu.

2) "array"
Ich lese die Zeilen in einer Schleife aus, prüfe wann der
Starttag da ist und schreibe die Zeilen in ein Array.
Wenn der Endtag da ist, schreibe ich das Array in eine
Datei und fertig.

Beide Lösungen habe ich mal hochgeladen:
http://www.tobwen.de/temp/klima/klima_stream.phps
http://www.tobwen.de/temp/klima/klima_array.phps

Einen Teil der Klima-Datei findet ihr hier:
http://www.tobwen.de/temp/klima/klima_php.csv

Welcher Weg ist effizienter? Ich weiß, der PHP-Code ist nicht
sauber, aber ich werde ihn noch verbessern, wenn die Richtung
klar ist.

Nun zu meinem Bug.
Ich habe die obigen Scripts mal mit einer Debug-Ausgabe
versehen. Das sieht dann so aus:
http://www.tobwen.de/temp/klima/klima_stream.php
http://www.tobwen.de/temp/klima/klima_array.php

Wie ihr seht, verhaspeln sich die Daten am 29. und 30. Oktober.
Aber welchen Grund hat das?? In allen anderen Monaten klappt es.
Nur da gibt es Chaos. Die CSV-Datei sieht für diese Tage
auch okay aus :-(

Noch zur Information:
00:10 Uhr ist die erste Durchschnittsangabe des aktuellen Tages.
24:00 Uhr ist die letzte Durchschnittsangabe des aktuellen Tages.

Ich bin echt verwirrt :-(

Grüße
Tobias

Re: Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 10:46:40 von Hadanite Marasek

> Welcher Weg ist effizienter? Ich weiß, der PHP-Code ist nicht
> sauber, aber ich werde ihn noch verbessern, wenn die Richtung
> klar ist.

Meiner Ansicht nach die Sache mit dem Array, weil Du dann den
Schreibzugriff in einem Rutsch abarbeiten kannst. Ist eine Speicherfrage.

Übrigens sehe ich noch eine Möglichkeit 3: Du schreibst das Ding
komplett in eine MySQL-Datenbank, dann stehen dir nämlich nette
Kommandos wie select * from klimadaten where datum between '2006-10-01'
and '2006-10-31' zur Verfügung.

> Wie ihr seht, verhaspeln sich die Daten am 29. und 30. Oktober.
> Aber welchen Grund hat das?? In allen anderen Monaten klappt es.
> Nur da gibt es Chaos. Die CSV-Datei sieht für diese Tage
> auch okay aus :-(

Ich würde mal ganz stark auf Sommerzeit/Winterzeit tippen: Du erhöhst
den Tag, indem Du 60*60*24 Sekunden dazu zählst - durch die
Zeitumstellung ist ein Tag aber mal kürzer und mal länger als 60*60*24
Sekunden.

Re: Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 10:54:19 von Helmut Chang

Tobias Wendorff schrieb:

> http://www.tobwen.de/temp/klima/klima_stream.phps

| $datum_ende = '30.10.2006';

Du weißt aber schon, dass der Oktober 31 Tage hat?

| $datum_aktuell += 60*60*24;

Tjo. Wieviele Stunden hatte der 29. Oktober 2006?

gruss, heli

Re: Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 10:57:27 von Tobias Wendorff

Hadanite Marasek wrote:
>> Welcher Weg ist effizienter? Ich weiß, der PHP-Code ist nicht
>> sauber, aber ich werde ihn noch verbessern, wenn die Richtung
>> klar ist.
>
> Meiner Ansicht nach die Sache mit dem Array, weil Du dann den
> Schreibzugriff in einem Rutsch abarbeiten kannst. Ist eine
> Speicherfrage.

Ja, das habe ich mir auch gedacht.

> Übrigens sehe ich noch eine Möglichkeit 3: Du schreibst das Ding
> komplett in eine MySQL-Datenbank, dann stehen dir nämlich nette
> Kommandos wie select * from klimadaten where datum between
> '2006-10-01' and '2006-10-31' zur Verfügung.

Das stimmt. Darüber sollte ich echt nachdenken. Ich wollte SQL
hierbei aber geschickt vermeiden. Wäre aber doch ganz praktisch.

>> Wie ihr seht, verhaspeln sich die Daten am 29. und 30. Oktober.
>> Aber welchen Grund hat das?? In allen anderen Monaten klappt es.
>> Nur da gibt es Chaos. Die CSV-Datei sieht für diese Tage
>> auch okay aus :-(
>
> Ich würde mal ganz stark auf Sommerzeit/Winterzeit tippen: Du erhöhst
> den Tag, indem Du 60*60*24 Sekunden dazu zählst - durch die
> Zeitumstellung ist ein Tag aber mal kürzer und mal länger als 60*60*24
> Sekunden.

Ja, aber die Sommer/Winterzeit wird doch immer nur um eine Stunde
verstellt und nicht um mehrere Tage. Ich frage ja immer ab, was in
der Zeile für ein Datum steht.

Wann war die Winterzeit-Umstellung denn? Ende Oktober? Weiß ich
gar nicht mehr :-)

Re: Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 11:32:35 von Tobias Wendorff

Helmut Chang wrote:
> Tobias Wendorff schrieb:
>
>> http://www.tobwen.de/temp/klima/klima_stream.phps
>
>> $datum_ende = '30.10.2006';
>
> Du weißt aber schon, dass der Oktober 31 Tage hat?

Ja, aber ich will ja nur bis zum 30.10.2006 ausgeben :-)

>> $datum_aktuell += 60*60*24;
>
> Tjo. Wieviele Stunden hatte der 29. Oktober 2006?

Aber das müsste doch eigentlich egal sein?!

$datum_aktuell dient (in konvertierter Form) ja nur als
Dateiname.

Den Dateinamenwechsel erhält er ja, indem aus der Zeitspalte
die Uhrzeit abgelesen wird.

Wenn die eine Spalte 24 und die andere Spalte 0 enthält,
wird $datum_aktuell erhöht und er wechselt.

Re: Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 13:10:51 von Norbert Melzer

Am Sun, 3 Dec 2006 11:32:35 +0100 schrieb Tobias Wendorff:

> Helmut Chang wrote:
>
>>> $datum_aktuell += 60*60*24;
>>
>> Tjo. Wieviele Stunden hatte der 29. Oktober 2006?

25 Stunden waren es.

> Aber das müsste doch eigentlich egal sein?!

Nicht ganz.
Denn wenn man am 29.10.2006 zwischen 00:00 und 00:59 Uhr 24 Stunden dazu
rechnet erhält man als Resultat den Zeitraum zwischen 23:00 und 23:59
Uhr des selben Tages.

HTH
Norbert
--
Link zur PHP-FAQ http://www.php-faq.de

Re: Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 13:51:18 von Tobias Wendorff

Norbert Melzer wrote:
> Denn wenn man am 29.10.2006 zwischen 00:00 und 00:59 Uhr 24 Stunden
> dazu rechnet erhält man als Resultat den Zeitraum zwischen 23:00 und
> 23:59 Uhr des selben Tages.

Verdammt ... ihr habt alle Recht :-(

Was würdet ihr als Lösungsvorschlag in Betracht ziehen?
MySQL wäre natürlich die Ultimate-Lösung, aber was würdet ihr als
"Home Premium" sehen? :-)

LÖSUNG

am 03.12.2006 15:09:35 von Tobias Wendorff

$datum_aktuell = strtotime('tomorrow', $datum_aktuell);

fertig :-))

Re: Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 15:14:02 von Norbert Melzer

Am Sun, 3 Dec 2006 13:51:18 +0100 schrieb Tobias Wendorff:

> Norbert Melzer wrote:
>> Denn wenn man am 29.10.2006 zwischen 00:00 und 00:59 Uhr 24 Stunden
>> dazu rechnet erhält man als Resultat den Zeitraum zwischen 23:00 und
>> 23:59 Uhr des selben Tages.
>
> Verdammt ... ihr habt alle Recht :-(
>
> Was würdet ihr als Lösungsvorschlag in Betracht ziehen?
> MySQL wäre natürlich die Ultimate-Lösung, aber was würdet ihr als
> "Home Premium" sehen? :-)

Wie wäre es mit ZlFDY? Es ist kostenlos, gut dokumentiert und hat neben
an eine eigene Gruppe...
--
Link zur PHP-FAQ http://www.php-faq.de

Re: Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 15:46:18 von Tobias Wendorff

Norbert Melzer wrote:
> Wie wäre es mit ZlFDY? Es ist kostenlos, gut dokumentiert und hat
> neben an eine eigene Gruppe...

was ist denn "ZlFDY"?

Re: Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 15:51:50 von Holger Pollmann

"Tobias Wendorff" schrieb:

> was ist denn "ZlFDY"?

Rot-13 ist dein Freund :-)

--
( ROT-13 if you want to email me directly: uvuc@ervzjrexre.qr )
"Das saarl. VwVfG läßt eine Interpretation deutscher Gesetze nur dann
zu, wenn sie nicht eindeutig sind." Manfred Saar, Präsident
Apothekerkammer d. Saarlandes. heute-journal v. 8. August 2006.

Re: Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 15:54:35 von Claus Reibenstein

Tobias Wendorff schrieb:

> Norbert Melzer wrote:
>
>> Wie wäre es mit ZlFDY? Es ist kostenlos, gut dokumentiert und hat
>> neben an eine eigene Gruppe...
>
> was ist denn "ZlFDY"?

Gerade wollte ich spontan "Frag mal Tante Google" vorschlagen - aber
Tante G. kann damit auch nichts anfangen ...

Muss also wohl irgendetwas sehr exotisches sein :-)

Gruß. Claus
--
,~°O O
O ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /

Re: Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 15:55:29 von Norbert Melzer

Am Sun, 3 Dec 2006 15:46:18 +0100 schrieb Tobias Wendorff:

> Norbert Melzer wrote:
>> Wie wäre es mit ZlFDY? Es ist kostenlos, gut dokumentiert und hat
>> neben an eine eigene Gruppe...
>
> was ist denn "ZlFDY"?

Hint: ROT-13
--
Link zur PHP-FAQ http://www.php-faq.de

Re: Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 15:58:16 von Claus Reibenstein

Holger Pollmann schrieb:

> "Tobias Wendorff" schrieb:
>
>> was ist denn "ZlFDY"?
>
> Rot-13 ist dein Freund :-)

Also wenn Norbert _wirklich_ das gemeint hat, dann hat er wohl Tobias'
Posting absolut nicht verstanden.

Gruß. Claus
--
,~°O O
O ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /

Re: Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 16:03:29 von Tobias Wendorff

Claus Reibenstein wrote:
> Holger Pollmann schrieb:
>
>> "Tobias Wendorff" schrieb:
>>
>>> was ist denn "ZlFDY"?
>>
>> Rot-13 ist dein Freund :-)
>
> Also wenn Norbert _wirklich_ das gemeint hat, dann hat er wohl Tobias'
> Posting absolut nicht verstanden.

Ja, scheint mir so :-)

Re: Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 16:04:03 von Tobias Wendorff

Norbert Melzer wrote:
> Am Sun, 3 Dec 2006 15:46:18 +0100 schrieb Tobias Wendorff:
>
>> Norbert Melzer wrote:
>>> Wie wäre es mit ZlFDY? Es ist kostenlos, gut dokumentiert und hat
>>> neben an eine eigene Gruppe...
>>
>> was ist denn "ZlFDY"?
>
> Hint: ROT-13

*G* Du hast mein Posting nicht verstanden :-)

Ich meinte, MySQL wäre die Königslösung, aber ich wäre mit einer
Bauernlösung (= nicht MySQL) auch zufrieden :-)

Re: Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 16:09:30 von Norbert Melzer

Am Sun, 03 Dec 2006 15:58:16 +0100 schrieb Claus Reibenstein:

> Holger Pollmann schrieb:
>
>> "Tobias Wendorff" schrieb:
>>
>>> was ist denn "ZlFDY"?
>>
>> Rot-13 ist dein Freund :-)
>
> Also wenn Norbert _wirklich_ das gemeint hat, dann hat er wohl Tobias'
> Posting absolut nicht verstanden.
>
> Gruß. Claus

Doch ich meine genau das. Und ich bin eben der Meinung daß es sich dabei
um die von ihm verlangte Home Premium Lösung handelt. Warum ich das
denke steht bereits in <031206.151402.dclpm.39.6.dlg@news.nobbz.de>
--
Link zur PHP-FAQ http://www.php-faq.de

Re: Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 16:46:13 von Tobias Wendorff

Norbert Melzer wrote:
> Doch ich meine genau das. Und ich bin eben der Meinung daß es sich
> dabei um die von ihm verlangte Home Premium Lösung handelt. Warum ich
> das denke steht bereits in
> <031206.151402.dclpm.39.6.dlg@news.nobbz.de>

Mein Outlook Express kann leider keine News-IDs lesen :-(

Re: Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 18:07:51 von Claus Reibenstein

Tobias Wendorff schrieb:

> Mein Outlook Express kann leider keine News-IDs lesen :-(

http://oe-faq.de/?56FAQ:3.26

Gruß. Claus
--
,~°O O
O ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /

Re: Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 18:14:21 von Holger Pollmann

Claus Reibenstein <4spammersonly@web.de> schrieb:

>>> was ist denn "ZlFDY"?
>>
>> Rot-13 ist dein Freund :-)
>
> Also wenn Norbert _wirklich_ das gemeint hat, dann hat er wohl Tobias'
> Posting absolut nicht verstanden.

Davon abgesehen, daß Norbert ja bestätigt hat, daß er MySQL meinte,
denke ich mal, daß die Wahrscheinlichkeit, daß es ein Datenbanksystem
auf der Welt gibt, das sich ZlFDY nennt, so gering ist, daß die einzig
logische Möglichkeit die ist, daß Norbert "MySQL" ROT-13-verschlüsselt
hat.

--
( ROT-13 if you want to email me directly: uvuc@ervzjrexre.qr )
"Das saarl. VwVfG läßt eine Interpretation deutscher Gesetze nur dann
zu, wenn sie nicht eindeutig sind." Manfred Saar, Präsident
Apothekerkammer d. Saarlandes. heute-journal v. 8. August 2006.

Re: Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 18:28:04 von Tobias Wendorff

Claus Reibenstein wrote:
> Tobias Wendorff schrieb:
>
>> Mein Outlook Express kann leider keine News-IDs lesen :-(
>
> http://oe-faq.de/?56FAQ:3.26

Cool, habe ich wohl immer überlesen. Danke!

Re: Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 18:30:17 von Norbert Melzer

Am Sun, 3 Dec 2006 16:46:13 +0100 schrieb Tobias Wendorff:

> Norbert Melzer wrote:
>> Warum ich das denke steht bereits in
>> <031206.151402.dclpm.39.6.dlg@news.nobbz.de>
>
> Mein Outlook Express kann leider keine News-IDs lesen :-(

OK, dann für Dich ein Hinweis auf goggle-Groups [1], da kann man auf
eine MID suchen.

Als Ergebniss erhält man dann diese URL:


MfG
Norbert

Fußnoten:
[1] http://groups.google.de/advanced_search
--
Link zur PHP-FAQ http://www.php-faq.de

Re: Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 18:32:34 von Norbert Melzer

Am Sun, 3 Dec 2006 16:04:03 +0100 schrieb Tobias Wendorff:

> Norbert Melzer wrote:
>> Am Sun, 3 Dec 2006 15:46:18 +0100 schrieb Tobias Wendorff:
>>
>>> Norbert Melzer wrote:
>>>> Wie wäre es mit ZlFDY? Es ist kostenlos, gut dokumentiert und hat
>>>> neben an eine eigene Gruppe...
>>>
>>> was ist denn "ZlFDY"?
>>
>> Hint: ROT-13
>
> *G* Du hast mein Posting nicht verstanden :-)
>
> Ich meinte, MySQL wäre die Königslösung, aber ich wäre mit einer
> Bauernlösung (= nicht MySQL) auch zufrieden :-)

Nur warum lange nach eine Bauernlösung suchen, wenn man die Königslösung
doch schon in der gleichen Zeit 10 mal hätte installieren können? Warum
den Bauern suchen wenn doch der König wesentlich mehr kann?

Ich kenne Dein Projekt nicht, aber ich lehne mich jetzt einfach mal ein
Stück aus dem Fenster und behaupte, daß Du irgendwann weitere Vorzüge
von MySQL brauchen wirst.

MfG
Norbert
--
Link zur PHP-FAQ http://www.php-faq.de

Re: Array oder "Stream" ... und ein nerviger Bug

am 03.12.2006 20:00:18 von Tobias Wendorff

Norbert Melzer wrote:
> Ich kenne Dein Projekt nicht, aber ich lehne mich jetzt einfach mal
> ein Stück aus dem Fenster und behaupte, daß Du irgendwann weitere
> Vorzüge von MySQL brauchen wirst.

Es dient nur lokal dazu, die große Datenbank in kleine Abstände
zu zerhacken.

Ich habe es jetzt fehlerfrei ohne MySQL fertig und werde mich in
den kommenden Tagen an die Umwandlung machen.

Aber per SQL dürfte das in der Tat alles viel reibungsloser gehen.
Haupthemmpunkt: Ich kenne mein MySQL-Passwort nicht mehr :-)

Re: Array oder "Stream" ... und ein nerviger Bug

am 04.12.2006 10:23:14 von Ulf Kadner

Tobias Wendorff schrieb:

> Es dient nur lokal dazu, die große Datenbank in kleine Abstände
> zu zerhacken.

Interessante Aussage! Konntest Du mal erklären wie man eine DB zerhackt?
(und das auch noch in Abstände)

Hut ab mann! :-)

MfG, Ulf

Re: Array oder "Stream" ... und ein nerviger Bug

am 04.12.2006 11:53:38 von Tobias Wendorff

Ulf Kadner wrote:
> Interessante Aussage! Konntest Du mal erklären wie man eine DB
> zerhackt? (und das auch noch in Abstände)
>
> Hut ab mann! :-)

Datensatz:
10.11.2006;Blah;Blah2
11.11.2006;Blah;Blah2
12.11.2006;Blah;Blah2
13.11.2006;Blah;Blah2
14.11.2006;Blah;Blah2
15.11.2006;Blah;Blah2
16.11.2006;Blah;Blah2
17.11.2006;Blah;Blah2

Unterteilter (="zerhackter") Datensatz:

Teil 1
10.11.2006;Blah;Blah2
11.11.2006;Blah;Blah2

Teil 2
12.11.2006;Blah;Blah2
13.11.2006;Blah;Blah2

Teil 3
14.11.2006;Blah;Blah2
15.11.2006;Blah;Blah2

Teil 4
16.11.2006;Blah;Blah2
17.11.2006;Blah;Blah2

Und den Abstand kannste Dir jetzt mit einem Lineal am Monitor
ausmessen - SCNR