text Parser Hilfe

hi leute ich möchte log datein in fariablen schreiben leider fehlt mir da noch ein script ich hoffe ihr könnt mir helfen das laden der datein klapt schon gut
mache ich mit :

$handle=GetValueString("LOGPASER");
$handle = fopen ("C:/Dokumente und Einstellungen/Ken/Desktop/USV LOG 3.txt", "r");
while (!feof($handle)) {
    $buffer = fgets($handle, 400);
    echo $buffer;
}
fclose ($handle);

auswerten der datei fällt mir noch etwas schwer
ich wollte das mit if machen nur fehlt mit noch einige befehle und hoffe ich verratet sie mit

ich such folgendes
suche wiederholungen und setze „zeiger“ auf anfang der letzen z.b.
hier ein eiszug aus dem log

Id     Date     Time     Event

100000 06/07/07 21:08:11 *** PowerChute PLUS Version 5.1 started ***
100200 06/07/07 21:08:19 Communication established
200403 06/07/07 21:08:46 UPS unable to perform runtime calibration: Capacity < 100 
100402 06/07/07 21:09:09 User-initiated UPS self-test passed
200403 06/07/07 21:10:23 UPS unable to perform runtime calibration: Capacity < 100 
200008 06/07/07 21:10:43 UPS on battery: Simulated power failure
100300 06/07/07 21:10:43 Normal power restored: UPS on line
200403 06/07/07 21:11:17 UPS unable to perform runtime calibration:  

das erste ist die fehler/meldungs ID dann datum dann uhrzeit
ich hätte gerne das er nur die id liest (ich habe ne überstzungsdatie mit den Deutschen erklärungen) und datum und uhrzeit und mit das dann ausgibt z.b. mit tts bei fehler

Hallo,

schau mal im WIIPS in die index.php rein, da ist einiges mit der Logdatei von IPS gemacht, sowohl Auswertung wie auch mengenmaessige Zeilenanzahl.

Gruss Torro

Hallo Professorakiera,

um den Inhalt einer Datei in eine String-Variable einzulesen genügt dieser PHP-Befehl:

$text = get_file_contents("C:/Dokumente und Einstellungen/Ken/Desktop/USV LOG 3.txt");

Nun kannst Du die Variable $text in ein Array von Zeilen aufspalten:

$zeilen = explode("
", $text);    // nach Zeilenumbruch trennen

Jedes Element der Array-Variablen $zeilen enthält nun eine Zeile des Textes.
Du kannst nun jede dieser Zeilen in weitere Bestandteile zerlegen. In diesem Falle ist das Leerzeichen das Trennzeichen:

foreach ($zeilen as $zeile)          // alle Elemente des Arrays durchlaufen
{
  $elemente = explode(" ", $zeile);  // Zeile nach Leerzeichen trennen
  $id    = $elemente[0];             // das 1. Element enthält die ID
  $datum = $elemente[1];             // das 2. Element enthält das Datum
  $zeit  = $elemente[2];             // das 3. Element enthält die Uhrzeit
}

Auf diese Weise erhältst Du Zugriff auf alle Felder einer Zeile.

Gruß
HJH

DANKE JUNGS ihr seit supper genau das was ich gesucht habe schaue mir nachher noch mal in ruhe wiips an.
Dann fehlt mit ja nur noch die erkennung des letzten eintrages habt ihr da auch ne idee

mir fallen 2 wege ein.

  1. auslesen des datums und berechnung welches das letzte ist

  2. nichts so schön wie ich finde
    auslesen der log und döschen der datei dadurch würde jeder neue eintrag immer an der selben stelle stehen.

also ich bin für eure tips offen .

MFG Ken

hi leute hatte heute mal wieder zeit weiter zu bastlen leider klapt der beitrag von HJH nicht wie er sollte ich bekomme folgende fehler meldung

 <br />
 <b>Fatal error</b>:  Call to undefined function get_file_contents() in <b>D:\Programme\IP-SYMCON\scripts\.currentscript</b> on line <b>10</b><br />

woran liegt das fehlt mir noch eine DLL ??
bitte um hilfe

Hallo Professorakiera,

ich bitte vielmals um Entschuldigung. :o

Es muss natürlich file_get_contents(…) heißen!

Gruß
HJH

Leider klapt es immer noch nicht so recht wo liegt den mein oder der Fehler

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : LogPaser.ips.php
Trigger  : 
Interval : 
*/
$text = get_file_contents("F:/Program Files/Pwrchute/pwrchute.txt");
$zeilen = explode("
", $text);    // nach Zeilenumbruch trennen
foreach ($zeilen as $zeile)          // alle Elemente des Arrays durchlaufen
{
  $elemente = explode(" ", $zeile);  // Zeile nach Leerzeichen trennen
  $id    = $elemente[0];             // das 1. Element enthält die ID
  $datum = $elemente[1];             // das 2. Element enthält das Datum
  $zeit  = $elemente[2];             // das 3. Element enthält die Uhrzeit
}

?>
<br />
<b>Fatal error</b>:  Call to undefined function get_file_contents() in <b>F:\IP-Symcon\scripts\.currentscript</b> on line <b>10</b><br />

Hallo Professorakiera,

wie HJH oben schon gesagt hat:

Ändere in Zeile 10 „get_file_contents“ in „file_get_contents“ und schon bist Du einen Schritt weiter.

Gruß

Ernst

$text = get_file_contents("F:/Program Files/Pwrchute/pwrchute.txt");

der Syntax ist falsch.

$text = file_get_contents("F:/Program Files/Pwrchute/pwrchute.txt");

So wie HJH es geschrieben hat :slight_smile:

Upps: Ernst war schneller:D

Ich lese die Datei „currdat.lst“ auf dem PC „Rainer-x2-pc“ so in das Array „$lines“ ein

$lines = file("//Rainer-x2-pc/HeavyWeather/currdat.lst");  

sorry hatte die falscher version kopiert mein fehler

habe die änderung gemacht nun bekomme ich den fehler

no such file or directory

ich fermute ich brauche für die Leerzeichen auch ein erstsatzzeichen wie bei dem \ das / leider ist mir das nicht bekannt

ich bin mir aber sicher das die log datei dort liegt …

und weiter unten

Undifined offset dort wo datum und zeit stehen soll

hier brauche ich warscheinlich noch ein anderes Format
ich freue mich schon auf eure tips

Warscheinlich bin ich nur blind abr bitte helft mir

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : LogPaser.ips.php
Trigger  : 
Interval : 
*/
$text = file_get_contents("F:/Program Files/Pwrchute/pwrchute.txt");
$zeilen = explode("
", $text);    // nach Zeilenumbruch trennen
foreach ($zeilen as $zeile)          // alle Elemente des Arrays durchlaufen
{
  $elemente = explode(" ", $zeile);  // Zeile nach Leerzeichen trennen
  $id    = $elemente[0];             // das 1. Element enthält die ID
  $datum = $elemente[1];             // das 2. Element enthält das Datum
  $zeit  = $elemente[2];             // das 3. Element enthält die Uhrzeit
}

?>[/b]
<br />
<b>Warning</b>:  file_get_contents(F:/Program Files/Pwrchute/pwrchute.txt) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: No such file or directory in <b>F:\IP-Symcon\scripts\.currentscript</b> on line <b>10</b><br />
<br />
<b>Notice</b>:  Undefined offset:  1 in <b>F:\IP-Symcon\scripts\.currentscript</b> on line <b>16</b><br />
<br />
<b>Notice</b>:  Undefined offset:  2 in <b>F:\IP-Symcon\scripts\.currentscript</b> on line <b>17</b><br />


Hallo Professorakiera,

bei der Fehlersuche solltest Du grundsätzlich immer den ersten aufgetretenen Fehler behandeln, da alle anderen meistens nur Folgefehler sind.

Die erste Fehlermeldung besagt, dass die angegebene Datei nicht gefunden wurde.
Möglicherweise ist in der Pfadangabe ein Schreibfehler enthalten.
Stimmt der Laufwerksbuchstabe?

Du kannst es auch mit dieser Syntax versuchen:

$text = file_get_contents("F:\\Program Files\\Pwrchute\\pwrchute.txt");

Gruß
HJH

So liebe leute ich habs fertig bekommen mit hilfe einen netten Informatieckers
Also was macht mein Script nun :

Es öffenet eine Logdatei und liest die inhalte und erzeigt dann daraus einen String und diesen dann weiter verarbeiten zu können.z.b. bei mir um ne warnmeldung per tts herauszugeben.

Ich habe alles kommentare drinnen gelassen um es „uns“ einfacher zu machen.
Ihr könnt alles sachen auskommentieren die ihr nicht braucht das macht die sache noch was schneller.

<?php

$Log = GetValueString('LogPaser');

	# letzte Aenderung 28.06.2007
	# Author: chr-frank@gmx.net
	# use it free .. don't sell it without making me rich too!

	define ("PATH", 		"F:/Program Files/Pwrchute");
	define ("MYFILE", 		"/pwrchute.log");




	$myBigTable = array(
							'id' 	=> array(),
							'datum' => array(),
							'zeit' 	=> array(),
							'text' 	=> array()
						);



	$myFile = $_SERVER['DOCUMENT_ROOT'].PATH.MYFILE;
 	$myFileHandle = fopen($myFile,'r') or die("Can't open file");

	print "<h1>Hallo Zeilen:</h1>
			<p>Im Code abgreifen:<br>
			Zeile: 36,37,38 - Uebergabe der Werte fuer id, datum und zeit<br>
			Zeile: 47 - .. Wert fuer den Text<br><br>
			Hier wird alles in das array 'myBigTable' geräumt<br><br>
			Verarbeitung am besten in Zeile 62 (for-Schleife) .. siehe Kommentar ..</p>";

	$zeiNum = 0;
 	while (!feof($myFileHandle)) {

		$zeiNum++;
 		$myZeile = split (" ",fgets($myFileHandle, 512));

 		# und jetzt die Zeilen nacheinander verarbeiten bis while alle ist

		array_push($myBigTable['id'],	$myZeile[0]);
		array_push($myBigTable['datum'],$myZeile[1]);
		array_push($myBigTable['zeit'],	$myZeile[2]);


		$newLastPart = "";
		for ($i=3;$i<count($myZeile);$i++) {
			$newLastPart .= $myZeile[$i]." ";
		}

		array_push($myBigTable['text'],	$newLastPart);

		echo "<pre>"; print_r($myZeile); echo "</pre>";
		print $zeiNum.": ".$myZeile[0]." ".$myZeile[1]." ".$myZeile[2]." ".$newLastPart."<br>";		
 	}

	print "<h1>Hallo Alles im neuen Array sortiert:</h1>";
	echo "<pre>"; print_r($myBigTable); echo "</pre>";

	print "<h1>Hallo Alles als Tabelle:</h1>
			<table border=\"1\" width=\"100%\">
			<tr><td colspan=\"5\">Zeilenanzahl: ".count($myBigTable['id'])."</td></tr>";

	for ($t=0;$t<count($myBigTable['id']);$t++) {
		# Hier kannst Du zeilenweise ueberpruefen wann wo was drinsteht, zB if (zeit == 12:15Uhr) { mach wa'se'will's; }
		print "<tr><td>".$t."</td><td>".$myBigTable['id'][$t]."</td><td>".$myBigTable['zeit'][$t]."</td><td>".$myBigTable['datum'][$t]."</td><td>".$myBigTable['text'][$t]."</td></tr>";				
	}


	print "</table><h1>Schööö</h1>
			<p>letzte Zeile:<br>".$myBigTable['id'][count($myBigTable['id'])-2]." --- ".$myBigTable['zeit'][count($myBigTable['id'])-2]." --- ".$myBigTable['datum'][count($myBigTable['id'])-2]." --- ".$myBigTable['text'][count($myBigTable['id'])-2]."</p>
			</body></html>";
SetValueString('LogPaser',$myBigTable['datum'][count($myBigTable['id'])-2]." - ".$myBigTable['zeit'][count($myBigTable['id'])-2]." - ".$myBigTable['text'][count($myBigTable['id'])-2])
?>

MFG Ken und danke an alles helfer