Registreer FAQ Berichten van vandaag


Ga terug   Scholieren.com forum / Technologie / Software & Hardware
Reageren
 
Topictools Zoek in deze topic
Oud 22-03-2006, 20:08
freyk
Avatar van freyk
freyk is offline
Een van mijn dagtaken op mijn stagebedrijf is het controleren van backupstatus logboeken.
Elke statuslijst (.txt bestand) moet gecontroleert worden en samengevat worden in een controlelijst.
Omdat dit veel tijd vergt, zou ik deze taak gaan willen automatiseren.
Dit zou ik willen doen door middel van een linux-distro, apache met php en (eventueel) mysql.
Het lukt al aardig, maar heb nog een paar problemen.

Probleem 1:
Als ik het volgende doe:
PHP-code:
<?php
echo exec('more systemstates.txt|grep -E "databackup|Systemstate"');
?>
krijg ik maar één uitkomstregel, terwijl er 35 uitkomstregels moeten zijn.

Probleem 2:
Een uitkomst regel zal er zo uit komen te zien
Code:
08-03-2006 19:03 628.623.360 Systemstate AD-OZ-01.bkf
Hoe krijg ik de datum, tijd, bestandsgroote en bestandsnaam, dat ik later uit de comando regel van probleem 1 krijg, gescheiden in een html-tabelletje?
__________________
"Typefouten zijn gratis" | "Daar is vast wel een knopje voor" | "Ik weet, want ik zoek" | Powered by Firefox, Chromium, Mac OS X, OpenSuse, and Google.

Laatst gewijzigd op 22-03-2006 om 21:01.
Met citaat reageren
Advertentie
Oud 22-03-2006, 21:35
dafelix
Avatar van dafelix
dafelix is offline
1.

Kun je niet naar een bestand wegschrijven? dan kun je die weer netjes uitlezen in PHP

exec('command > file.txt');


gebruik passthru

2.

Reguliere expressies
__________________
$karma++;

Laatst gewijzigd op 22-03-2006 om 21:38.
Met citaat reageren
Oud 22-03-2006, 23:10
Verwijderd
Waarom zou je dit met php doen en niet iets fatsoenlijks met een programmeertaal.
(of wellicht bash)
Met citaat reageren
Oud 23-03-2006, 06:59
freyk
Avatar van freyk
freyk is offline
Citaat:
dafelix schreef op 22-03-2006 @ 22:35 :
1. gebruik passthru
Nu ziet er nu niet goed uit, maar het is een begin

Citaat:
dafelix schreef op 22-03-2006 @ 22:35 :
2. Reguliere expressies
Heb je een voorbeeld voor me?

Citaat:
********** schreef op 23-03-2006 @ 00:10 :
Waarom zou je dit met php doen en niet iets fatsoenlijks met een programmeertaal.
(of wellicht bash)
Maar hoe krijg ik dan mijn systemstates netjes in een tabelletje in html?
Voorbeelden zijn altijd leuk
__________________
"Typefouten zijn gratis" | "Daar is vast wel een knopje voor" | "Ik weet, want ik zoek" | Powered by Firefox, Chromium, Mac OS X, OpenSuse, and Google.

Laatst gewijzigd op 23-03-2006 om 07:01.
Met citaat reageren
Oud 23-03-2006, 08:32
Verwijderd
Citaat:
freyk schreef op 23-03-2006 @ 07:59 :
Maar hoe krijg ik dan mijn systemstates netjes in een tabelletje in html?
Voorbeelden zijn altijd leuk
Wat is het doel van de html tabel of wat word ermee gedaan ofzo?
Met citaat reageren
Oud 23-03-2006, 10:42
dafelix
Avatar van dafelix
dafelix is offline
reguliere expressies? Daar is genoeg over te vinden hoor

(voor de gemakkelijke gebruiker, kijk op de site bij 't woordje 'te', groot DB met veel reg-expressions
__________________
$karma++;
Met citaat reageren
Oud 23-03-2006, 10:54
Verwijderd
Wat je ook kunt doen, maar iets minder safe is, is exploden op de spatie.
Met citaat reageren
Oud 23-03-2006, 13:10
Verwijderd
1) met fopen het bestand openen en regel voor regel inlezen
2) lijkt op fixed-width indeling

daarnaast zou ik het in een simpele database zetten, zodat je wat ingewikkeldere statistieken kunt berekenen.
Met citaat reageren
Oud 23-03-2006, 19:40
freyk
Avatar van freyk
freyk is offline
Citaat:
********** schreef op 23-03-2006 @ 09:32 :
Wat is het doel van de html tabel of wat word ermee gedaan ofzo?
Dat zal later uitgeprint worden, om dan in ons archief te bewaren.

En hier vind je een logje dat iedere werkdag gecontroleert moet worden.
__________________
"Typefouten zijn gratis" | "Daar is vast wel een knopje voor" | "Ik weet, want ik zoek" | Powered by Firefox, Chromium, Mac OS X, OpenSuse, and Google.

Laatst gewijzigd op 23-03-2006 om 19:45.
Met citaat reageren
Oud 24-03-2006, 16:16
Verwijderd
Citaat:
freyk schreef op 23-03-2006 @ 20:40 :
En hier vind je een logje dat iedere werkdag gecontroleert moet worden.
Vervelend logje om te parsen...
Met citaat reageren
Oud 24-03-2006, 16:39
freyk
Avatar van freyk
freyk is offline
Het enige wat ik nodig heb is zijn de namen van de server, datum, tijd, bestandsgroote en bestandnaam.
Deze gegevens worden uitgefilterd door grep.
__________________
"Typefouten zijn gratis" | "Daar is vast wel een knopje voor" | "Ik weet, want ik zoek" | Powered by Firefox, Chromium, Mac OS X, OpenSuse, and Google.
Met citaat reageren
Oud 02-04-2006, 18:36
Verwijderd
Waarom sla je deze data, het is immers data, niet op in een database? Zo kun je later nog altijd bepalen in welke vorm het moet worden weergegeven.
Wat betreft het exploden op spatie, dat is natuurlijk niet aan te raden. Je gaat dan uit van een bepaalde grammatica, die op een gegeven moment misschien wel klopt, maar 2 momenten later misschien niet, i.e. bij het toevoegen van een extra parameter ERGENS. Dit zou resulteren in dat de daarop volgende indexes allemaal met 1 worden opgehoogd, leuk voor de zondagmiddag
Reguliere expressie is the way to go, of een simpele LL-parser als eerstgenoemde te hoog gegrepen is.
Met citaat reageren
Oud 02-04-2006, 19:44
freyk
Avatar van freyk
freyk is offline
Zoals ik dus zei, een database wil ik liever later.
Ik wil het zo hebben dat deze .txt bestandjes van alle onnodige dingen gefiltert word (via grep), de tekst wat over blijft netjes in een htmltabel komt te staan.

Kunnen jullie me echt geen voorbeeldscriptjes laten zien, hoe ik dit probleem kan oplossen?
__________________
"Typefouten zijn gratis" | "Daar is vast wel een knopje voor" | "Ik weet, want ik zoek" | Powered by Firefox, Chromium, Mac OS X, OpenSuse, and Google.
Met citaat reageren
Oud 03-04-2006, 09:16
dafelix
Avatar van dafelix
dafelix is offline
*untested*
Code:
<?PHP
$result = passthru('more systemstates.txt|grep -E "databackup|Systemstate"');

echo "<table>";
foreach ($result as $line) {
  preg_match_all("(\w(\s))+", $line, $matches);
  echp "<tr>";
  echo "<td>". $matches[0] ."</td><td>". $matches[1]."</td>";
  echo "</tr>";
}
echo "</table>";
?>
*untested*

zoiets?
__________________
$karma++;

Laatst gewijzigd op 03-04-2006 om 14:12.
Met citaat reageren
Oud 03-04-2006, 09:39
Gimme more beer
Avatar van Gimme more beer
Gimme more beer is offline
Hehe, volgens mij maar één foutje (". $matches[0] .")
__________________
Onderuitgezakt in de koffiehoek van het zorgcentrum zit Sieb met volle teugen na te genieten van de Tweede Wereldoorlog. Arnela is de liefste! <3
Met citaat reageren
Oud 03-04-2006, 14:15
dafelix
Avatar van dafelix
dafelix is offline
Citaat:
Gimme more beer schreef op 03-04-2006 @ 10:39 :
Hehe, volgens mij maar één foutje (". $matches[0] .")
dankje

Overigens, de reguliere epxressie checkt niks, wellicht is zoiets beter (ook deze, untested):

Code:
"^(\d{2}-\d{2}-\d{4}) (\d{2}:\d{2}) (\d{3}.\d{3}.\d{3}) (\w) ([A-Z]{2}-[A-Z]{2}-\d{2}.bkf)$"
__________________
$karma++;
Met citaat reageren
Oud 30-04-2006, 15:40
freyk
Avatar van freyk
freyk is offline
Ff een up van mijn topic, om jullie de status van mijn project te melden:

Het lukte me niet om met passthru iets te regelen, dus zocht ik ff verder.
Op google kwam ik het volgende stukje code tegen:
PHP-code:
<?php 
// bron van de betere exec code: http://marc.10east.com/?l=php-windows&m=99389713932525&w=2
echo exec"cmd /c dir c:\\"$b);
for ( 
$i=0;$i<sizeof($b);$i++ ) {
  echo 
htmlspecialchars(trim($b[$i]))."<br>";
  };
?>
Hiermee kon ik de gegevens weergeven, maar nog niet netjes in een tabel. Om dit op te lossen Dus echo'de ik deze gegevens in een celletje.

Helaas kreeg ik niet de kans om een apparte linuxservertje op te zetten, dus ging ik wat prutsen met gepoorte linuxcommando's van cygwin.
PHP-code:
    exec'cmd /c grep -Ei "databackup|systemstate" .\\logs\\systemstates.txt'$b);
for ( 
$i=0;$i<sizeof($b);$i++ ) {
  echo 
htmlspecialchars(trim($b[$i]))."<br>";
  }; 
Werken met variabelen met grep is me ook gelukt:
PHP-code:
  $commandosuperoffice 'cmd /c grep -Ei "hallo1|hallo2'//eerste stukje van de commando
$date "|$datum"// variabele datum
$teken '"'// stukje van de zoekopdracht
$bestandsuperoffice ' .\\logs\\superoffice.txt'// waar in te kijken
$uitvoersuperoffice =$commandosuperoffice.$date.$teken.$bestandsuperoffice;  //alle variabelen samenvoegen
  
exec$uitvoersuperoffice$b); // en ze dan uitvoeren
  
for ( $i=0;$i<sizeof($b);$i++ ) {
  echo 
htmlspecialchars(trim($b[$i]))."<br>";
  }; 
__________________
"Typefouten zijn gratis" | "Daar is vast wel een knopje voor" | "Ik weet, want ik zoek" | Powered by Firefox, Chromium, Mac OS X, OpenSuse, and Google.

Laatst gewijzigd op 30-04-2006 om 21:55.
Met citaat reageren
Oud 04-05-2006, 21:08
freyk
Avatar van freyk
freyk is offline
Nee, het laatste stukje met een variabele datum werkt niet.
Want toen hem teste ontdekte ik dat een stukje wat wel werkte, niet achter een commentaar tekentje zat.
Deze werd dus uitgevoerd in plaats van mijn nieuwe code.

Ik zou graag met grep aangegeven zoekwoorden en een datum als variabele, in een tekstdocumentje zoeken en de gevonden dingen in een cel gooien.

Het volgende stukje werkt, maar ik krijg die variabele er niet in:
PHP-code:
exec'cmd /c grep -Ei "zoekwoord1|zoekwoord2|$datum" .\\logs\\bestand.txt'$b);
for ( 
$i=0;$i<sizeof($b);$i++ ) {
  echo 
htmlspecialchars(trim($b[$i]))."<br>";
  }; 
ik weet dat ik \"$datum\" in mijn exec regel moet gooien, maar krijg hem niet werkend.
__________________
"Typefouten zijn gratis" | "Daar is vast wel een knopje voor" | "Ik weet, want ik zoek" | Powered by Firefox, Chromium, Mac OS X, OpenSuse, and Google.
Met citaat reageren
Oud 04-05-2006, 22:34
dafelix
Avatar van dafelix
dafelix is offline
[0-9]{2}-[0-9]{2}-[0-9]{4} ?

doe anders 'ns "man grep" en leer reg-expressies
__________________
$karma++;
Met citaat reageren
Oud 06-05-2006, 19:25
freyk
Avatar van freyk
freyk is offline
Citaat:
dafelix schreef op 04-05-2006 @ 23:34 :
[0-9]{2}-[0-9]{2}-[0-9]{4} ?
doe anders 'ns "man grep"
Die werken wel met in een linuxscriptje dat z'n variabelen heeft, maar niet met mijn script die zijn eigen variabelen heeft.
Maar dat heb ik al weer opgelost :
PHP-code:
<?php
$datum 
"6-5-2005";
exec"cmd /c grep -Ei $datum .\\logs\\systemstates.txt"$b);
for ( 
$i=0;$i<sizeof($b);$i++ ) {
  echo 
htmlspecialchars(trim($b[$i]))."<br>";
  };
?>
Helaas zoekt hij nu maar één woord en meerdere zoekwoorden in variabelen opgeven, zoals $zoekwoorden="woord1|woord2", werkt hier niet.

Citaat:
dafelix schreef op 04-05-2006 @ 23:34 :
en leer reg-expressies
En daar moet ik me meer in gaan verdiepen. Helaas heb ik daar nog niet de tijd voor.
__________________
"Typefouten zijn gratis" | "Daar is vast wel een knopje voor" | "Ik weet, want ik zoek" | Powered by Firefox, Chromium, Mac OS X, OpenSuse, and Google.

Laatst gewijzigd op 06-05-2006 om 19:35.
Met citaat reageren
Oud 06-05-2006, 19:32
Dr HenDre
Avatar van Dr HenDre
Dr HenDre is offline
toch jammer dat je zn quote aanpast
Met citaat reageren
Oud 23-05-2006, 19:48
freyk
Avatar van freyk
freyk is offline
ff een up van mijn topic om de status te melden:

Het is me uiteindelijk gelukt om meerdere variabelen als zoekwoord voor grep te voegen, door de script automatisch laten aan te passen door sed via een andere script.

Alles gaat voorspoedig, maar hik steeds tegen het volgende probleem:
Zoals jullie weten maak ik van de volgende code gebruik om grep aan te roepen, grep te laten zoeken en het resultaat weer te geven.
PHP-code:
<?php
exec
'cmd /c grep -Ei "zoekwoord1|zoekwoord2" .\\logs\\logje.txt'$b);
for ( 
$i=0;$i<sizeof($b);$i++ ) {
  echo 
htmlspecialchars(trim($b[$i]))."<br>";
  };
?>
Maar als ik deze coderegels herhaal (met uiteraard andere zoekwoorden en ander logje),
herhaalt hij steeds het zoekresultaat van de eerste zoekopdracht.

Hoe kan ik ervoor zorgen dat hij normaal de tweede opdracht pakt en deze goed weergeeft zonder de eerste resultaat mee te pakken?
__________________
"Typefouten zijn gratis" | "Daar is vast wel een knopje voor" | "Ik weet, want ik zoek" | Powered by Firefox, Chromium, Mac OS X, OpenSuse, and Google.

Laatst gewijzigd op 23-05-2006 om 19:59.
Met citaat reageren
Oud 23-05-2006, 21:07
freyk
Avatar van freyk
freyk is offline
Heb nog ff wat rondgevraagd op got.
Ze vertelden me dat ik "unset" erbij moest gebruiken.

De uiteindelijke code moet dus het volgende zijn:

PHP-code:
<?
  exec( 'cmd /c grep -Ei "zoekwoord1|zoekwoord2" .\\logs\\logje.txt', $b);
  for ( $i=0;$i<sizeof($b);$i++ ) {
    echo htmlspecialchars(trim($b[$i]))."<br>";
  }; 

  unset($b);

  exec( 'cmd /c grep -Ei "zoekwoord3|zoekwoord4" .\\logs\\logje2.txt', $b);
  for ( $i=0;$i<sizeof($b);$i++ ) {
    echo htmlspecialchars(trim($b[$i]))."<br>";
  };
unset($b);
?>
__________________
"Typefouten zijn gratis" | "Daar is vast wel een knopje voor" | "Ik weet, want ik zoek" | Powered by Firefox, Chromium, Mac OS X, OpenSuse, and Google.
Met citaat reageren
Oud 24-05-2006, 11:28
Engadin
Avatar van Engadin
Engadin is offline
Waarom gebruik je exec en an grep, waarom niet meteen preg_match, dit kan hetzelfde (naar mijn weten), is sneller, en vormt een kleiner veiligheids risico.
__________________
Jongeren - Natuur: http://www.njn.nl
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Kom mee op zomerkamp: http://www.zomerkampen.njn.nl
Met citaat reageren
Advertentie
Reageren


Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar

Soortgelijke topics
Forum Topic Reacties Laatste bericht
Software & Hardware Wat programmeren jullie allemaal
Warsocket
69 12-08-2006 12:08


Alle tijden zijn GMT +1. Het is nu 02:29.