Antworten auf deine Fragen:
Neues Thema erstellen

PHP Textdatei teilen

rexho

Noch nicht viel geschrieben

Hallo Zusammen,

ich habe eine Textdatei, die automatisch erzeugt wird, mit folgendem Inhalt:

[Datum Uhrzeit] | [Maschinengeschwindigkeit]
2015-02-19 14:00:26|35000
2015-02-19 14:01:29|35000
2015-02-19 14:02:32|0
2015-02-19 14:03:35|0
2015-02-19 14:04:38|0
2015-02-19 14:05:42|30000
2015-02-19 14:06:45|30000
2015-02-19 14:07:48|30000
2015-02-19 14:08:51|0
2015-02-19 14:09:54|0
2015-02-19 14:10:57|0
2015-02-19 14:12:01|0
2015-02-19 14:13:04|16000
2015-02-19 14:14:07|16000
.....

Ich möchte nur die Stillstandszeiten ausfiltern und zwar in dieser Form:
1. Stillstand: 2015-02-19 14:02:32 bis 2015-02-19 14:04:38
2. Stillstand: 2015-02-19 14:08:51 bis 2015-02-19 14:12:01
3. Stillstand: .....
...

Wie kann ich das machen?
Vielen Dank im Voraus!
 

Duddle

Posting-Frequenz: 14µHz

Du liest jede Zeile ein und prüfst ob sie auf "|0" endet.
Wenn ja, ist das ein Stillstands-Anfang. Wenn nein und du kennst einen Stillstands-Anfang ist die vorige Zeit ein Stillstands-Ende. Wenn ja und es ist die letzte Zeile und du kennst einen Stillstands-Anfang ist die jetzige Zeit ein Stillstands-Ende.

Für das Auslesen von Dateien gibt es genügend Beispiele und Tutorials, das sollte kein Problem sein. Der Rest ist einfache Fallunterscheidung.


Duddle
 

msa1989

Bin da

Hi rexho,

wenn du kurz googelst, wie man eine Textdatei mit PHP einliest, dann müsstest du diese Seite finden: http://www.php-einfach.de/php-tutorial/php-dateien2.php
Dort wird beispielhaft gezeigt wie man eine Textdatei zeilenweise einliest und den Text per echo ausgibt.
Jetzt musst du den Text halt nicht ausgeben sondern überprüfen.

In deinem Fall würde ich den Text in einem Array speichern um ihn dann weiter verarbeiten zu können. Wenn du die Daten in einem Array hast (in deinem Fall 2-dimensional; den Text mit der explode Funktion splitten) kannst du so vorgehen, dass du das Array durchläufst und schaust wo die Geschwindigkeit 0 ist. Wenn 0, dann wird die Zeit (bzw. Array-ID) zwischengespeichert. Anschließend gehst du das Array weiter solange bis keine 0 mehr in der Geschwindigkeit steht. In diesem Fall nimmst du den Zeitwert (bzw. die ID) von einem Element vorher. Anschließend kannst du die Differenz dieser Zeiten berechnen bzw. ausgeben etc. In jedem Fall hast du die ID der Array-Elemente zwischen denen die Maschine steht und kannst damit anfangen was immer du willst.
 

rexho

Noch nicht viel geschrieben

Hi,
vielen Dank für eure Antworten.
also bis hier komme ich klar dann nicht mehr!

$datei = file("file.txt");
foreach($datei AS $ausgabe){
$zerlegen = explode("|", $ausgabe);
if($zerlegen[1] == 0)
{

????????????

}

else{ ??????? }

}

Wie mach ich das mit den mehrdimensionalen Arrays? Ich verstehe die nicht ganz!
 
Zuletzt bearbeitet:

msa1989

Bin da

Ich muss grad für die Uni Lasertechnik lernen und hab mein Kopf bisschen woanders.
Gibt bestimmt noch eine elegantere Lösung, aber diese hier Funktioniert:

PHP:
<?php
$i = 0;
$inhalt = array();
$zeilen = file("inhalt.txt");
$nullgefunden = false;
$erste_null = false;

foreach($zeilen AS $z) {
    $tmp = explode('|',$z);
    $inhalt[$i]['time'] = $tmp[0];
    $inhalt[$i]['speed'] = $tmp[1];
    $i++;
}

for ($i=0; $i<count($inhalt); $i++) {
    if($inhalt[$i]['speed'] == 0) {
        $nullgefunden = true;
    }
    if ($nullgefunden === true) {
        if($erste_null === false) {
            echo "Stillstand ab hier: ";
            echo $inhalt[$i]['time'].'<br>';
            $erste_null = true;
        }
    }
    else {
        if ($erste_null === true) {
            echo "Stillstand bis hier: ";
            echo $inhalt[($i - 1)]['time'].'<br><br>';
            $erste_null = false;
        }
    }
    $nullgefunden = false;
}
?>

Hab mir jetzt auf die schnelle die Kommentare im Quellcode gespart, aber wenn du Erklärungen brauchst, dann sag einfach nochmal bescheid
 

Duddle

Posting-Frequenz: 14µHz

So ähnlich sieht mein Test auch aus
PHP:
<?php
$fname = "eingabe.txt";
$f = file($fname);

$stillstaende = Array();
$sep = "|";
$von = null;
$previous = null;

foreach($f as $key => $value) {
    $zeit = explode($sep,$value)[0];
    $geschwindigkeit = explode($sep,$value)[1];

    $istStill = $geschwindigkeit == 0;
    $letzteZeile = count($f) == (1+$key);

    if(!$istStill && $von) {
    $bis = $previous;
    $stillstaende[] = "von $von bis $bis";
    $von = $bis = null;
    }
    if($istStill) {
    if(!$von) {
        $von = $zeit;
    }
    if($letzteZeile) {
        $bis = $zeit;
        $stillstaende[] = "von $von bis $bis";
    }
    }
    $previous = $zeit;
}
echo "<pre>";
print_r($stillstaende);
echo "</pre>";
?>
Das ist mehr oder weniger die Übersetzung von meinem Pseudo-Code weiter oben.

Duddle
 

msa1989

Bin da

Ich denke der Code von Duddle dürfte weniger Speicher fressen.
Je nachdem wie lang die Textdatei wird kann das schon entscheidend sein.
solltest du mal überprüfen mit einer etwas größeren Datei.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.065
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben