Werte aus Datei auslesen und addieren
Thomas
- php
Moin zusammen
ich habe da folgendes Problem und zwar möchte ich aus meiner Datei messages folgendes auslesen
Sent 98288270 bytes, received 131328276 bytes.
nach 24 Stunden wird ja zwangsweise die Leitung gekappt und in der Message Datei stehen dann imm der die gesendeten und Empfangenen Bytes
Nun soll die gesamte Datei nach den Werten send und received durchsucht werden und die Werte miteinander addiert werden
Sent + received = Ergebnis, nächste Zeile Sent + received + Ergebnis vorhergehende Zeile usw.
Ich habe da ein Script welches ich fuer die Trafficberechnung meines Webservers benutze
<html>
<head>
</head>
<body bgcolor="#000080" text="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000" font size="-1">
<?php
$datei = file('access_log'); //Datei einlesen
$traffic = 0; //Startwert für $traffic
foreach($datei as $zeile){ //Array durchlaufen
$teile = explode("'",$zeile); //explode anwenden
$traffic += $teile[1]/1024000; //$teile[1] zu $traffic dazuzählen
}
echo "Deine Webseite hat bis jetzt $traffic MB verbraucht";
?>
</body>
</html>
Kann man dieses umstricken um es fuer den obigen Fall zu verwenden ??
Wenn ja könnte mir jemand vielleicht die Zeile nennen bzw. es abaendern ??
Grueße Thomas
hi,
foreach($datei as $zeile){ //Array durchlaufen
$teile = explode("'",$zeile); //explode anwenden
hier wird jede zeile an einem festgelegten trennzeichen (das hochkomma) aufgeteilt, ergebnis ist ein array.
$traffic += $teile[1]/1024000; //$teile[1] zu $traffic dazuzählen
und hier wird der richtige array-wert dann draufaddiert.
das mit dem trennen am ' wird bei deiner datenstruktur natürlich nicht klappen - du musst dir also eine möglichkeit überlegen, eine zeile im format
Sent 98288270 bytes, received 131328276 bytes.
derart zu zerlegen, dass du an die beiden zahlenwerte herankommst.
reguläre ausdrücke würden sich dazu anbieten, sind allerdings nicht ganz trivial für anfänger.
gruss,
wahsaga
Moin wahsaga
Koenntest du mir dabei behilflich sein ??
hi,
Koenntest du mir dabei behilflich sein ??
erste anlaufstelle zur beschäftigung mit regulären ausdrücken wäre hier wohl http://www.php.net/manual/de/ref.pcre.php
die funktion, die du dann zum aufsplitten des strings eigentlich brauchst, ist http://www.php.net/manual/de/function.preg-match.php.
gruss,
wahsaga
Ups....hab mir gerade mal so ein Script genommen und bei mir ausgeführt um es mir mal anzuschauen...
Nur das jetzt auf meine Bedürfnisse umzustricken als blutiger Anfänger, ist wohl eine Nummer zu gross.....
Könnte man mir zu veranschaulichung was fertiges posten, wäre echt nett, damit fange ich zum verständniss ehrlich gesagt mehr an...
Soll kein Vorwand sein um meine grauen Gehirnzellen nicht selber anstrengen zu muessen nur hapert es bei mir mit der Syntax
hi,
Könnte man mir zu veranschaulichung was fertiges posten, wäre echt nett, damit fange ich zum verständniss ehrlich gesagt mehr an...
du willst ja aus einem string in der form
Sent 98288270 bytes, received 131328276 bytes.
die beiden zahlen rausbekommen.
da sollten wir mit einem relativ einfachen suchmuster hinkommen, weil dein string ja eigentlich nur aus zwei arten von bestandteilen zusammengesetzt ist: einmal zeichenketten, die alle zeichen ausser ziffern beinhalten dürfen, und einmal zeichenketten, die nur ziffern beinhalten dürfen.
zeichenklasse für nur ziffern in einem regulären ausdruck wäre [0-9], [^0-9] wäre dann das gegenteil davon.
wir wollen immer teilzeichenketten finden, die aus einem oder mehr dieser zeichen bestehen, also nehmen wir den quantifier +
![1]+([0-9]+)[^0-9]+([0-9]+)[^0-9]+$!
wäre also jetzt mein erster vorschlag für ein suchmuster(*).
probiere jetzt also bitte mal folgendes aus:
$meinezeile = 'Sent 98288270 bytes, received 131328276 bytes.';
$treffer = array();
preg_match('![2]+([0-9]+)[^0-9]+([0-9]+)[^0-9]+$!', $meinezeile, $treffer);
print_r($treffer);
kommt da schon was bei raus ...?
gruss,
wahsaga
(*) disclaimer: ich arbeite auch nicht so oft mit regulären ausdrücken, so dass in der erstellung dieser bei mir auch oft ein stück weit trial and error mit drinsteckt.
Das ist was mir angezeigt wird
Array ( [0] => Sent 98288270 bytes, received 131328276 bytes. [1] => 98288270 [2] => 131328276 )
<?php
$handle = popen("grep 'Sent [0-9]* bytes' messages.txt | awk '{print $7,$10};'", "r");
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
echo $buffer;
}
?>
Ergebnis sind die einzelnen Werte
21032462 62718005 2592 2089 98288270 131328276
wie bekomme ich diese nun alle miteinander addiert ???