Hey,
Ik zou willen proberen om in het begin een basis pgn parser te maken.
Voor diegene die het niet weten, PGN is een standaard formaat voor schaakwedstrijden.
Mijn bedoeling is om in het begin alle speciale dingen te skippen.
Gewoon de zetten in een matrix krijgen.
Alles tussen haakjes (,{,} of ) en dollartekens met een cijfer erachter mogen weggelaten worden (in het begin).
Uiteindelijk wil ik dus een matrix waarin de eerste lijn het eerste item staat voor de zet van wit, het tweede item voor de zwarte zet. Daarna op de volgende lijn de tweede zet van beide,... .
Nu vroeg ik mij af hoe ik hier het beste aan kan beginnen in PHP.
Kan iemand mij hierbij een zetje geven?
Hierbij een voorbeeld van een moeilijke PGN file.
Code:1. d4 {Bulletin Ftacnik} d5 2. c4 e6 3. Nc3 c6 4. e3 Nf6 5. Nf3 Nbd7 6. Qc2 Bd6 7. g4 $5 Nxg4 (7... O-O 8. g5 Nh5 9. Bd2 $14 {Shirov-Thorhallsson Reykjavik 1992}) (7... dxc4 $1 8. g5 (8. e4 $2 e5 9. g5 exd4 10. Nxd4 Ng4 11. h3 Nge5 12. Be3 Nc5 $17 {Adams-Kasparow/Dortmund/1992}) (8. Bxc4 Nxg4 (8... b5 $5 9. Be2 Bb7 $10) 9. Rg1 h5 10. h3 Nh6 11. e4 (11. Rxg7 $2 Qf6 12. Rh7 Rxh7 13. Qxh7 Qxf3 14. Qxh6 $17) 11... Kf8 $13) 8... Nd5 9. Bxc4 b5 10. Be2 (10. Bf1 Bb7 11. e4 Nxc3 12. bxc3 e5 $15 {Shirov}) (10. Bxd5 cxd5 11. Nxb5 Qa5+ 12. Nc3 Ba6 $40 {Shirov}) 10... Bb7 (10... Nxc3 11. bxc3 Bb7 12. e4 e5 13. Be3 Qe7 14. a4 a6 15. O-O O-O $15 {Gomez-Baigorri Navarro/Zaragoza op/1992}) 11. e4 $6 Nf4 12. Bd1 e5 13. Nxe5 Bxe5 $1 14. dxe5 Nxe5 $17) (7... h6 8. Rg1 e5 9. cxd5 Nxd5 $13 {Shirov}) 8. Rg1 h5 {Diagram #} (8... Nxh2 9. Nxh2 (9. Ng5 $6 Nxf1 (9... h6 $2 10. Nxf7 Nf3+ 11. Kd1 Qf6 (11... Qe7 12. Nxh8 Nxg1 13. Qg6+ Kd8 14. Qxg1 $18 ) 12. Nxd6+ $18) 10. Kxf1 b6 $17) 9... Bxh2 10. Rxg7 Nf8 {/\ Ng6} (10... Qh4 $6 11. e4 $1 $14 Bf4 (11... Kf8 12. Rg2 (12. Bg5 $6 Qh5 13. Be2 Qh3 14. Bf1 $10) 12... Rg8 13. exd5 Rxg2 14. Bxg2 cxd5 15. cxd5 exd5 16. Nxd5 $16) (11... h6 { /\ Nf6} 12. Qe2 $1 Nf6 13. e5 $1 {/\ Rg4, >< Bh2}) 12. cxd5 (12. exd5 Bxc1 13. dxe6 Bh6 14. Rxf7 Nf8 15. Ne4 (15. d5 Bxe6 $1 16. dxe6 Nxe6 17. Qf5 O-O-O $1 $19) 15... Bxe6 16. Nd6+ Kd8 17. Nxb7+ $10) 12... Bxc1 13. Qxc1 exd5 14. Qe3 $1 $16) (10... Qc7 $2 {(10...Qc7! 11.Rxh7 Rxh7 12.Qxh7 Bd6 Shirov)} 11. f4 $16) ( 10... h6 $2 11. f4 Qh4+ 12. Qf2 Qxf2+ 13. Kxf2 Nf6 14. Rg2 $16 { Shabalov-Mephisto Risc/Neu Isenburg op/1992}) (10... h5 {Flear} 11. Bd2 (11. f4 Qh4+ 12. Qf2 Qxf2+ 13. Kxf2 h4 14. Ne2 $10) 11... Qf6 12. Rg2 Bd6 13. O-O-O $13 ) 11. Rg2 (11. f4 $6 Qh4+ 12. Qf2 Qxf2+ 13. Kxf2 Ng6 14. Kg2 Kf8 15. Rxg6 hxg6 $15) 11... Bc7 (11... Bd6 12. Bd2 Bd7 13. O-O-O a6 14. e4 Rc8 15. Re1 Be7 16. f4 b5 17. c5 dxe4 18. Nxe4 f5 19. Nd6+ Bxd6 20. cxd6 Kf7 $13 {D. Garcia-Illescas/Leon/1992}) 12. e4 Ng6 13. Bg5 f6 14. Bh6 Nh4 15. O-O-O Nxg2 16. Bxg2 dxc4 17. Bf3 $44 {Djurhuus-Gronn/Oslo/1992/CBM 30}) 9. h3 Nh6 10. e4 ( 10. Rxg7 $4 Qf6 11. Rh7 Rxh7 12. Qxh7 Nf8 13. Qc2 Qxf3 $19) (10. Bd2 $5) 10... dxe4 11. Nxe4 Bb4+ 12. Bd2 Bxd2+ 13. Qxd2 $44 Nf6 14. Nc3 Nf5 15. O-O-O Kf8 16. Bd3 Bd7 17. Ne5 Be8 18. Ne2 Rh7 19. Bxf5 exf5 20. Ng3 Ne4 (20... g6 {Ftacnik} 21. Nxf5 gxf5 22. Qg5 {/\ Rd3,Rf3,Rxf5}) 21. Nxe4 fxe4 22. Qf4 Kg8 (22... Qf6 { Ftacnik} 23. Qxe4 Kg8 24. f4 $16) 23. Qxe4 Qe7 24. Qf4 Rd8 25. Rge1 Qd6 26. d5 Qh6 27. Qxh6 Rxh6 28. dxc6 Rxd1+ 29. Rxd1 Bxc6 30. Rd8+ Kh7 31. Rf8 (31. Nxf7 { Ftacnik} Rf6 32. Ng5+ Kg6 33. h4 Rxf2 $15) 31... Rf6 (31... f6 $2 {Ftacnik} 32. Nf7 Rg6 33. Rh8#) 32. Rxf7 Bg2 33. h4 Rxf7 34. Nxf7 Kg6 35. Nd6 Kf6 36. Kd2 g5 37. hxg5+ Kxg5 38. Ke3 Kg4 39. Nf7 h4 40. Ne5+ Kf5 41. Nf3 Kg4 42. Nd4 Kg5 43. b4 h3 44. Nf3+ Kf5 45. b5 b6 46. Nh2 Ke5 47. f3 Kf5 48. a3 Ke5 49. a4 Bh1 50. Ng4+ Kd6 51. Nf2 Bg2 52. Ne4+ Ke5 53. Kf2 Bxf3 $2 (53... Ke6) (53... Ke6 $16 { Ftacnik}) 54. Kxf3 h2 55. Kg2 Kxe4 56. c5 Kd5 (56... bxc5 {Ftacnik} 57. a5 Kd5 (57... c4 58. b6 $18) 58. a6 $1 c4 59. b6 c3 60. bxa7 h1=Q+ 61. Kxh1 c2 62. a8=Q+ $18) 57. c6 Kd6 58. Kxh2 Kc7 59. Kg3 Kd6 60. Kf4 Ke6 61. Ke4 Kd6 1-0
- Help PGN Parser PHP
-
10-04-2012, 09:45 #1
- Berichten
- 156
- Lid sinds
- 14 Jaar
Help PGN Parser PHP
-
-
10-04-2012, 10:13 #2
WebsiteFavourite
- Berichten
- 37
- Lid sinds
- 13 Jaar
Re: Help PGN Parser PHP
Denk dat je hier wel wat aan hebt: http://www.dhtmlgoodies.com/index.ht...pt=dhtml-chess
-
10-04-2012, 10:26 #3
- Berichten
- 156
- Lid sinds
- 14 Jaar
Re: Help PGN Parser PHP
Ja, ik was deze ook al eens tegengekomen.
Kan je deze eigenlijk makkelijk gebruiken op een wordpress site?
Thomas
-
10-04-2012, 11:14 #4
- Berichten
- 158
- Lid sinds
- 13 Jaar
Re: Help PGN Parser PHP
Ik zou alle tekens die je er niet in wilt hebben str_replacen, uiteindelijk een explode doen zodat je een array hebt denk ik. Vanuit die array kan je dan verder werken
-
10-04-2012, 12:08 #5
- Berichten
- 156
- Lid sinds
- 14 Jaar
Re: Help PGN Parser PHP
1. witteZet zwarteZet 2. witteZet (tekst(nog meer tekst) tekst gaat voort) zwarteZet
Alles tussen de haakjes moet dus weg of in een andere variable opgeslagen.
Thomas
-
10-04-2012, 12:13 #6
WebsiteFavourite
- Berichten
- 37
- Lid sinds
- 13 Jaar
Re: Help PGN Parser PHP
Ik denk dat het gebruik van Regular Expressions de beste en netste oplossing is in dit geval. Hier staat, dan wel in f# vrij uitgebreid uitgelegd hoe je dat zou kunnen doen: http://blogs.msdn.com/b/chrsmith/arc...rser-in-f.aspx
-
10-04-2012, 14:13 #7
- Berichten
- 158
- Lid sinds
- 13 Jaar
Re: Help PGN Parser PHP
Je kan het ook met preg_match doen ja zoals Kilian hierboven zei, alleen heeft hij het over ASP en wij over PHP
-
10-04-2012, 22:02 #8
- Berichten
- 1.483
- Lid sinds
- 16 Jaar
-
10-04-2012, 22:30 #9
- Berichten
- 158
- Lid sinds
- 13 Jaar
-
13-04-2012, 11:50 #10
- Berichten
- 156
- Lid sinds
- 14 Jaar
Re: Help PGN Parser PHP
OK, ik ben nu al een stuk verder.
Maar nu heb ik een vraagje ivm arrays.
Ik zou graag een array/matrix maken van welke stukken waar op het schaakbord staan.
Momenteel heb ik het zo opgebouwd.
Code:$fenMatrix = array( 8 => array( 'a' => 'r', 'b' => 'n', 'c' => 'b', 'd' => 'q', 'e' => 'k', 'f' => 'b', 'g' => 'n', 'h' => 'r' ), 7 => array( 'a' => 'p', 'b' => 'p', 'c' => 'p', 'd' => 'p', 'e' => 'p', 'f' => 'p', 'g' => 'p', 'h' => 'p' ), 6 => array( 'a' => 0, 'b' => 0, 'c' => 0, 'd' => 0, 'e' => 0, 'f' => 0, 'g' => 0, 'h' => 0 ),
Ik had dit gedaan om het gemakkelijk te kunnen uitlezen van toplinks tot rechtsonder op het schaakbord.
Maar is er eigenlijk een snelle manier om het bijvoorbeeld in 1 array op te slagen en elke waarde een key mee te geven die gelijk is aan het veld op het schaakbord? Of moet ik ze echt allemaal 1 voor 1 aanmaken?
array["a1"=>"R","a2"=>"B",...] ?
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic