Zeilenaufbau kontrollieren und zählen
Michael W.
- php
0 lulu0 Michael W.0 lulu0 Michael W.0 Michael W.0 lulu0 Michael W.0 lulu
hi
ich möchte aus eine txt datei betimmte zeilen kombinationen auslesen und zählen
bsp:
vorm doppelpunkt: und hier hinterm doppelpunkt
definition a: hallo
definition b: xxx
ich möchte nach dem schema x a: x x suchen: und für a eine definition abgeben.
sind diese zeilen gefunden möchte ich sie zählen.
wie ?
Danke
Moin Michael
ich dachte Dein Chef macht das jetzt, oder etwa doch nicht?
Einen Lösungsvorschlag hatte ich ja schon mal gepostet
http://forum.de.selfhtml.org/archiv/2002/8/20534/#m114986
habe das mal um trim erweitert, da in Deiner Txt-Datei ja in jeder Zeile führende Blanks drin stehen, wenn ich mich recht erinnere.
$fn = 'mytextfile.txt';
$content = file($fn);
$haystack = array();
foreach($content as $c){
list ($begriff,$text) = explode(':',$c);
$haystack[ trim( $begriff) ][] = trim( $text);
}
/* Ausgabe des Resultates */
foreach ($haystack as $k => $v){
printf( 'Zum Begriff %s gibt es %d Zeilen<br>',$k,count($v) );
}
probier das noch mal aus.
Es wäre vermutlich für alle Beteiligten einfacher wenn man die Lösung bzw. Problemstellung auf einen Thread konzentrieren würde.
Dann bleibt das ganze für andere Leser und später auch im Archiv nachvollziehbar.
Viele Grüße
lulu
$fn = 'mytextfile.txt';
$content = file($fn);
$haystack = array();
foreach($content as $c){
list ($begriff,$text) = explode(':',$c);
$haystack[ trim( $begriff) ][] = trim( $text);
}
/* Ausgabe des Resultates */
foreach ($haystack as $k => $v){
printf( 'Zum Begriff %s gibt es %d Zeilen<br>',$k,count($v) );
}
soweit sieht das ganz gut aus, nur das es noch auf keinen begriff bzw auf begriffe fixiert ist.
muss ich nicht mit $begriff1= 'text' arbeiten ?
Danke
Huhu Michael
soweit sieht das ganz gut aus, nur das es noch auf keinen begriff bzw auf begriffe fixiert ist.
Das ist erstmal nur zum Testen, ob das so mit dem vorliegenden
Datenformat des txt-Files funktioniert.
Was meinst Du mit "sieht gut aus"? Funktioniert es, oder hast Du es ausprobiert?
muss ich nicht mit $begriff1= 'text' arbeiten ?
Das wäre dann der zweite Schritt, das ist dann aber der einfachere Teil.
Entweder man überspringt schon beim Einlesen in das Array die unerwünschten Zeilen.
Durch z.B.
if ( $begriff != 'MyFavourite') continue;
nach der Zeile mit explode
oder bei der Ausgabe
printf( 'Zum Begriff %s gibt es %d Zeilen<br>','MyFavourite',count($haystack['MyFavourite']) );
Viele Grüße
lulu
btw. = != ==
Was meinst Du mit "sieht gut aus"? Funktioniert es, oder hast Du es ausprobiert?
ja ich habe es ausprobiert und es funktioniert
if ( $begriff != 'MyFavourite') continue;
nach der Zeile mit explode
oder bei der Ausgabe
printf( 'Zum Begriff %s gibt es %d Zeilen<br>','MyFavourite',count($haystack['MyFavourite']) );
ich möchte aber mehrere begriffe eintragen können ...
Danke
nachsatz
das schema das wir haben ist ja folgendes:
processor: Intel Pentium with MMX-167
so ich möchte ja die verschiedenen processoren zählen.
das heisst ich suche nach d er zeile mit sowas wie:
processor: x1
processor: x2
am ende will ich halt eine tabelle haben wo steht welcher processor wie oft in der textfile auftaucht.
processor anzahl
inel pentium 516
amd athlon 498
xxx xxx
das ist ja wieder was anderes, oder ?
Huhu
ich möchte aber mehrere begriffe eintragen können ...
das geht dann z.B. ungefähr so
1. Stecke die gewünschten Begriffe in ein Array.
2. Mache ein Schleife über alle Array-Elemente (z.B. foreach)
3. Ändere die Ausgabe entsprechend um, dass sie variabel wird
also diese Zeile:
printf( 'Zum Begriff %s gibt es %d Zeilen<br>','MyFavourite',count($haystack['MyFavourite']) );
Viele Grüße
lulu
geht net:
http://mitglied.lycos.de/djwoelk3/test/zeile/
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Hardwareanalyse - auslese</title>
</head>
<body>
<?php
$fn = 'report.log';
$content = file($fn);
$haystack = array();
foreach($content as $c){
list ($begriff,$text) = explode(':',$c);
if ( $begriff != 'processor') continue;
$haystack[ trim( $begriff) ][] = trim( $text);
}
foreach ($haystack as $k => $v){
printf( 'Zum Begriff %s gibt es %d Zeilen<br>','processor',count($haystack['processor']) );
printf( 'Zum Begriff %s gibt es %d Zeilen<br>','pentium',count($haystack['pentium']) );
}
?>
</body>
</html>
was stimmt nicht ?
Huhu
geht net:
<?php
$fn = 'report.log';
$content = file($fn);
$haystack = array();
foreach($content as $c){
list ($begriff,$text) = explode(':',$c);
if ( $begriff != 'processor') continue;
$haystack[ trim( $begriff) ][] = trim( $text);
}
foreach ($haystack as $k => $v){
printf( 'Zum Begriff %s gibt es %d Zeilen<br>','processor',count($haystack['processor']) );
printf( 'Zum Begriff %s gibt es %d Zeilen<br>','pentium',count($haystack['pentium']) );
}
?>
was stimmt nicht ?
du bringst die Keys (Schlüssel) mit den Values (Werte) durcheinander.
Also nochmal von vorne ;-)
diese Zeile zerlegt eine Zeile des TXT-Files am :
wenn $begriff != 'processor' dann ignorieren
muss an dieser Stelle noch getrimmt werden, da $begriff ja Blanks enthält.
hier wird $begriff als KEY für den Array-Eintrag genommen
in diesem Falle ist es ebenfalls ein Array, an dieses wird als neues Item $text angehängt.
Die stehen als Array in $haystack['processor'].
Zum ausgeben probier einfach mal
echo join('<br>',$haystack['processor']);
da sind jetzt vermutlich noch allerhand doppelt Einträge drin.
Um diese zu zählen gibt es in PHP eine Funktion array_count_values, aber hier mal zu Fuss.
$Result = $haystack['processor'];
$occ = array();
foreach($Result as $r){
$occ[$r] ++;
}
Die Ausgabe erfolgt dann wie gehabt
foreach($occ as $k => $v){
printf( 'Vom Typ %s gibt es %d <br>',$k,$v);
}
so far...
lulu
jetzt bin ich sowieso durcheinander ...
ich steh wiedermal total aufm schlauch, vorallem weil es gerade eine planänderung gab
ich habe die report.log auch im netzt stehen
http://mitglied.lycos.de/djwoelk3/test/zeile/report.log
die planänderung ist nämlich folgende:
wie möchten am ende ein menü haben das wie folgt aussieht:
1. Alle User, deren Prozessoren und deren Server auflisten.
(kann man alles aus der report.log auslesen)
2. Alle User von einzelen Server-Standorten und deren prozessoren auslesen)
3. einzelne user auslesen
1. alle
2. server
3. user
das shell script wird folgendes machen:
angenommen in worms haben sich alle user bis jetzt schon einmal eingeloggt. jetzt befinden sich in deren netz in einem speziellen ordner alle %user%.log `s
user1.log
user2.log
user3.log
das script kopiert diese dateien nach frankfurt in den ordner /worms
und so passiert das mit allen anderen auch.
/worms
/köln
/friedberg
/und so wieter
da jetzt alle dateien auf unserem server sind dürfte es mit php ja jetzt kein problem mehr sein die einzelnen dateien auszulesen.
fangen wir mal mit der user auslese an:
ich würde gerne wissen welche hardware der user "muellemu" aus köln hat.
dann klicken wir im menü auf user-check (oder was weiss ich ...)
und dann folgen dadrauf 2 eingabefelder:
username und serverstandort
diese 2 angaben speichern wir in 2 variablen:
$user und $server
auf der ausgabe seite soll dann folgendes stehen:
Der User ist: $user_script (_script daher, da es das script aus der datei erfahren soll welcher user das ist und die varaible $user ist nur zur verwertung des scripts gedacht)
Der Server ist: $Server_script (hier das selbe)
Processor: $processor
andere bezeichnungen: $x
ok ?
bevor wir weiter machen warte ich erstmal auf dein verständnis
P.s.: lulu, ist das weiblich ?
Holla
die planänderung ist nämlich folgende:
wie möchten am ende ein menü haben das wie folgt aussieht:
ok ?
bevor wir weiter machen warte ich erstmal auf dein verständnis
Das hatte ich ja schon mal vermutet das da noch ein
Bündel Wünsche nachkommt.
Man kann das natürlich mit den txt-Files machen aber das wird
relativ umständlich. Ist eigentlich auch unnötig, da
man die Auswertungen direkt in SQL formulieren kann.
Es würde sämtliche Auswertungen extrem vereinfachen, wenn die Daten
in einer Datenbank vorliegen würden.
Da bräuchtet ihr halt ein Skript das die Logfileeinträge in eine solche Datenbank importiert.
Evtl. reicht Euch ja auch einfach ein SpreadSheet-Programm wie z.B. Excel, da kann man dann ja ggf. auch Filter einstellen, aber schön ist das auch nicht.
Evtl. wäre es auch eine Hilfe bei der Konzeption die Sache "von oben"
her anzugehen.
Also wie soll das finale Userinterface aussehen
mit welchen Funktionalitäten etc.,
dann daraus Schlussfolgern wie die Datenhaltung sein muss
und dann entsprechend den Datenimport( die Datenauswertung ) machen.
Alles in allem ist das schon etwas aufwändiger was Ihr da vorhabt oder?
P.s.: lulu, ist das weiblich ?
hört sich so an, könnte aber auch ein fieser Betrug sein ;-)
Viele Grüße
lulu
ja das ist eine grössere sache, aber datenbanken habe ich bis jetzt noch nie angewendet.
ich möchte jetzt erstnochmal ein suchscript.
der folgende zeilen sucht und in einer variablen speichert und sich per echo ausgäben lässt:
"USER="
"SERVER="
wenn ich nach diesen begriffe suche gibt es keine doppelt - das macht es einfach. Suche ich nach processor findet das alte script aber auch coprocessor und genau den speichert er dann in der variablen. leider ist auch das schema gleich
processor: x
coprocessor: x
^^^^^^^^^^^
aber wenn ich hier space mitsuche dann dürfte dass doch gehen oder ?
^^processor: x
coprocessor: x
^^^^^^^^^^^^^
ich probiers mal aus und warte deine meinung in der zeit ab.
bist du jetz n typ oder eine atraktive frau die ein wenig schüchtern ist (ich glaube ein typ, denn frauen denken nicht wie mein ausbilder, denn die idee mit dem excel filter hatte er vorher ...)
Hallo
ich probiers mal aus und warte deine meinung in der zeit ab.
ausprobieren ist gut, aber warte mal lieber nicht auf feedback, ich muss jetzt erstmal mal ein bischen arbeiten und dann bin ich ein paar Tage offline (Hurra)
so far
lulu
oh oh - wie meinst du das ?
hast du kein bock mehr ? :|
du bist doch die (oder der) einzigste die/der mir helfen kann.
Huhu
hast du kein bock mehr ? :|
den "bock" solltest Du haben, es heisst ja self- und nicht gethtml.
Deine Aufgabenstellung ist schon etwas komplex.
Mit eben mal ein bischen helfen ist es da also nicht getan.
Ich poste ja gerne mal ein kurzes Snippet, aber das was Du brauchst ist schon etwas größeres und das gibt es nur wenn Du es selbst schreibst.
So wie ich das einschätze müsstest Du Dir erstmal ein paar solide
Grundlagen aneignen.
Deine Aufgabe ist ja durchaus interessant, an der kann man auch vieles lernen, aber versuche es in kleinere Problemstellungen zu unterteilen.
Hier noch ein paar Links wo Du ggf. fündig wirst
Diese beiden hier am Besten komplett durcharbeiten, auch wenn man vieles wieder vergisst hat man doch ungefähr eine Ahnung was es für Möglichkeiten gibt.
http://www.php.net/manual/en/ref.array.php
http://www.php.net/manual/en/ref.strings.php
Tipp wenn Du in der URL das "en" durch "de" ersetzt hast Du
die Seiten in deutscher Sprache.
http://php-builder.com/
http://php-faq.de/
einzigste
gesprochen ist das schon schlimm, aber bitte schreib das nicht.
have a nice weekend
so far
lulu
na also - es hat funktioniert:
--------------- (http://mitglied.lycos.de/djwoelk3/test/zeile/zeile_auslesen.php)
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Hardwareanalyse</title>
</head>
<body>
<?php
$a = "USER=";
$b = "SERVER=";
$c = " Processor: ";
$datei = file('report.log');
for($i=0;$i<count($datei);$i++)
{
if(eregi($a,$datei[$i])) $gz1 = $datei[$i];
if(eregi($b,$datei[$i])) $gz2 = $datei[$i];
if(eregi($c,$datei[$i])) $gz3 = $datei[$i];
}
?>
<div align="left">
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111">
<tr>
<td><?php echo $gz1; ?></td>
</tr>
<tr>
<td><?php echo $gz2; ?></td>
</tr>
<tr>
<td><?php echo $gz3; ?></td>
</tr>
</table>
</div>
</body>
</html>
-------------
jetzt habe ich aber noch eins nicht eingebaut:
$datei = file('$server."/".$user.".log"');
ist das so OK ? ne oder ?
Danke