fopen, fread..... aber wie?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
JumpinJack
Mitglied
Beiträge: 953
Registriert: 27.05.2002 10:37
Wohnort: Ariendorf
Kontaktdaten:

fopen, fread..... aber wie?

Beitrag von JumpinJack »

Hallo Leute.

Also ich möchte eine Datei in php einlesen. Nun mache ich das mit fopen und will das mit fread machen. Aber leider ließt er die ganze datei ein. Ich wollte das aber gerne Zeilenweise machen.
Da eine Zeile in der Datei ein abgeschlossener Datensatz sein soll und ich in einer Zeile mehrere Daten habe (getrennt mit trennzeichen) würde ich gerne die erste Zeile auslesen, die dann auswerten um dann die nächste Zeile einzulesen und auszuwerten...usw. Meine Datei sieht so aus:

Code: Alles auswählen

! Terminart  ;  Anfangsdatum ; EndDatum ; Ort ; Person ;

Besprechung;12.01.1999;13.01.1999;Raum 99;Herr Beispiel;
Feier;12.01.2000;12.01.2000;Teneriffa;Mit Frau;
Urlaub;14.10.2004:28.10.2004;Genau;Sowieso;
... etc
Ich würde halt gerne erste Zeile einlesen, abchecken ob das heutige Datum zwischen Start und EndDatum liegt, wenn ja gib diese aus und gehe in die nächste Zeile um diese abzuchecken.

Da möchte ich direkt noch eine weitere Frage anhängen: Wie kann ich mit demm Datum rechnen, also abchecken ob das zwischen den beiden in der Zeile befindlichen Daten steckt? Versteht ihr mein Problem?! Sorry ich kann das schlecht erklären.

Ich hoffe dennoch ihr könnt mir helfen.
Liebe Grüße
JumpinJack
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

Möchte nicht unhöflich erscheinen aber wenn ich z.B. mich informiere gehe ich in die PHP Doku und schau mich um.........
und dann sieht man z.B. das hier
-> http://de.php.net/manual/de/function.fgets.php

Bei Zeitdaten rechnet man mit dem Unixtimestamp......
Schau dich bitte um in den entsprechenden Rubriken.....

Poste deine Probleme und Fragen dazu nach einem Selbstversuch....

Es bringt dir mehr wenn du selbstständig nach Informationen suchst, diese zu verarbeiten versuchst und dann deine Probleme darlegst....

Denn dann macht es *Klack* und es setzt der *aha* Effekt ein.....

*lieb gemeinter Rat* :wink:
Benutzeravatar
JumpinJack
Mitglied
Beiträge: 953
Registriert: 27.05.2002 10:37
Wohnort: Ariendorf
Kontaktdaten:

Beitrag von JumpinJack »

hrhr.... Also ich verstehe deine Ausführungen und bin ein klarer Verfechter deiner Lernidee. So habe ich mir Teilweise php bzw VB angelernt.

Das Prob liegt dann nur im Detail. Wie heißt die Funktion die das macht was ich suche. Also fread machts nicht. Wie komm ich auf fget wenn ich nicht weiß wie Sie heißt. Also frage ich. fget reicht mir quasie schon. ;)

Also hast du mir prima geholfen. Ich danke dir. Ich nehms dir auch nicht krum, nur solltest du auch meine Sichtweise verstehen. ;)

Mill Gracie
Liebe Grüße
JumpinJack
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

Was soll ich sagen ich klicke auf Filesystem im Manual lese mir die Funktionen durch und fertig :D
Benutzeravatar
JumpinJack
Mitglied
Beiträge: 953
Registriert: 27.05.2002 10:37
Wohnort: Ariendorf
Kontaktdaten:

Beitrag von JumpinJack »

Ok..du hast mich überzeugt. Hab das Manual immer ein wenig falsch benutzt. Danke für den Tipp. Jetzt wirds mir etwas klarer und ich kann mich durchkämpfen.

Aber nichts desto trotz. Hier nun mein Problem. Ich lese ein Datum aus einer Datei aus. Schreibe diese aufgeschlüsselt in Day Month und Year in Variablen, wandle die in integer und mach mit mktime ein timestamp draus. Das mache ich mit 2 Datums und dann wollte ich die 2 Daten mit dem von heute vergleichen. Aber die timestamps sind noch nicht mal annähernd gleich.

Code: Alles auswählen

$handle = fopen ("./Kalender_DB.cfg", "r");
$buffer = fgets($handle, 4096);

$tok = strtok ($buffer,";");
$Datum_Start = $tok;
$tok = strtok (";");
...

$date1 = strtok ($Datum_Start,".");
$dd1 = $date1;
$date1 = strtok (".");
$mm1 = $date1;
$date1 = strtok (".");
$yyyy1 = $date1;
	   
$dd1 = intval($dd1);
$mm1 = intval($mm1);
$yyyy1 = intval($yyyy1);

$date1_complete = mktime(0, 0, 0, $dd1, $mm1, $yyyy1);

$date2 = strtok ($Datum_Ende,".");
$dd2 = $date2;
$date2 = strtok (".");
$mm2 = $date2;
$date2 = strtok (".");
$yyyy2 = $date2;

$dd2 = intval($dd2);
$mm2 = intval($mm2);
$yyyy2 = intval($yyyy2);
	   
$date2_complete = mktime(0, 0, 0, $dd2, $mm2, $yyyy2);
echo time() . " - " . $date1_complete . " - " . $date2_complete;
Nun bekomme ich völlig entfernte timestamps raus:
1100122515 - 944002800 - 946681200
Auch wenn das Datum von heute genau zwischen $date1_complete und $date2_complete liegt. Warum sind die Timestamps so unterschiedlich? Wo ist der fehler?
Liebe Grüße
JumpinJack
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

Bei diesem Variablen Overkill hier hab ich ehrlich gesagt keine Lust das näher durchzugehen.....

Jedenfalls liefert mktime bereits einen Integer....
Was du mit time(); - mktime(); versuchst du machen muss ich mich auch fragen.....
Wenn du die Differenz von der aktuellen Zeit - der eines Datums machen willst musst du die du time(); in Sekunden formatieren und davon mktime Datum abziehen und durch (60*60*24) z.B. teilen damit du die Tagesdifferenz bekommst.....

Deine jetzige Differenz macht keinen Sinn wenn ich 900000 -9000000 -9000000 mache bekomme ich halt eine Minuszahl mit der man nichts anfangen kann....
Da man immer das Datum in Relation zu dem ca. 1.1.1970 bekommt.....

Um z.B. das Datum in 5 Tagen rauszubekommen muss man z.B. lediglich mktime Tagwert +5 rechnen und den Timestamp wieder in Date() einbinden.......

Auch strtotime kann dir helfen....

Wie gesagt ich bin nicht in der Lage zu wissen was du bezweckst :D

Ehm dir ist klar das du File nicht ganz durchgehst oder?
Benutzeravatar
MrMind
Mitglied
Beiträge: 464
Registriert: 29.11.2003 17:14
Wohnort: Darmstadt/Odw
Kontaktdaten:

Beitrag von MrMind »

@Blutgerinsel
Was er damit machen will ist ja seine sache ;)

@JumpinJack

Kein Wunder warum die falsch sind.

Hier liegt der Fehler:

Code: Alles auswählen

$date1_complete = mktime(0, 0, 0, $dd1, $mm1, $yyyy1); 
Bei jedem Aufruf von mktime haste den selben Fehler (Wiederholungsfehler)

Hier der Prototyp von mktime(SEKUNDEN,MINUTEN,STUNDEN,MONAT,TAG,JAHR)

Mfg
MrMind
Selbst ist der Coder
Coder unter Linux
Benutzeravatar
JumpinJack
Mitglied
Beiträge: 953
Registriert: 27.05.2002 10:37
Wohnort: Ariendorf
Kontaktdaten:

Beitrag von JumpinJack »

Ach ja. Wie blöde. Naja danke für die Info. Blöder Fehler große Wirkung. Vielen vielen dank.
Liebe Grüße
JumpinJack
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

JumpinJack hat geschrieben:Ach ja. Wie blöde. Naja danke für die Info. Blöder Fehler große Wirkung. Vielen vielen dank.
Einfach nichts annehmen und stur abhaken so mach ich das immer :wink:

Mich interessiert aber immer noch dein Ziel....
Benutzeravatar
JumpinJack
Mitglied
Beiträge: 953
Registriert: 27.05.2002 10:37
Wohnort: Ariendorf
Kontaktdaten:

Beitrag von JumpinJack »

Ok ok. Ich geh schon das ganze File durch. Ist ne while Schleife, aber der Code wollte ich nicht auch noch posten.
Ich habe halt ein File wo Startdatum und Enddatum drin steht. Damit muss ich rechnen. Daher erzeuge ich Variablen um diese dann in mktime zu setzen um ein timestamp zu erhalten. ...naja siehst du ja. Also ich v ergleiche schon richtig. Das echo war nur ein Beispiel um den Timestamp zu kontrolieren.

Das ganze beruht auf einen Baustellenkalender der in Excel besteht. Den gebe ich als cvs aus. Trennzeichen sind ";". Naja und das File will ich halt auswerten welche Baustellen heute aktuell sind. Verstehst du? Kann man das besser machen?

Was hast du für ein Problem mit de vielen Variablen? Sollte ich besser mit Arrys arbeiten? Ich wäre dankbar wenn du nicht kritisieren würdest sondern auch Tipps zur verbesserung geben würdest.
Liebe Grüße
JumpinJack
Antworten

Zurück zu „Coding & Technik“