[php] Line x uit een .file lezen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • TutanRamon
  • Registratie: Februari 2001
  • Laatst online: 08-09 19:53
Stel, je leest een .HTML file (70 lines) in mbv PHP. Is het dan mogelijk om alleen line 40 uit te lezen? Ik weet dat het met JAVA en Delphi wel mogelijk is, maar ik zou niet weten hoe je dat in PHP moet verwezenlijken...

[ Voor 36% gewijzigd door TutanRamon op 04-11-2003 20:00 ]

We see things as we are, not as they are


Acties:
  • 0 Henk 'm!

Verwijderd

Gewoon 40 keer een regel uitlezen (fgets()). Je kunt nooit raden waar de xe regel in het bestand begint (behalve als ze allemaal dezelfde lengte hebben), je zult ze dus altijd individueel moeten lezen.

Een inefficiënte hack kan dit zijn:
PHP:
1
2
$lines = file('somefile.html');
echo $lines[40];


Maar dan leest hij eerst het hele bestand in.

[ Voor 27% gewijzigd door Verwijderd op 04-11-2003 20:02 ]


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:06

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op 04 november 2003 @ 20:01:
Gewoon 40 keer een regel uitlezen (fgets()). Je kunt nooit raden waar de xe regel in het bestand begint (behalve als ze allemaal dezelfde lengte hebben), je zult ze dus altijd individueel moeten lezen.
Kan je niet alles inlezen, splitsen op \r\n en item 39 van de array pakken?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • TutanRamon
  • Registratie: Februari 2001
  • Laatst online: 08-09 19:53
Verwijderd schreef op 04 november 2003 @ 20:01:
Gewoon 40 keer een regel uitlezen (fgets()). Je kunt nooit raden waar de xe regel in het bestand begint (behalve als ze allemaal dezelfde lengte hebben), je zult ze dus altijd individueel moeten lezen.
Ik was namelijk het volgende van plan. Ik moet zoeken in een .html naar een bepaalde stukje code en dan moet die regel, + 2 daarboven en 2 daaronder weergegeven worden. Dus stel dat dat stukje specifieke code waar ik op zoek op line 40 zit, dan wil ik line 38 t/m 42 echo-en

We see things as we are, not as they are


Acties:
  • 0 Henk 'm!

Verwijderd

gorgi_19 schreef op 04 november 2003 @ 20:02:
[...]

Kan je niet alles inlezen, splitsen op \r\n en item 39 van de array pakken?
Tuurlijk, maar als je toch ineffcient bezig bent, gebruik dan gewoon file().

Acties:
  • 0 Henk 'm!

Verwijderd

Als het een GNU/Linux machine betreft kun je head of grep gebruiken en die aanroepen in php. Is het alleen de vraag of je dat wel wil doen (aanroepen van een extern programma).

[ Voor 3% gewijzigd door Verwijderd op 04-11-2003 20:25 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 19:10
De file()-suggestie van Zef lijkt me het meest zinnig, behalve als je altijd een relatief laag regelnummer hebt (regel 10 uit een bestand met 10000 regels, bijvoorbeeld); in dat geval is het te kostbaar om het hele bestand in te lezen en kun je beter voor de oplossing met fgets() of head&tail (zie Nelske) gaan.

Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Wanneer je nu vaker die file inleest dan is het wellicht handig om de exacte positie en de grootte van het fragment te cachen. Wanneer je die informatie tot je beschikking hebt dan kan je met fseek de filepointer precies op de goede plek zetten zonder dat het nodig is om de informatie er voor te lezen / processen.

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 19:10
Ik zou zeggen: cache dan gelijk die hele regel!

Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
stekkel schreef op 04 november 2003 @ 21:02:
Wanneer je nu vaker die file inleest dan is het wellicht handig om de exacte positie en de grootte van het fragment te cachen. Wanneer je die informatie tot je beschikking hebt dan kan je met fseek de filepointer precies op de goede plek zetten zonder dat het nodig is om de informatie er voor te lezen / processen.
dan lijkt het me slimmer om gewoon die regel zelf ergens op te slaan....

edit:
ik moet niet m'n venstertje 10 minuten open laten staan en dan pas de reply tikken |:(

[ Voor 10% gewijzigd door marty op 05-11-2003 02:00 ]

Pagina: 1