[PHP (vertaling ASP)] Hoe strings uit een bestand filteren?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • nl2dav
  • Registratie: Juni 2001
  • Laatst online: 20-09 20:09
Ik zit me zo'n beetje de hele dag al stuk te bijten op een ASP bestand waar ik PHP van wil maken. Ik moet zeggen dat ik niet onwijs veel ervaring heb met PHP nog, maar dit zou-toch-moeten-lukken. Een duwtje in de goede richting is wenselijk ;).

Affijn het bestand is dus van origine ASP, maar aangezien ik allang apache/PHP/MySQL draai en niet van plan ben om ook maar iets met ASP te gaan doen, wilde ik het principe "vertalen"... ASP2PHP gebruikt maar dat werkt natuurlijk weer voor geen meter.

Wat er gebeurd in ASP is als volgt; er word een file geopend wat in principe een screendump is van bijvoorbeeld een teletekst pagina. Dat is ruw materiaal, de file wordt met "ReadLine" regel om regel uitgelezen.

Om precies te zijn zoiets;

code:
1
2
3
4
5
6
7
8
9
do while not filename.AtEndOfStream
var1 = filename.ReadLine
if InStr(var, "karakters") then
      var2 = filename.ReadLine

[blabla]

endif
loop


Bij dat [blabla] gebeurd dan wat "leuks", dan word er met de Mid(var2, pos, length) = "xyz" gezocht naar occurences van xyz en als er dan occurences voorkomen dan wordt er via een if .. then.. opzet wat mee gedaan...

En daar gaat het mij nu net om, in PHP kan ik niet een soortgelijke instructie vinden die dat doet. Ik word een beetje gek van die PHP manual eigenlijk |:(

Google kan me ook niet echt van dienst zijn dus als iemand met meer ervaring wat tips zou kunnen geven dan kom ik in ieder geval een stap vooruit. Stilstaan is ook zo saai... :(

Acties:
  • 0 Henk 'm!

Verwijderd

substr ? :X mid gebruikte ik in QuickBASIC altijd :D

Acties:
  • 0 Henk 'm!

  • SWfreak
  • Registratie: Juni 2001
  • Niet online
ik zou strpos() eens proberen....

Acties:
  • 0 Henk 'm!

Verwijderd

ff uit me hoofd dan

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$fd = fopen("blaat.txt", "r"); // open bestand om te lezen

while ($regel = fgets($fd, 1024))
{
    if (stristr($regel, "char"))
    {
        // found
    }
    else
    {
        // not found
    }
}
fclose ($fd);

Acties:
  • 0 Henk 'm!

  • nl2dav
  • Registratie: Juni 2001
  • Laatst online: 20-09 20:09
SWfreak schreef op 18 February 2003 @ 21:28:
ik zou strpos() eens proberen....
Heb ik eerder deze avond opgeschreven voor een closer look :)

Alleen ehm dan weet ik de numerieke positie van een string die ik zoek.

Probleem is alleen dat het origineel juist andersom is. De numerieke positie is bekend en ook de lengte van de string maar de inhoud is juist onbekend.

Met dat Mid kan je zo mooi uitlezen van op numerieke positie 70 en dan 15 karakters erna daar wil ik de informatie van hebben en die smijt ik in een variabele.

Het niet-grappige is dat ik nu juist meer van ASP kom te weten in plaats van PHP :?

Acties:
  • 0 Henk 'm!

  • nl2dav
  • Registratie: Juni 2001
  • Laatst online: 20-09 20:09
Oke, dat werkt opzich wel... Maar hoe krijg ik het dan voor elkaar dat als er bv.

abcdefghijklmnopqrstuvwxyz (tussen allerlei random karakters)

in die file staat en ik geef als "char" op; "abcde" dat hij dan aan de hand van de gevonden "abcde" regel de rest van het alfabet aanvult? Waarbij dus alleen bekend is hoelang de complete string is? (26) ...

Dat is mijn hoofdprobleem dus eigenlijk, ik weet het start en eindpunt van een string waar die naar moeten zoeken wel. Maar niet wat voor informatie dat bevat, dat wil ik juist weten.

Acties:
  • 0 Henk 'm!

  • nl2dav
  • Registratie: Juni 2001
  • Laatst online: 20-09 20:09
Laat ik mijn vraag even vereenvoudigen... Men neme een screendump van NOS teletekst als voorbeeld (704).

wo do vr za zo
zon % 90 80 70 70 60

Ik wil uit dit screendump bestand die 70 van Vrijdag hebben, zonder dat ik uberhaupt weet dat er bij Vrijdag 70 staat. Het enige wat ik weet is dat het om positie 27 en 28 gaat in een van de dumpregels uit dat txt bestand...

Nu gaat het bij ASP zo dat je de hele dump kan door-loopen totdat je "zon" tegenkomt. Dan weet je dat je de juiste regel te pakken hebt en kan je met MID aangeven dat je positie 27 t/m 28 ge-echo't wil hebben .

Dat principe... Maar dan in PHP ... :).. Gaat vast niet hetzelfde met soortgelijke instructies, maar via een omweg, maar welke omweg :)

Acties:
  • 0 Henk 'm!

  • robbert
  • Registratie: April 2002
  • Laatst online: 11:40
offtopic:
nl2day: gebruik je edit knop

Acties:
  • 0 Henk 'm!

  • SWfreak
  • Registratie: Juni 2001
  • Niet online
In dat geval. Doe een strpos() op "zon", krijg de positie daarvan, tel er 27 bij op en neem een substr vanaf die positie met lengte 2...

Acties:
  • 0 Henk 'm!

  • nl2dav
  • Registratie: Juni 2001
  • Laatst online: 20-09 20:09
SWfreak schreef op 18 februari 2003 @ 22:28:
In dat geval. Doe een strpos() op "zon", krijg de positie daarvan, tel er 27 bij op en neem een substr vanaf die positie met lengte 2...
Oke, dan heb ik de posities... Maar hoe zorg ik er dan voor dat ie die gevonden char op die posities echo't?

(offtopic: Sry robbert)

Acties:
  • 0 Henk 'm!

  • SWfreak
  • Registratie: Juni 2001
  • Niet online
Uitgaande van een PHP ouder dan versie 4.0b3
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$pos = strpos($line, "zon");
if( pos === false )
{
     //nothing found, next line
}
else
{
     //er staat "zon" op deze line
     //je moet dus kennelijk positie 27 en 28 van die line hebben (zero-based):
           echo( substr($line, 27, 2) );
    //als je het relatief aan "zon" moet hebben doe je:
           echo( substr($line, $pos + 27, 2) );
}

Acties:
  • 0 Henk 'm!

  • nl2dav
  • Registratie: Juni 2001
  • Laatst online: 20-09 20:09
Helemaal top!

Dat wilde ik weten _/-\o_

Kan ik de rest van de nacht weer door ;)
Pagina: 1