[php] naar laatste lijn van csv bestandje

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik counter wat dingen met perfmon en die worden in een csv bestand gezet was er byvoorbeeld zo uitziet :

"(PDH-CSV 4.0) (W. Europe Standard Time)(-60)","\\SERVER\TCP\Connections Established"
"12/12/2003 01:36:43.437","213"
"12/12/2003 01:36:48.437","221"
"12/12/2003 01:36:53.437","210"
"12/12/2003 01:36:58.437","209"
"12/12/2003 01:37:03.453","196"
"12/12/2003 01:37:08.453","188"
"12/12/2003 01:37:13.453","183"
"12/12/2003 01:37:18.453","175"
"12/12/2003 01:37:23.453","182"
"12/12/2003 01:37:28.453","184"

nu heb ik een script die eigenlijk de laatste waarde moet laten zien omdat die uiteraard de meest up-to-date is. het lukt mij echter niet.ik heb nu een script wat eigenlijk de eerste waarde laat zien . hierdoor heb ik de log op 1 kb ingesteld dus dat de log wel telkens overnieuw wordt aangemaakt :

PHP:
1
2
3
4
5
6
7
8
9
// aantal tcp connections

$filename = "c:\\inetpub\\wwwroot\\stats\\logfiles\\system_network.csv";
$handle = fopen ($filename, "r");
@$contents = fread ($handle, filesize ($filename));
fclose ($handle);

print ($contents[114].$contents[115].$contents[115]);
?>


wie weet hoe het moet , heb gezocht op google en op php.net maar kom er niet echt duidelijk uit .

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
ziet er redelijk constant uit. volgens mij kun je gewoon de pointer naar het einde van het bestand min de lengte van "12/12/2003 01:37:28.453","184" zetten en die uitlezen

http://nl.php.net/manual/nl/function.fseek.php

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
marty schreef op 12 december 2003 @ 01:54:
ziet er redelijk constant uit. volgens mij kun je gewoon de pointer naar het einde van het bestand min de lengte van "12/12/2003 01:37:28.453","184" zetten en die uitlezen

http://nl.php.net/manual/nl/function.fseek.php
Dat vind ik een hoogste enge methode, om eerlijk te zijn. Niets garandeert je dat die lengte constant blijft. Worden data misschien in januari als 1/1/2003 gegeven, ipv 01/01/2003. Daar weet je niks van.

[ Voor 3% gewijzigd door Grijze Vos op 12-12-2003 02:17 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Tabacco, welk OS gebruik je? (Of moet he tportable zijn). Onder Unix-achtige OSsen is het wel makkelijk te bewerkstelligen...

bijvoorbeeld:

system("tail -n 1 bestand.cvs");

[ Voor 18% gewijzigd door Grijze Vos op 12-12-2003 02:20 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Grijze Vos schreef op 12 december 2003 @ 02:17:
[...]
Niets garandeert je dat die lengte constant blijft. Worden data misschien in januari als 1/1/2003 gegeven, ipv 01/01/2003. Daar weet je niks van.
Nee, maar ik ga er van uit dat de topicstarter intelligent genoeg is om dat zelf te bepalen ;)

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Mja, vind ik het nog fout om zo'n advies te geven. Dat soort 'vieze' programmeertruukjes leveren het gros van de bugs in hedendaagse software. Zoek gewoon op een iets generiekere manier naar de laatste regel, das een stuk netter.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ik gebruik windows 2000 , het maakt niet zo uit dat in 2003 het iets verandert , het gaat om een stats pagina.

ik kan er wel wat truukjes bij verzinnen die de regel chekken en ontleden.

zoek alleen hoe ik precies naar die laatste regel kan komen

Acties:
  • 0 Henk 'm!

  • BraveWorld
  • Registratie: September 2001
  • Niet online
Bijvoorbeeld met de "file" functie de logfile in een array inlezen. De size van de array bepalen en het laatste element nemen. Idd wel je logfile klein houden. Is anders een beetje zonde van je resources als je hem geheel inleest.

Of met fscanf regel voor regel de logfile inlezen tot end_of_file en de laatste regel onthouden.

Of toch zoals Marty zegt de pointer naar het einde van de file zetten. Maar dan een ruime hap laatste bytes pakken, en hierin het voor jou interessante deel binnen de laatste series aanhalingstekens selecteren.

En anders zijn er ongetwijfeld nog andere trucjes...

[ Voor 23% gewijzigd door BraveWorld op 12-12-2003 03:41 ]

Dit is geen signature...


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Grijze Vos schreef op 12 december 2003 @ 03:01:
Mja, vind ik het nog fout om zo'n advies te geven. Dat soort 'vieze' programmeertruukjes leveren het gros van de bugs in hedendaagse software. Zoek gewoon op een iets generiekere manier naar de laatste regel, das een stuk netter.
Da's mijns inziens ook kort door de bocht. Snelheid kan zwaar meetellen. En als je met 100% zekerheid kunt zeggen dat die string niet qua lengte verandert dan kun je wel mooi een generieke oplossing gaan schrijven waar je nooit het voordeel van zult ondervinden, maar daar heb je dan dus nix aan en maakt het alleen maar onnodig traag. En wat dat betreft vind ik het dan echt niet netter.

Maargoed hangt dus van de situatie af.

(Qua advies had ik het er misschien wel ff bij kunnen zeggen jah.....)

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Wat je kunt doen is iets als deze code:

PHP:
1
2
3
4
    while (!feof($fp))
    {
      $text = fgets($fp, 4096);
    }

Als ie gestopt is met de loop heeft ie de laatste regel te pakken. Maar, als je vaak dit script uitvoert, of de file heel erg groot is, is dat misschien niet helemaal handig, aangezien je steeds de hele file ff doorloopt.

[ Voor 3% gewijzigd door Grijze Vos op 12-12-2003 09:27 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info

Pagina: 1