![]() |
Zeit aus csv-Datei
Hallo,
ich habe hier eine csv Datei mit 4 Spalten mit Zeitangaben im Format mm:ss Code:
T1;T2;T3;Tges Jegliche Anleitung die ich bisher im Netz gefunden habe verwirrt mich mehr. Vor allem diese Umrechnung von den Zeitangaben :dozey: Hat jemand einen Anhaltspunkt wie ich das am besten mache ? |
Mag sein das es für Dich nicht anspruchsvoll ist :) Für mich schon :(
Bei mir fängst schon damit an wie ich jede Spalte(also T1;T2;T3;Tges) für sich da mit php extrahieren soll. Dann noch das Problem das man die Zeitangaben scheinbar erst von mm:ss in ss umrechnen muss damit was gescheites am Ende raus kommt. Glaub mir, ich hab schon viele Seiten inkl das php-manual im Netz aufgesucht, aber irgendwie passen die Lösungen nie genau zu meiner Aufgabe. :( |
:(
Hatte wohl vergessen zu schreiben das dies meine ersten Schritte in PHP sind. Somit ist es für mich vergleichsweise so als würde ich japanisch lernen. . |
Also bin schon etwas weiter, aber noch nicht da wo ich hin will:
Mit folgenden Code kann ich die erste Spalte "T1" auslesen und den Durchschnitt berechnen. Leider werden nur die ersten beiden Ziffern (also die Minuten) berücksichtigt, die Sekunden werden ignoriert. Wie, wo passe ich das jetzt an das die Komplette Zeit Minuten und Sekunden (mm:ss) mit in die Berechnung mit einbezogen werden ? PHP-Code:
|
Also: Mit explode teilst Du Deine Zeile auf. $spalten ist ein Array. Den ersten Wert hast Du ja schon mit $spalten[0] angesprochen. die anderen 3 Werte kriegst Du genauso mit $spalten[1], ..., $spalten[3]
In $spalten[0] steht immer noch eine Zeitangabe. Damit kann php nicht rechnen. Du hast jetzt zwei Möglichkeiten: Entweder Du schaust Dir die DateTime-Klassen von php an. Die können mit Datum- und Zeitangaben rechnen. Das ist aber für die Aufgabe ein bisschen Overkill. Oder Du schreibst Dir die Addition selbst. Dazu explodest du jede Zeitangabe am ":". Dann kriegst Du wieder ein Array mit den Minuten und Sekunden einzeln. Mit den einzelnen Werten kannst Du dann einzeln vernünftig rechnen. |
Mh,
also nach dem Explode für ";" soll noch eine Explode für ":" ?? Ich hab gar kein Plan wo ich dies einbauen soll... Google hilft mir da selbt nach Stunden nicht weiter. Vermutlich hat sowas noch nie einer benötigt :-) |
So,
jetzt hab ich schon mal rausgefunden wie ich Zeiten im Format mm:ss aufspalten und zu Sekunden zusammenrechnen kann. Im folgendem Beispiel zerlege ich die 12Minuten und 45Sekunden: PHP-Code:
Im Beispiel wird ja bei "$time" nur die eine extra platzierte Zeitangabe 12:45 zerlegt. Wie bau ich dieses S***** jetzt in das andere ein, so das er die Zeiten spaltenweise zerlegt, zusammenrechnet und dann den Durchschnitt ausspuckt. . |
Für den Anfang musst Du doch nur die Zeile
PHP-Code:
Als nächstes schaust Du Dir for-Schleifen an und erweiterst damit Dein Skript auch auf die Spalten T2, T3 und Tges (Hinweis: Du kannst Array-Elemente auch mit Variablen ansprechen: PHP-Code:
|
So,
keine Ahnung was ich hier falsch mache, aber ich bekomme immer durch das zweite explode den Fehler: Warning: explode() expects parameter 2 to be string, array given in /www/htdocs/blabla/bla/bla.php on line 10 Verstehe nur Bahnhof. So siehts derzeit aus: PHP-Code:
|
Hm ein ganz interessantes Beispiel finde ich :) Also habe ich mich mal rangesetzt, weil es mich selber auch interessiert, hat wie das am Besten geht:
PHP-Code:
Code:
Array |
Hui,
das klappt schonmal. Jetzt habe ich bei den aktuellen Live-Daten der csv aber festgestellt das dort auch Zeilen ohne Inhalt geführt werden. Code:
;;; Kann man das irgendwie berücksichtigen ?? Sowas wie "wenn Zeilenwert = 0, dann gehe weiter ohne Zeile zu zählen" . |
Dafür würde ich folgendes machen:
1: Die Spalten einer Zeile werden nur durchlaufen wenn mindestens der erste Wert ungleich 0 ist: PHP-Code:
Bei der Bildung des Durchschnitts kann jetzt nicht mehr einfach $lines - 1 als Anzahl genommen werden, stattdessen wird nun der vorher ermittelte Wert $count genommen: PHP-Code:
|
@ smdata2
Das sieht sehr gut aus. Aber leider hatte ich bei der csv nicht alle Inhalte mit angegeben (Asche auf mein Haupt :( ) . Vor und nach den Zeiten (T1, T2, T3, Tges) sind noch diverse andere Spalten die immer mit Daten gefüllt sind. Und diese verhindern jetzt vermutlich die neue Berechnung. Besteht die Möglichkeit die Durchschnittsberechnung nur auf genau diese 4 Spalten (T1, T2, T3, Tges) zu fokussieren ? |
Ja. Die innere for-Schleife bei smdata2s Lösung regelt, welche Spalten berücksichtigt werden.
PHP-Code:
|
Igendwie rechnet das nicht wirklich korrekt. :(
Hier mal eine Test csv mit allen Spalten: Code:
pack;set;runs;T1;T2;T3;Tges;Datum;Zeit;out;other;zero;percent Array ( [0] => 00:00 [1] => 00:00 [2] => 00:00 [3] => 03:01 ) Hier das komplette S*****: PHP-Code:
. |
Ne, aber ich, sorry. Im Duchschnittbildenteil muss natürlich auch startspalte und endespalte verwendet werden:
PHP-Code:
|
Danke bis hier hin :T
Irgendwie passt das was dabei raus kommt aber nicht wirklich: Array ( [0] => 03:01 [1] => 01:41 [2] => 00:26 [3] => 05:09 ) Ich habe mal die Spalte 0 (T1) mit den genannten Werten manuell ausgerechnet und komme dabei auf insgesamt 3624 Sekunden. Diese teile ich nun durch 11 (die Zeilen mit Inhalt in den Feldern T1 bis Tges) und erhalte als Durchschnitt 329,454545 Sekunden was im Format mm:ss wiederum gerundet 05:29 ergibt. Ich vermute mal das das S***** wieder die Sekunden durch alle Zeilen (in dem Fall 20) teilt. :( . |
Ja der Code zur Ermittlung der Zeilen arbeitet nur auf Grundlage der ersten Spalte, d.h. wenn in der ersten Spalte nur 5 Werte stehen und in anderen Spalten aber 10 oder 15 Werte führt ist die Durchschnittsberechnung falsch :/
Ich gucke mir das heute Abend mal an, ist das letzte Beispiel an Daten jetzt eine vollständige Datei bezüglich der Spaltenstruktur? Sonst macht es wenig Sinn das Skript wieder an das "neue" Format anzupassen :D |
Ja, die Spalten im letzten Beispiel passen.....live ist das Teil aber länger ;)
Danke :T |
Okay das ist nicht das Problem :) Aber eine Frage hab ich noch: Soll jetzt von allen Spalten der Durchschnittswert berechnet werden oder nur von den Spalten T1 bis Tges?
|
Hi,
es betrifft nur die Spalten T1 bis Tges ;) |
Soo meiner Meinung nach funktioniert es, es kommen jedenfalls die gleichen Werte wie mit der MITTELWERT()-Funktion von Excel raus :)
Sag einfach Bescheid! ;) Edit: Die Änderungen sind eigentlich, dass nun nicht das erste Feld der Spalte, sondern das Feld mit dem Index $startspalte geprüft wird, sowie die Anweisung array_values nach der Summation, um unabhängig von den Spaltenindizes die Summen einfacher durchlaufen zu können. PHP-Code:
|
Habs ein bisschen umgebaut:
PHP-Code:
|
Jo so kann man es auch machen beide Ansätze sollten passen, wobei deiner für den Fall unregelmäßiger Zeilen besser geeignet sein sollte aber sonst gibts das gleiche Ergebnis :)
|
An dieser Stelle mal ein herzliches Danke an alle Beteiligten !!! :T:T:T . |
Hallo,
steh mal wieder aufm Schlauch :confused: Wie bekomme ich aus einer csv-Datei ganz simpel eine vorhandene Zeitangabe mm:ss (Minuten:Sekunden) zusätzlich in Sekunden umgerechnet ? Aktuell sieht das so bei mir aus: Code:
<?php Und dort sieht es halt immer so aus...z.B : 06:15 --> also 6Minuten und 15Sekunden. Jetzt wäre es toll den Wert zusätzlich noch in Sekunden anzeigen zu lassen....also im Beispiel dann 375 Ist bestimmt simpel......habs mit folgenden Code erfolglos versucht: Code:
list($mins,$secs) = explode(':',$spalten[9]); |
Also die Minuten aus den verschiedenen Zeilen der vorgegebenen Spalte bekomme ich ja wie folgt:
Code:
<?php print_r($tt[10]); ?> Für die Sekunden habe ich nun folgendes "gebastelt" und in den vorhandenen Code eingebaut: Code:
$time01=explode(':', $tt[10]); Angezeigt wird das dann so: Code:
<?php print_r($sec01); ?> |
Schleife?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:54 Uhr. |
Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.