thealex
Goto Top

Dateiinhalt einer log-file sortiert darstellen

Hallo liebe community,

ich bin gerade etwas ratlos, ich versuche eine log-file formatiert auszugeben.
Das auslesen an sich ist kein problem, aber jetzt kommt die Formatierung,

Ich hätte gerne eine Tabelle mit 4 Spalten und 6 zeilen. Jede Spalte ist für eine Stunde des tages.

Hier mal der Code den ich bisher habe:

<form method="post">  
Tag: 
<select name="day">  
    <option value="01">1</option>  
    <option value="02">2</option>  
    <option value="03">3</option>  
    <option value="04">4</option>  
    <option value="05">5</option>  
    <option value="06">6</option>  
    <option value="07">7</option>  
    <option value="08">8</option>  
    <option value="09">9</option>  
    <option value="10">10</option>  
    <option value="11">11</option>  
    <option value="12">12</option>  
    <option value="13">13</option>  
    <option value="14">14</option>  
    <option value="15">15</option>  
    <option value="16">16</option>  
    <option value="17">17</option>  
    <option value="18">18</option>  
    <option value="19">19</option>  
    <option value="20">20</option>  
    <option value="21">21</option>  
    <option value="22">22</option>  
    <option value="23">23</option>  
    <option value="24">24</option>  
    <option value="25">25</option>  
    <option value="26">26</option>  
    <option value="27">27</option>  
    <option value="28">28</option>  
    <option value="29">29</option>  
    <option value="30">30</option>  
    <option value="31">31</option>  
</select>
Monat: 
<select name="month">  
    <option value="01">1</option>  
    <option value="02">2</option>  
    <option value="03">3</option>  
    <option value="04">4</option>  
    <option value="05">5</option>  
    <option value="06">6</option>  
    <option value="07">7</option>  
    <option value="08">8</option>  
    <option value="09">9</option>  
    <option value="10">10</option>  
    <option value="11">11</option>  
    <option value="12">12</option>  
</select>
Jahr: 
<select name="year">  
    <option value="2018">2018</option>  
    <option value="2019">2019</option>  
</select>
<br>
<input type="submit" name="absenden" value="Log Laden">  
</form>
<?php
if (empty($_POST)){
	$day = date('d');  
	$month = date('m');  
	$year = date('Y');  
}
if (!empty($_POST)){
	$day = $_POST['day'];  
	$month = $_POST['month'];  
	$year = $_POST['year'];  
}

echo "Logfile vom: ".$day.".".$month.".".$year;  

//echo nl2br($logfile);



$result = array();
$file = explode("\n\r", file_get_contents('includes/botlog/'.$year.'_'.$month.'_'.$day.'_bot.log'));  
foreach ( $file as $content ) {
    $result = array_filter(array_map("trim", explode("\n", $content)));  
}
echo "<pre>";  
print_r ($result);
echo "</pre>";  
Ausgabe:
Array
(
     => Array
        (
             => [00:00:09] Query Started
            [1] => [00:00:09] Query Ready. Found: 50
            [2] => [00:00:09] Success Chance: Build
            [3] => [00:00:09] Buildtype: Special
            [4] => [00:00:09] Lab Level: 0
            [5] => [00:00:09] Roboter Level: 0
            [6] => [00:00:09] Shipyard Level: 0

Content-Key: 374664

Url: https://administrator.de/contentid/374664

Ausgedruckt am: 28.03.2024 um 15:03 Uhr

Mitglied: Pedant
Pedant 22.05.2018 um 16:03:40 Uhr
Goto Top
Hallo TheAlex,

Gib doch mal konkrete Beispiele für wo Du her kommst und wo Du hin willst, dann kann Dir vielleicht auch jemand sagen wie Du dahin kommst.

Wie sieht die Quelldatei aus?
Wie soll die Zieltabelle aussehen?

Ohne die Infos ist der Code, der nicht macht was er soll, sinnentleert für alle ohne Glaskugel.

Gruß Frank
Mitglied: TheAlex
TheAlex 22.05.2018 um 16:31:56 Uhr
Goto Top
Also die Logfile lese ich in ein und speichere sie in einem Array.

Die ausgabe des arrays ist folgende:
 => [00:00:09] Query Started
            [1] => [00:00:09] Query Ready. Found: 50
            [2] => [00:00:09] Success Chance: Build
            [3] => [00:00:09] Buildtype: Special
            [4] => [00:00:09] Lab Level: 0
            [5] => [00:00:09] Roboter Level: 0
            [6] => [00:00:09] Shipyard Level: 0

Jetzt möchte ich alle im array enthaltenen key nach uhrzeit filtern lassen und in einer tabelle mit 4spalten und 6 zeilen ausgeben lassen. Jede spalte steht dabei für eine stunde des tages!

Nur wie kann ich alle key geneu so auslesen das ich sie anschlißend in der tabelle ausgeben kann?
Mitglied: Pedant
Pedant 22.05.2018 um 17:02:33 Uhr
Goto Top
Hallo The Alex,

wenn Du verheimlichen möchtest wie die Tabelle aussehen soll, dann ist das Deine Sache, aber was soll dann Deine Frage?

Zitat von @TheAlex:
Jetzt möchte ich alle im array enthaltenen key nach uhrzeit filtern lassen
Welche Uhrzeit?
Ist "00:00:09" die gemeinte Uhrzeit?
-[6] haben alle dieselbe, wozu also filtern?

Zitat von @TheAlex:
Jede Spalte steht dabei für eine Stunde des Tages!
Ein Tag hat üblicherweise 24 Stunden, Deiner nur vier?
Welche Vier sind es denn bei Dir?

Zitat von @TheAlex:
...und in einer Tabelle mit 4 Spalten und 6 Zeilen ausgeben lassen. Jede Spalte steht dabei für eine Stunde des Tages!

4 Stunden, 4 Spalten, 6 Zeilen!
Soll's so aussehen:
12-13 Uhr      | 15-16 Uhr  | 3-4 Uhr | 17:15-18:15 Uhr
---------------+------------+---------+----------------
Query Ready.   | Found: 50  |         | 
---------------+------------+---------+----------------
Success Chance | Build      |         | 
---------------+------------+---------+----------------
Buildtype:     | Special    |         | 
---------------+------------+---------+----------------
Lab Level:     | 0          |         |
---------------+------------+---------+----------------
Roboter Level  | 0          |         |
---------------+------------+---------+----------------
Shipyard Level:| 0          |         |

Mitdenken kann man gerne machen, aber blind raten müssen ist unerfreulich.

Gruß Frank
Mitglied: TheAlex
TheAlex 22.05.2018 aktualisiert um 22:47:51 Uhr
Goto Top
Ja die zeit wird in den [ ] angegeben.
Fakt ist das die Logfile alle 5 minuten erweitert wird. Ich würde gerne wissen wie ich anhand meines arrays folgende formatierung erreichen kann:

0 Uhr----------------------------------------------| 1 Uhr ------------------------------| 2 Uhr------------------------------| 3 Uhr------------------------------|
alle einträge die zu 0 Uhr gehören | usw
alle einträge die zu 0 Uhr gehören | usw
alle einträge die zu 0 Uhr gehören | usw
alle einträge die zu 0 Uhr gehören | usw


4 Uhr----------------------------------------------| 5 Uhr ------------------------------| 6 Uhr------------------------------| 7 Uhr------------------------------|

und fortlaufend bis 23 uhr^^
Das komplette array beseht aus mehr als 61000 Einträgen
Mitglied: Pedant
Pedant 23.05.2018 um 10:26:09 Uhr
Goto Top
Hallo The Alex,

Zitat von Ulfikado:
Indem Du die Zeichenketten der Zeilen zerlegst und diese dann vergleichst und entsprechend ausgibst. Alles mit PHP-Grundkenntnissen machbar.

Zerlegen mit String-Funktionen (das PHP Manual ist Dein Freund), dann sortieren nach Zeit (falls nötig) und dann halt ausgeben.

Aber fixer geht es wie bereits in #4 gesagt mit einem Regex zum Zerlegen in die benötigten Teile, dann sortieren nach Zeit (falls nötig) und dann halt ausgeben.

Gemeinhin gilt es als extrem unhöflich identische Fragen parallel in mehreren Foren zu stellen und nicht einmal daraufhinzuweisen und zu verlinken.
Du verdoppelst dadurch den Aufwand der Helfenden (Summe der Mannstunden), um möglichst schnell eine Lösung Deines Problems zu erhalten.
Es stellt eine Geringschätzung der Zeit dar, die Deine Mitmenschen in den jeweiligen Foren investieren.

Sieht man sich Dein Profil an, kann man feststellen, dass Du praktisch keine Beiträge geschrieben hast, um anderen zu helfen, sondern primär Hilfe einforderst.

Dass man Dir dann auch noch alle Infos aus der Nase ziehen muss ist unbegreiflich.
Alles in allem solltest Du Dich schämen.


Wie Du das mit den 4 Stunden gemeint hast scheint jetzt klar zu sein.
Du willst aber nicht eine Tabelle mit 4 Stunden-Spalten haben, sondern 6 Tabellen mit jeweils 4 Stunden-Spalten.
Das ist eine erweiterte Aufgabe.

Was der Wunsch nach 6 Zeilen soll ist weiterhin unklar.
alle Einträge die zu 0 Uhr gehören
Du hast 61.000 Einträge und die Vermutung liegt nahe, dass es sich um die Einträge eines Tages handelt.
Im Durchschnitt wären das dann mehr als 2.500 Einträge pro Stunde.
Ich hätte gerne eine Tabelle mit 4 Spalten und 6 Zeilen.
Warum dann die Vorgabe lediglich genau 6 Zeilen in der Tabelle haben zu wollen?
Ich vermute jetzt, Du meintest nicht eine Tabelle mit 6 Zeilen, sondern die 6 stellt die Anzahl der Tabellen dar, die jeweils sehr viele Zeilen haben werden.
(6 Tabellen à 4 Stunden x 4 Stunden pro Tabelle = 24 Stunden)
Warum muss ich immer noch Vermutungen anstellen, statt schon im Ausgangspost eine klare Anfrage zu lesen?

Gruß Frank