[PHP]Tellen hoe vaak ':+' voorkomt

Pagina: 1
Acties:
  • 286 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Glashelder
  • Registratie: September 2002
  • Niet online

Glashelder

Anti Android

Topicstarter
Ik chat vaak met een (internet)vriend via MSN (Gromba, hij loopt hier ook rond). Ik vroeg me zo af hoe vaak wij de [norml]:+[/] smilie gebruiken in onze gesprekken. Die gebruiken wij nogal veel namelijk. Het is niet te doen om dit met de hand te doen, dus ik had even snel een script geschreven in PHP:
PHP:
1
2
3
4
5
6
7
8
9
10
11
if(isset($HTTP_POST_FILES['mijn_bestand']['tmp_name']))

    {

    $a = file_get_contents($HTTP_POST_FILES['mijn_bestand']['tmp_name']);
    $b = split(":+", $a);
    $c = count($b)-1;

    echo "Count-> "  .$c;
    
}

Zoals je ziet; ik upload het bestand en lees hier vervolgens de waarde van uit om deze vervolgens te splitten op [norml]:+[/]. Het uitlezen van de inhoud van het bestand gaat overigens probleemloos.

Het probleem. Hij lijkt alleen goed te tellen zolang het om niet teveel tekens gaat. Ik heb het volledige log in 1 bestand gezet. Het PHP script geeft aan dat het om 114.313 keer [norml]:+[/] gaat. Als ik het volgens hetzelfde concept in VB6 gebruik:
Visual Basic .NET:
1
2
3
Private Sub cmdTel_Click()
      MsgBox UBound(Split(Text1.Text, ":+"))
End Sub

Nu komt er 11.704 uit. Hoe kan dit?

[ Voor 22% gewijzigd door Glashelder op 03-05-2004 01:46 ]

PV 4915wp op oost, 2680 wp op west, 1900 wp op zuid. pvoutput - AUX 8 kW bi bloc


Acties:
  • 0 Henk 'm!

  • Gromba
  • Registratie: Mei 2003
  • Laatst online: 11-09 22:29

Gromba

Tijdreiziger @ 1sec/sec

Overigens komt er bij Word en een ander programma ook 11.704 uit

Gromba.nl


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 16:28
split splitst een string op basis van een reguliere expressie. Het eerste argument is geen string waarop gesplitst wordt, maar een patroon. De + heeft een speciale betekenis en matcht het voorgaande symbool 1 of meer keer. Met split(":+",$a) splits je de string dus op strings als ":", "::", ":::", etc. Waarschijnlijk betekent dat dat je alle regels met "Harry zegt: ..." ook splitst, net als zo'n beetje alle smileys waar een : in voor komt.

Als je alleen op die string wilt splitsen en verder niets met reguliere expressies te maken wil hebbe, kun je het beste gewoon explode gebruiken. Dat is nog een stuk efficiënter ook.

[ Voor 15% gewijzigd door Soultaker op 03-05-2004 01:51 ]


Acties:
  • 0 Henk 'm!

  • Glashelder
  • Registratie: September 2002
  • Niet online

Glashelder

Anti Android

Topicstarter
Ik werk teveel met VB6 de laatste tijd. Ik wilde explode gebruiken ja, maar ik kon niet op de functienaam komen :P

PV 4915wp op oost, 2680 wp op west, 1900 wp op zuid. pvoutput - AUX 8 kW bi bloc


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 16:28
Explode klinkt ook leuker, vind ik. ;)

Acties:
  • 0 Henk 'm!

  • Glashelder
  • Registratie: September 2002
  • Niet online

Glashelder

Anti Android

Topicstarter
Ach, het is al laat. Tijd om GoT te verlaten en naar FOK! te gaan :P

PV 4915wp op oost, 2680 wp op west, 1900 wp op zuid. pvoutput - AUX 8 kW bi bloc


Acties:
  • 0 Henk 'm!

  • Twee Dee
  • Registratie: Juli 2002
  • Laatst online: 14:48

Twee Dee

Morgen weer een ondertitel.

Vervelende vraag misschien, maar dit zou toch snel opvallen als je even de moeite nam om te gaan debuggen?

Het lijkt me niet echt moeilijk om een aantal elementen in de array te bekijken en vervolgens te kijken naar de originele tekst om de oorzaak te achterhalen.

Luister nou gewoon naar me, dat voorkomt dat ik later "zie je wel" moet zeggen.


Acties:
  • 0 Henk 'm!

  • Gromba
  • Registratie: Mei 2003
  • Laatst online: 11-09 22:29

Gromba

Tijdreiziger @ 1sec/sec

Twee Dee schreef op 03 mei 2004 @ 01:59:
Vervelende vraag misschien, maar dit zou toch snel opvallen als je even de moeite nam om te gaan debuggen?

Het lijkt me niet echt moeilijk om een aantal elementen in de array te bekijken en vervolgens te kijken naar de originele tekst om de oorzaak te achterhalen.
Hallo! Kijk eens hoe laat het is :Y)

Gromba.nl


Acties:
  • 0 Henk 'm!

  • Glashelder
  • Registratie: September 2002
  • Niet online

Glashelder

Anti Android

Topicstarter
Ik moet me gewoon niet met dit soort zaken bezighouden rond dit tijdstip. Het bekijken van de elementen is namelijk niet eens in me opgekomen. Stom stom stom |:( |:(

PV 4915wp op oost, 2680 wp op west, 1900 wp op zuid. pvoutput - AUX 8 kW bi bloc


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Twee Dee schreef op 03 mei 2004 @ 01:59:
Vervelende vraag misschien, maar dit zou toch snel opvallen als je even de moeite nam om te gaan debuggen?

Het lijkt me niet echt moeilijk om een aantal elementen in de array te bekijken en vervolgens te kijken naar de originele tekst om de oorzaak te achterhalen.
Ehm, dit is gewoon iets wat je weet, of juist niet weet. Als je niet weet wat regular expressions inhouden omdat je denkt er ook niet mee te werken, en je gebruikt intussen wel split, dan kan ik me het probleem van TS goed voorstellen. Als jij verwacht dat letterlijk naar jouw string gezocht wordt dan verwacht je niet dat je op het aantal voorkomens van een deel van die string moet gaan zoeken. :X

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 16:28
De fout is inderdaad lastig te zien als je niet weet hoe split en/of reguliere expressies werken, maar de handleiding over split geeft wel een hoop toelichting. Het lijkt me niet onmogelijk dat je na het lezen van die pagina tot de conclusie komt dat het zoeken met een patroon niet hetzelfde is als het zoeken naar een simpele string; juist als jouw string zich niet gedraagt zoals je verwacht.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:29

crisp

Devver

Pixelated

Je kan het zo gek niet verzinnen, of PHP heeft er wel een functie voor: substr_count ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • Alex
  • Registratie: Juli 2001
  • Laatst online: 20-08 21:38
Desnoods pak je nog en preg_match en tel je de grote van de resultaat array... Of was dat nou preg_match_all?

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart


Acties:
  • 0 Henk 'm!

  • MatHack
  • Registratie: Oktober 2001
  • Niet online

MatHack

Dev by day, Gamer by night

preg_match_all geeft het aantal keer dat het pattern gematched heeft ook terug als resultaat, maar ik zou gewoon voor substr_count gaan, aangezien het maar een simpele en statische string is.

There's no place like 127.0.0.1

Pagina: 1