Regular Expressions in Java (2)
|
|
|
- Bert van der Velde
- 8 jaren geleden
- Aantal bezoeken:
Transcriptie
1 In het eerste deel van deze serie (Java Magazine nr. 1, april 2006) lieten Jesse Houwing en Peter van den Berkmortel zien dat je met Reguliere Expressies veel code kunt besparen. We zagen onder andere hoe een RegEx wordt opgebouwd en waar deze uit bestaat. We bekeken Character Classes, Quantifiers en Boundaries. In dit tweede artikel zullen de auteurs ingaan op look-arounds, switches, Character Classes voor Unicode ondersteuning en het vervangen van tekst. achtergrond Regular Expressions in Java (2) Herkenning van patronen In het vorige artikel zagen we dat een word boundary een match maakt tussen een woord en de witruimte tussen woorden, maar zonder dat er daadwerkelijk karakters gematcht worden. Een word boundary is een voorbeeld van look-around. Er zijn vier varianten van lookaround. Look-ahead kijkt vooruit, look-behind kijkt terug. Beide kunnen bovendien zowel positief als negatief zijn. Look-arounds matchen geen karakters. In plaats daarvan matchen ze op een positie in de tekst. Een word-boundary bijvoorbeeld matcht op de positie waar een woord begint of eindigt (in RegEx termen: de overgang tussen een niet-woord karakter en een woordkarakter of vice versa). LOOK-AROUNDS In een RegEx zien look-arounds er als volgt uit: (?=..) Positive look-ahead (?!..) Negative look-ahead (?<=..) Positive look-behind (?<!..) Negative look-behind Hoe deze RegEx-elementen zich gedragen kan het beste met een voorbeeld worden duidelijk gemaakt. // Voorbeeld Quantifiers // Matches staan tussen kleiner en // groter dan tekens. Input: Dit is een mooie zin, zeg! Pattern: (?=\w).{3} Matches: <Dit> <is > <een> <moo> <ie > <zin> <zeg> Pattern: (?!\w).{3} Matches: < is> < ee> < mo> < zi> <, z> Pattern: (?<=\w).{3} Matches: <it > <s e> <en > <ooi> <e z> <in,> <eg!> Pattern: (?<!\w).{3} Matches: <Dit> <is > <een> <moo> <zin> < ze> // Postcode voorbeeld met // negative look-ahead Pattern: (?!0)\d{4}[ ]?[A-Z]{2} Uitleg: het eerste karakter mag geen nul zijn! Bij het positive look-ahead voorbeeld zien we dat een match altijd begint met een woordkarakter. Look-ahead kijkt dus vooruit. Bij het negative look-ahead voorbeeld zien we dat een match juist begint met een niet woord karakter. Negative betekent dus dat er juist geen match gemaakt kan worden met de RegEx tussen de ronde haken. Bij het positive look-behind voorbeeld zien we dat een match altijd moet worden voorafgegaan door» Software Release Magazine 4» Java Magazine 2» juni
2 een woord karakter. Look-behind kijkt dus terug. Bij het negative look-behind voorbeeld zien we dat een match juist moet worden voorafgegaan door een niet woord karakter. Een word boundary kan nu als volgt gedefinieerd worden met look-arounds: ((?<=\w)(?!\w) (?<!\ w)(?=\w)). In het eerste deel ((?<=\w)(?!\w)) kijken we of er voor de huidige positie een woordkarakter staat (met look-behind) en na de huidige positie een niet woordkarakter (met look-ahead). In het tweede deel ((?<!\ w)(?=\w)) is dit juist andersom. SWITCHES Met switches kan het gedrag van een RegEx worden aangepast. Er zijn twee manieren om de switches aan of uit te zetten: als extra parameter bij het aanmaken van het Pattern (overloaded compile methode), of via een embedded flag in de RegEx zelf. De eerste methode is altijd globaal, dus geldig voor het hele Pattern. Een embedded flag kan zowel globaal zijn, als voor een specifiek subdeel van de RegEx. De volgende switches zijn beschikbaar: CASE_INSENSITIVE (?i) Case onafhankelijk matchen van karakters. Gaat uit van de US-ASCII charset. UNICODE_CASE (?u) Bij case onafhankelijk matchen wordt uitgegaan van de Unicode standaard, in plaats van US-ASCII. COMMENTS (?x) Witruimte en commentaar in de RegEx wordt genegeerd. Commentaar begint met een #-teken en eindigt bij het einde van een regel. MULTILINE (?m) Zorgt ervoor dat ^ en $ (ook) matchen op een regel einde (line terminator) en niet alleen op het begin dan wel einde van de input. UNIX_LINES (?d) Alleen de unix regel einde (\n) wordt herkent als regel einde (line terminator). LITERAL <geen> Het Pattern wordt als een letterlijke karakter reeks gezien. Speciale karakters hebben geen betekenis. DOTALL (?s) Default matcht een punt (.) alles behalve de regel einde (line terminator). In dotall mode wordt met een punt (zie Character Classes in het eerste artikel) alles gematcht (dus ook een regel einde). In Perl heet deze mode de single-line mode. // Voorbeeld Switches Pattern pattern = Pattern.compile( [1-9]\\d{3}[ ]?[A-Z]{2}, CASE_INSENSITIVE); // Matches: postcodes met grote en // kleine letters! // Idem, maar nu embedded: Pattern: (?i)[1-9]\d{3}[ ]?[A-Z]{2} // Idem, maar niet globaal: Pattern: [1-9]\d{3}[ ]?(?i:[a-z]{2}) In de niet-globale versie van de switch, is een dubbele punt noodzakelijk om aan te geven waar de switch(es) eindigen en de RegEx begint. Switches kunnen ook uitgezet worden, maar alleen in de embedded variant. Er moet dan een minteken voor de switch gezet worden. // Voorbeeld Switches uitzetten: Pattern: (?i-u)[1-9]\d{3}[ ]?[A-Z]{2} // Matches: postcodes met grote en // kleine letters, maar er wordt // uitgegaan van de US-ASCII char- // set (en niet van Unicode). QUOTATION Quotation wordt gebruikt om een reeks karakters automatisch te escapen. Speciale karakters zoals de accolade en de rechte blokhaak worden dan letterlijk genomen. \Q Begin van quotation \E Einde van quotation // Voorbeeld Quotation: Pattern: \w\q{3}\e Matches: A{3}, maar niet B{5}, AAA UNICODE De volgende Character Classes zijn specifiek voor de ondersteuning van Unicode karakters: \p{l} Een Unicode karakter. \p{in<blok>} Een Unicode karakter in blok Blok. \p{ingreek} is dus een Griekse letter. \P{In<Blok>} Een Unicode karakter die niet in blok Blok 22» Java Magazine 2» juni 2006» Software Release Magazine 4
3 voorkomt. \p{l<categorie>} Een Unicode karakter in categorie Categorie. \ p{lu} is dus een uppercase karakter. \p{sc} Currency symbolen ($,, ). \p{sm} Math symbolen (, ) De Unicode-blokken zijn terug te vinden in de Java- API ( /docs/api/java/lang/ Character.UnicodeBlock.html). De verschillende blokken zijn daar gedefinieerd als constanten. De meegegeven bloknaam wordt bepaald via de forname methode. De categorieën komen overeen met de java.lang. Character classes, die ook nog via hun eigen classes te benaderen zijn: \p{java<method>} Unicode karakters conform java.lang.character. ismethod() methode. Voorbeelden van dergelijke methodes zijn: islower- Case(), isuppercase(), isletter(). De categorie is telkens de derde letter van de methodenaam. DATUM CONTROLE Hoe kan RegEx nu het beste gebruikt worden om, bijvoorbeeld, een datum controle te doen? Je kunt eenvoudig het patroon (twee cijfers, scheidingsteken, twee cijfers, scheidingsteken en vier cijfers) controleren. Maar dat levert een controle op met een beperkte functionaliteit. We willen een controle die de gehele datum valideert. Hoever kunnen we daarmee komen met RegEx? Laten we beginnen met de RegEx om het datum patroon te controleren. Dat ziet er als volgt uit: \d{2}([-/])\ d{2}\1\d{4}. We staan voor het scheidingsteken zowel een minteken als een schuine streep toe. Echter, het tweede scheidingsteken moet wel hetzelfde teken zijn als het eerste scheidingsteken! Dat dwingen we af door het eerste scheidingsteken in een capture-groep op te nemen en het tweede scheidingsteken via een back-reference te matchen. Met dit patroon wordt ook geaccepteerd. Dat willen we natuurlijk niet. De dag dient maximaal 31 te zijn. De RegEx hiervoor ziet er zo uit: (?!00)(?:[0-2]\d) (?:3[01]). De look-ahead zorgt ervoor dat 00 geen geldige waarde is. Voor de rest zijn 01 t/m 29 geldige waarden. Of 30 en 31. De maand dient maximaal 12 te zijn. De RegEx hiervoor ziet er zo uit: (?:0[1-9]) (?:1[012]). Naast dag 00 zijn er nog andere verboden combinaties. Die kunnen we ook uitsluiten met negative lookahead: (?!31.(?:0[2469]) (?:11))(?!30.02). Aangezien we met negative look-ahead geen karakters matchen, kunnen we meerdere negative lookaheads achter elkaar plaatsen, zonder alternation te Bij een postive look-ahead zien we dat een match altijd begint met een woordkarakter hoeven toepassen. Nu blijft alleen 29 februari over als mogelijke verboden combinatie. Maar die combinatie is alleen verboden als het geen schrikkeljaar is. Kunnen we met RegEx controleren of een jaar een schrikkeljaar is? Of liever nog, of het geen schrikkeljaar is? Ja, dat kan, met een opsomming van de verboden combinaties: (?!29.02.(?:\d{3}[13579]) (?:\ d{2}(?!00)[02468][026]) (?:\ d{2}[13579][048]) (?:[02468][026]00) (?:[13579][048]00)). Dit stukje RegEx is vooral lang, omdat RegEx zich niet zo goed leent om min of meer arbitraire data te matchen. Hoe ziet de totale RegEx er nu uit? (?!00) (?!31.(?:0[2469]) (?:11)) (?!30.02) (?! (?:\d{3}[13579]) (?:\d{2}(?!00)[02468][026]) (?:\d{2}[13579][048]) (?:[02468][026]00) (?:[13579][048]00) ) (?:[0-2]\d) (?:3[01]) ([-/]) (?:0[1-9]) (?:1[012]) \1 \d{4} Om de leesbaarheid te vergroten is extra witruimte toegevoegd. Deze moet natuurlijk weggelaten worden (of de COMMENTS switch moet worden aangezet). Het voorbeeld maakt duidelijk dat je niet alles in één keer kan en wil controleren. Maar met look-around hoeft dat ook niet. In plaats daarvan zoek je naar het meest spe-» Software Release Magazine 4» Java Magazine 2» juni
4 cifieke patroon waar alles nog onder valt en benoem dan de afwijkingen in positieve of negatieve zin. Als dat lastig wordt, maak dan gebruik van alternation om de verschillende alternatieven op te noemen. In de controle op schrikkeljaar zien we dat we zaken toch nog redelijk kunnen samenvatten. Uiteindelijk hadden we slechts vijf verschillende alternatieven nodig om het schrikkeljaar te controleren. ZOEK EN VERVANG Een laatste toepassing voor Reguliere Expressies is het zoeken en vervangen van patronen in tekst. De String klasse biedt enkel de Over het algemeen is het beter om direct gebruik te maken van Pattern en Matcher, omdat je dan gebruik kan maken van een precompiled Pattern mogelijkheid om een opgegeven set karakters te vervangen met een ander karakter en de mogelijkheid om een tekst te vervangen met een ander stuk tekst. Geavanceerde controles of het opgeven van een patroon dat vervangen moet worden, waren tot voor versie 1.4 van Java nog niet zonder meer mogelijk. Met de komst van Reguliere Expressies in Java is de String klasse uitgebreid met de mogelijkheid om tekst te vervangen op basis van reguliere expressies. De String klasse maakt daarbij gebruik van een Matcher om tekst te vervangen. Over het algemeen is het beter om direct gebruik te maken van Pattern en Matcher, omdat je dan gebruik kan maken van een precompiled Pattern. De performance daarvan is aanmerkelijk beter. Met het postcodevoorbeeld onder Java 5 is het verschil gemiddeld een factor 7! In principe zijn er vijf verschillende manieren om stukken tekst te manipuleren door middel van reguliere expressies: 1. Het zoeken van een vaste tekst en deze vervangen door een andere tekst. 2. Het zoeken van een patroon en dit vervangen door een andere tekst. 3. Het zoeken van een of meerdere (deel) patronen en deze invoegen in een template. 4. Het zoeken van een deelpatroon en dit verwijderen uit de tekst. 5. Het zoeken van een (deel)patroon en dit via een zelf geprogrammeerd algoritme vervangen door iets anders. De eerste methode is vrijwel identiek aan de String. replace() methode. // Vervang alle voorkomens van // foo door bar : String text = foo test foo ; text = text.replace( foo, bar ); // Met Pattern/Matcher wordt dit: String text = foo test foo ; Matcher m = Pattern.compile( foo ).matcher(text); text = m.replaceall( bar ); // De RegEx vervanging kan ook // rechtstreeks op String: String text = foo test foo ; text = text.replaceall( foo, bar ); Dit biedt weinig voordelen over de standaard String.replace() methode. Performance is vergelijkbaar. Bij veel vervangingen is Pattern/Matcher ongeveer 10 procent sneller. Een iets uitgebreider scenario wordt echter niet ondersteund door de standaard String.replace() methode. Dit is waar RegEx zijn kracht kan tonen. // Vervang foo met bar, maar // alleen als foo voorafgegaan // wordt door een getal String text = 123foo test foo ; text = text.replaceall( (?<=[0-9])foo, bar ); Er wordt hier gebruik gemaakt van een positive look behind om te controleren of foo voorafgegaan wordt door een nummer. Alleen als dat het geval is wordt foo vervangen door bar. Een ander veel voorkomend gebruik van vervangen door middel van RegEx, is het invoegen van gevonden deelresultaten met een template. Neem het voorbeeld van de postcode. De expressie die we gebruiken matcht alle postcodes, ongeacht of ze een spatie bevatten. Als je alle postcodes in een tekst wilt opmaken zonder spaties, dan is dat een relatief moeilijke klus zonder reguliere expressies. We passen de expressie voor de postcode iets aan: \b([1-9][0-9]{3})[ ]([A-Z]{2})\b. Zoals je kunt zien zijn er twee capturing groups toegevoegd. Tevens is de spatie niet langer optioneel, we 24» Java Magazine 2» juni 2006» Software Release Magazine 4
5 willen immers alleen de postcodes aanpassen die nog niet voldoen aan ons gewenste formaat. Vervolgens schrijven we een template waar we ons resultaat in willen plaatsen: $1$2. Met één methodeaanroep kunnen we nu alle spaties uit de postcodes in een tekst verwijderen: String text = 1212 MZ ; String pattern = \\b([1-9][0-9]{3})[ ]([A- Z]{2})\\b ; String template = $1$2 ; String result = text.replaceall( pattern, template); // Nu met Pattern/Matcher Pattern p = Pattern.compile(pattern); Matcher m = p.matcher(text); result = m.replaceall(template); Elke capture group krijgt een nummer toegekend. 0 is de complete match, 1 is de eerste group en zo verder. Op deze manier kunnen maximaal 9 capture groupen worden geadresseerd. Om het teken $ op te kunnen nemen in de uitvoer moet deze worden ge-escapet met een backslash, dus: \$. Samenvattend: $0 De gehele match. $1 De eerste capture group. $2 De tweede capture group, etc. $9 Negende en laatste capture group. \$ Het dollar teken. Let op: aangezien de backslash ook weer ge-escapet moet worden als je deze opneemt in een String, ziet het dollarteken er dus zo uit: \\$. Een andere methode om de spatie weg te halen is om niet de tekst te selecteren die we willen bewaren, maar juist te selecteren wat we weg willen halen en dit te vervangen met een lege tekst. String text = 1212 MZ ; String pattern = (?<=\\b[1-9] + [0-9]{3})[ ](?=[A-Z]{2}\\b) ; String result = text.replaceall(pattern, ); Hier wordt dus met look-arounds de spatie geselecteerd die verwijderd moet worden (in plaats van alle spaties). De look-behind controleert de cijfers, de lookahead de letters van de postcode. De laatste mogelijkheid, een zelf geprogrammeerd algoritme gebruiken, is de krachtigste. Hiermee is het mogelijk om gevonden resultaten door middel van je eigen programmacode te manipuleren. In de vervanging kun je gebruik maken van templates of een functie schrijven waarin je vervolgens weer een nieuwe RegEx gebruikt! We tonen hiervan een voorbeeld, waarin alle postcodes in een tekst worden opgemaakt zonder spaties en met de letters uppercase. Met dit voorbeeld als leidraad kun je zelf experimenteren om je eigen zoek en vervang functionaliteit te schrijven: // Voorbeeld Postcode Manipulatie String formatpc(string input) { Pattern p = Pattern.compile( (?:i)\\b([1-9][0-9]{3})\\s* + ([A-Z]{2})\\b ); } Uiteindelijk hadden we slechts vijf verschillende alternatieven nodig om het schrikkeljaar te controleren StringBuffer sb = new StringBuffer(); Matcher m = p.matcher(input); while (m.find()) { m.appendreplacement(sb, $1 + m.group(2).touppercase()); } matcher.appendtail(sb); return sb.tostring(); Als je zelf aan de slag gaat met RegEx is het raadzaam om, zeker in het begin, eerst op internet te zoeken naar de RegEx die je nodig hebt. Mogelijk dat deze niet genoeg controleert. Maar vanuit die basis kun je zelf de RegEx verbeteren. Bovendien heeft het niet veel zin om telkens het wiel zelf uit te vinden...» Software Release Magazine 4» Java Magazine 2» juni
6 Het is belangrijk om een expressie die je van anderen kopieert, uitgebreid te testen om te controleren of hij precies doet wat jij wilt! Gratis koffiepakket bij aanstelling! Referenties JavaDoc UnicodeBlock.html Alternatieve RegEx implementaties RegEx bibliotheken & tutorials RegEx testers plugin_details. jsp?id= Het Quion Smeermiddel Zonder koffie zou het allemaal niet zo soepel gaan bij Quion. En dan hebben we het niet over onze mensen die s ochtends zonder cafeïne niet op gang komen. Nee, we doelen op onze hypotheekprocessen die zonder Java volledig stil zouden vallen. Deze programmeertaal dankt zijn naam aan de koffie die de uitvinders dagelijks dronken. Met als resultaat dat Java Beans er nu voor zorgen dat alle hypotheekprocessen voor onze klanten, zoals banken en verzekeringsmaatschappijen, gesmeerd verlopen. Denk jij bij Java ook eerder aan ICT dan aan koffie? Dan komen we graag eens met je in gesprek. En als blijkt dat jij de Java professional bent die we zoeken, belonen we je aanstelling met een uitgebreid Java koffiepakket. Java Ontwikkelaars m/v Als Java Ontwikkelaar lever je een belangrijke bijdrage aan het vernieuwen en verbeteren van onze zelfgebouwde hypotheekapplicaties. Je ontwikkelt en wijzigt technische ontwerpen en bouwt deze uit tot goedwerkende functionaliteiten binnen complexe applicaties. Ook na realisatie ben je verantwoordelijk voor onderhoud, het toetsen met eindgebruikers en het uitvoeren van systeemtesten. Wij zijn op zoek naar innovatieve specialisten op het gebied van Java met minimaal drie jaar relevante werkervaring en bij voorkeur ook kennis van Oracle, BPEL en SOA. Het Quion aanbod Quion is op zoek naar echte toppers in hun vak. Omgekeerd mag je ook van ons veel verwachten. Een goed pakket arbeidsvoorwaarden en een prettige, collegiale cultuur met veel ruimte voor initiatieven en persoonlijke groei. Niet voor niets besteden we veel aandacht aan opleidingsmogelijkheden. Wat de werkplek betreft, kun je rekenen op een modern kantoor in Brainpark II te Rotterdam. Kijk voor meer informatie op of bel Solliciteren? Stuur dan een brief met cv bij voorkeur per naar: [email protected]. Of per post naar: Quion Groep BV, t.a.v. Tara Dik, Postbus 2936, 3000 CX Rotterdam. Jesse Houwing ( is werkzaam als Microsoft.Net Senior Application engineer bij Sogeti Nederland BV. Hij is de maker van de RegEx Fundamentals cursus die binnen Sogeti gegeven wordt. Peter van den Berkmortel ( peter.vanden.berkmortel@sogeti. nl) is werkzaam als Technisch Architect in het Java Delivery Center van Sogeti. Hij is onder andere Certified JBoss Developer. Quion is een onafhankelijke onderneming, gericht op de volledige begeleiding van hypotheken voor financiële instellingen. Met ruim 250 collega's zijn wij actief voor een groot aantal gerenommeerde klanten. Wij beschikken over de daarvoor benodigde systemen en expertise, maar ook over de noodzakelijke kenmerken als gedrevenheid en betrokkenheid. Dat stelt ons in staat om onze klanten dé gewenste oplossingen te bieden. Werken bij Quion betekent dan ook: werken op een plek waar grenzen worden verlegd. De boeiendste werkplek in de Nederlandse hypotheekmarkt. 26» Java Magazine 2» juni 2006» Software Release Magazine 4
Regular Expressions in Java (1)
Sinds versie 1.4 zijn Regular Expressions (kortweg RegEx) onderdeel van Java. Deze kunnen veel code terugbrengen tot slechts enkele statements. In het eerste deel uit een serie van twee artikelen van Jesse
Reguliere Expressies
Reguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord) die, volgens bepaalde syntaxregels, een verzameling strings (een taal) beschrijft Reguliere expressies worden
Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.
Algemeen C# Variabele Een variabele is een willekeurige waarde die word opgeslagen. Een variabele heeft altijd een datetype ( De soort waarde die een variabele bevat). Datatypes Een datatype is de sort
maplev 2010/7/12 14:02 page 15 #17 Nadere detaillering van een aantal zaken van Module 1 Geen,, " ", \, save, read, protect, unprotect
maplev 2010/7/12 14:02 page 15 #17 Module 2 Het gebruik van Maple, vervolg Onderwerp Voorkennis Expressies Nadere detaillering van een aantal zaken van Module 1 Geen,, " ", \, save, read, protect, unprotect
Opgaven. Python Assessment
Opgaven Python Assessment Nijmegen - Utrecht www.atcomputing.nl Copyright 2015,2016 Versie: 1a Inleiding Met dit assessment kun je controleren of je voldoende parate kennis over Python hebt om te beginnen
Programmeren in Java les 3
4 september 2015 Deze les korte herhaling vorige week loops methodes Variabelen Soorten variabelen in Java: integer: een geheel getal, bijv. 1,2,3,4 float: een gebroken getal, bijv. 3.1415 double: een
Vakgroep CW KAHO Sint-Lieven
Vakgroep CW KAHO Sint-Lieven Objecten Programmeren voor de Sport: Een inleiding tot JAVA objecten Wetenschapsweek 20 November 2012 Tony Wauters en Tim Vermeulen [email protected] en [email protected]
Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI
Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI Vrijdag 22 januari 2010 Toelichting Dit is een open boek tentamen. Communicatie en het gebruik van hulpmiddelen zijn niet toegestaan.
ACCEPETEREN RESERVERING
E-mail Templates In i-reserve is het mogelijk gestandaardiseerde e-mails te verzenden. Het verzenden van dergelijke mails kan volledig worden geautomatiseerd: u maakt dan gebruik van zogenaamde automatische
Python (gem=1,86) Java (gem=1,57) Enquete cursus informatica 1e bachelors oefeningen beter aansluiten bij project?
Enquete cursus informatica 1e bachelors 216-217 Python (gem=1,86) Java (gem=1,7) 3 3 2 2 1 1 3 2 1-1 -2-3 3 2 1-1 -2-3 2 Combinatie python va (gem=1,6) 1 Hoe is de overgang python2va 1 1 3 2 1-1 -2-3 3
Icoon/Icon Betekenis Description. Change scheduling Online. Gaat offline op (datum/tijd) Online. Going offline on (date/time)
Algemeen/General Gepubliceerd maar gewijzigd Published but changed Meer acties op geselecteerde content More actions on selected content Gepubliceerd en niet gewijzigd Published and not changed Terugdraaien
Vereiste kennis. 1 Java-editor. 2 Het compileren van een programma
3 Vereiste kennis Dit boek richt zich op het leren programmeren door het oefenen met programmeercodes. Veel theorie komt in het begin niet aan de orde. Dat is een grote uitdaging want het is niet makkelijk
Serieel Protocol voor Robotica v1.3. David Vollmar <[email protected]> 13 augustus 2013
Serieel Protocol voor Robotica v1.3 David Vollmar 13 augustus 2013 1 Inhoudsopgave 1 Inleiding 3 2 Controle van het platform 3 2.1 Standaard voorgeschreven...................... 3
Automaten. Informatica, UvA. Yde Venema
Automaten Informatica, UvA Yde Venema i Inhoud Inleiding 1 1 Formele talen en reguliere expressies 2 1.1 Formele talen.................................... 2 1.2 Reguliere expressies................................
QR-code op aanvoerbrief 2.xx.0: Specificaties
QR-code op aanvoerbrief 2.xx.0: Specificaties Door: Bert Velthuijs Datum 1e versie: 5 april 2012 (versie 0.xx) Datum laatste wijziging 20 september 2012 Huidige Versie: 2.xx.0 Wijzigingen 19 juli 2012
Het CIBG ervaart een hogere kwaliteit met applicatie-ontwikkeling in Microsoft Visual Studio 2010
Het CIBG ervaart een hogere kwaliteit met applicatie-ontwikkeling in Microsoft Visual Studio 2010 Organisatie Het CIBG is een uitvoeringsorganisatie van het ministerie van Volksgezondheid, Welzijn en Sport.
Handleiding. KIX code
Handleiding KIX code Inhoud 1 De KIX, wat is dat precies? 3 2 De KIX in de praktijk 4 2.1 De inhoud van de KIX 4 2.2 Zo voegt u de KIX toe 5 2.2.1 Gratis ToolKIX 5 2.2.2 Zelf de KIX aanmaken 5 2.2.3 Voor
VoipCenter Application Programming Interface (API)
Introductie Via de VoipCenter PBX API is het mogelijk om : 1. informatie op te vragen inzake de configuratie van : - SIP-accounts - Telefoonnummers - Tijdfilters zoals feestdagen, vakantieperiodes en kantooruren
Clang 1.3.0. Release Notes. created by
Clang 1.3.0 Release Notes created by Release 1.3.0 Niet zonder trots, presenteren wij Clang 1.3.0. Een release die geheel in het teken staat van de nieuwe split-run functionaliteit en de geheel vernieuwde
continue in een for, while of do lus herhaalt de lus vroegtijdig. De volgende herhaling wordt onmiddellijk begonnen.
Hoofdstuk 3: controlestructuren instructies en blokken Naar elke instructie staat een ; Instructies worden door de haakjes {} in een block samengevat. if else if ( expression) statement1; else statement2;
Media Pack. Over ons. Gemiddelde statistieken. Waarom kiezen voor IT Job Board? Referenties
Media Pack Over ons IT Job Board werd in 2002 opgericht in Engeland en is uitgegroeid tot een van de toonaangevende specialisten in de werving en selectie van IT-personeel in Europa. Met gemiddeld rond
API PostNL Extensie. Documentinformatie en copyright Document: tig_postnl_extensie_api_handleiding.docx Laatst gewijzigd op: 04-09-15 1:20 PM
API PostNL Extensie Documentinformatie en copyright Document: tig_postnl_extensie_api_handleiding.docx Laatst gewijzigd op: 04-09-15 1:20 PM Copyright 2015 Total Internet Group B.V. - Niets uit deze uitgave
Tekstmanipulatie. Week 3: Reguliere expressies. Gosse Bouma 2007/2008. Informatiekunde Rijksuniversiteit Groningen
Tekstmanipulatie Week 3: Reguliere expressies Gosse Bouma [email protected] Informatiekunde Rijksuniversiteit Groningen 2007/2008 Gosse Bouma 1/38 Overzicht 1 Wildcards 2 Keuze 3 Ranges 4 Begin en Eind van
Handleiding Word>Markdown
Handleiding Word>Markdown Voor het laten zien van de geschiedenis van bepaalde huizen op de website gaan we een bepaalde vorm van Markdown gebruiken. Markdown is een manier waarop je simpel tekst een bepaalde
Uitleg: In de bovenstaande oefening zie je in het eerste blokje een LEES en een SCHRIJF opdracht. Dit is nog lesstof uit het tweede trimester.
In onderstaande oefeningen zijn kleuren gebruikt. Deze dienen aleen om de structuren makkelijker terug te kunnen herkennen. Ze worden niet standaard zo gebruikt. De dunne rood/roze balken zijn ook geen
Programmeermethoden NA. Week 5: Functies (vervolg)
Programmeermethoden NA Week 5: Functies (vervolg) Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Functies Vorige week bekeken we functies: def
Lab Webdesign: Javascript 3 maart 2008
H5: OPERATORS In dit hoofdstuk zullen we het hebben over de operators (of ook wel: operatoren) in JavaScript waarmee allerlei rekenkundige en logische bewerkingen kunnen worden uitgevoerd. Daarbij zullen
Practicumopgave 3: SAT-solver
Practicumopgave 3: SAT-solver Modelleren en Programmeren 2015/2016 Deadline: donderdag 7 januari 2016, 23:59 Introductie In het vak Inleiding Logica is onder andere de propositielogica behandeld. Veel
Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,
Deel 1: Arduino kennismaking Wat is een microcontroller, structuur van een programma, syntax, Wat is een microcontroller Wat is een microcontroller? Microcontroller = kleine dedicated computer. - Beperkt
Korte infosessies Inschrijven niet nodig! Voor studenten o PubMed, Embase, Google Scholar o EndNote nu
EndNote VERONIQUE DESPODT INFORMATIEMEDEWERKER KCGG [email protected] BLITS INFORMATIESESSIE VOOR STUDENTEN 02/12/2016 Blits? Initiatief: Kenniscentrum voor de Gezondheidszorg Gent (0K3) Korte
http://www.smsgatewayapi.com/gateway.php?username=username&password=password&message= MESSAGE&to=RECEIVER&sender=FROM
SMS GATEWAY API Via onze HTTP gateway API kan u onze diensten op een eenvoudige manier integreren in uw bestaande software. Wij beschikken over een HTTP-interface die via een HTTP GET request uw sms berichten
De plug-in is heel eenvoudig te installeren met een setup-programma. Waarna je een aantal menu opties in het tools menu er bij krijgt.
Plsqldoc Genereer je documentatie Beeklaan 444 2562 BK Den Haag www.darwin-it.nl [email protected] KvK 27283780 ING 65.35.40.663 Technical Architect Net als (vrijwel) elke ontwikkelaar vind ik het documenteren
gravita PSUR-C conversie en import van relaties in PSU Relatiebeheer Algemeen
gravita PSUR-C conversie en import van relaties in PSU Relatiebeheer Algemeen Het converteren van adres- en andere relatiegegevens in PSU Relatiebeheer, en wat dat betreft elke koppeling tussen verschillende
AFO 133 - Invoer /output profielen
AFO 133 - Invoer /output profielen Het startpunt voor alle conversies is AFO 133. In deze AFO dient u aan te geven wat de structuur is van het bestand dat u wenst in te lezen of uit te schrijven. Hiervoor
HIP Call me now. Dienstbeschrijving. Copyright The Voip Company 2011 Pagina 1 van 7
HIP Call me now Dienstbeschrijving Copyright The Voip Company 2011 Pagina 1 van 7 Inhoudsopgave Inhoudsopgave... 2 1 Introductie... 3 1.1 Call me now scenario... 3 1.2 Misbruik risico... 3 2 Configureren...
2BA Deeplink Gebruiksbeschrijving
2BA Deeplink Gebruiksbeschrijving Document versie: 1.0 SCVN 02 Uitgiftedatum: 2006-5-1 Status: Conceptueel Auteur: 2BA Inhoudsopgave Inhoudsopgave... 2 1 Wat is deeplink?... 3 2 Deeplink gebruiken... 4
Blog-Het gebruik van variabelen in Excel VBA
Blog-Het gebruik van variabelen in Excel VBA Versie : 2012.01.31.1 (Blog http://www.reinder.eu) Dank voor de leuke reacties op het vorige blog en ook dank voor de kritische noot over het nivo dat de gebruiker
Query SQL Boekje. Fredrik Hamer
Query SQL Boekje Query SQL Boekje Fredrik Hamer Schrijver: Fredrik Hamer Coverontwerp: Fredrik Hamer ISBN: 9789402162103 Fredrik Hamer Inhoudsopgave A. Aanhef bepalen 17 Aantal 18 Aantal dagen tussen
Referentiehandleiding voor barcode
Referentiehandleiding voor barcode Versie 0 DUT/BEL-DUT 1 Inleiding 1 Overzicht 1 1 In deze referentiehandleiding vindt u informatie over het afdrukken van streepjescodes waarbij besturingsopdrachten rechtstreeks
Abstraheren van modellen
Abstraheren van modellen Geert Delanote 7 maart 2005 [email protected] Software Development Methodology 1 Inhoudstafel Motivatie Denkpistes Software Development Methodology 2 Motivatie Verslag
Inleiding Programmeren 2
Inleiding Programmeren 2 Gertjan van Noord November 26, 2018 Stof week 3 nogmaals Zelle hoofdstuk 8 en recursie Brookshear hoofdstuk 5: Algoritmes Datastructuren: tuples Een geheel andere manier om te
Kwaliteitsbewaking en testen in ICT beheerorganisaties
DKTP Informatie Technologie Veembroederhof 1 1019 HD Amsterdam Telefoon 020 427 52 21 Kwaliteitsbewaking en testen in ICT beheerorganisaties Voor de meeste projectgroepen die software ontwikkelen vormt
Automaten & Complexiteit (X )
Automaten & Complexiteit (X 401049) Beschrijven van reguliere talen Jeroen Keiren [email protected] VU University Amsterdam 5 Februari 2015 Talen Vorig college: Talen als verzamelingen Eindige automaten:
3NELåKANåOOKåBETROUWBAAR METå!CCEPTå&INANCIEEL
!CCEPTå!UTOMATISERING 3NELåKANåOOKåBETROUWBAAR METå!CCEPTå&INANCIEEL - / / ) %æ#) * & %2 3 De boeken bijhouden in een mooie, moderne en snelle omgeving? Accept Financieel is dé complete software voor iedere
Notatie Toelichting Opmerkingen L 8 cijfers en 1 letter Het eerste cijfer is altijd een 0 (nul) voor personen.
FISCALE IDENTIFICATIENUMMERS (FIN's) FIN's per thema: Structuur 1. AT - Oostenrijk 99-999/9999 9 cijfers Het liggend streepje en de schuine streep zijn niet in alle gevallen verplicht (met het oog op de
LAVS uploaden adressenlijst
LAVS uploaden adressenlijst Adressenlijst toevoegen in Bezit bij complex RWS INFORMATIE - Uitgegeven door RWS Leefomgeving Informatie Datum 19 juli 2017 Status definitief Versie 1.0 Inleiding Uploaden
Inleiding C++ Coding Conventions
Inleiding C++ Coding Conventions Opleiding Bachelor of Science in Informatica, van de Faculteit Wetenschappen, Universiteit Antwerpen. Nota s bij de cursus voor academiejaar 2012-2013. Ruben Van den Bossche,
Programmeren. Cursus Python
Programmeren Cursus Python Cursus Python Omschrijving In deze cursus leren de deelnemers te programmeren in de objectgeoriënteerde programmeertaal Python. Python is een taal die vaak wordt gebruikt voor
Korte uitleg: Haakjes en Aanhalingstekens
Korte uitleg: Haakjes en Aanhalingstekens Wie naar een wat ingewikkelder bash script kijkt ziet een verwarrende hoeveelheid van allerlei soorten haakjes en aanhalingstekens. Die verwarring is normaal gezien
Word cursus tekstverwerken - deel 1
Word cursus tekstverwerken - deel 1 Handleiding van Auteur: OctaFish Oktober 2014 Wat is tekstverwerken Dit is de eerste aflevering van een nieuwe serie die zich vooral gaat richten op het werken met Word.
Hoe zorgt u voor maximale uptime met minimale inspanning?
Hoe zorgt u voor maximale uptime met minimale inspanning? Qi ict Delftechpark 35-37 2628 XJ Delft T: +31 15 888 04 44 F: +31 15 888 04 45 E: [email protected] I: www.qi.nl De service-overeenkomsten van Qi ict
Hoofdstuk 19: Macro s
Hoofdstuk 19: Macro s 19.0 Inleiding Als je steeds dezelfde actie moet uitvoeren in Excel, dan kan het de moeite waard zijn om in plaats daarvan een macro uit te voeren (afgeleid van het Griekse "μάκρο",
Javascript oefenblad 1
Leer de basis van Javascript. Javascript oefenblad 1 Niels van Velzen Javascript oefenblad 1 Pagina 2 Inleiding Javascript is niet altijd even makkelijk. Vooral aan het begin is het even wennen hoe de
Dynamiek met VO-Script
Dynamiek met VO-Script Door Bert Dingemans DLA Ontwerp & Software [email protected] Inleiding Op de SDGN nieuwsgroep voor Visual Objects ontstond laatst een draad van berichten over de nieuwe libraries
17 Operaties op bits. 17.1 Bitoperatoren en bitexpressies
17 Operaties op bits In hoofdstuk 1 is gezegd dat C oorspronkelijk bedoeld was als systeemprogrammeertaal om het besturingssysteem UNIX te implementeren. Bij dit soort toepassingen komt het voor dat afzonderlijke
AFO 233 - Printen financiële transacties
AFO 233 - Printen financiële transacties 233. Inleiding Alle wijzigingen in de bestelmodule die een verandering in de en/of de van een budget tot gevolg hebben, worden vastgelegd in een be. Via AFO 233
Programmeermethoden NA. Week 5: Functies (vervolg)
Programmeermethoden NA Week 5: Functies (vervolg) Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna2016/ Functies Vorige week bekeken we functies: def bereken(a, x): return a * (x
1 Inleiding in Functioneel Programmeren
1 Inleiding in Functioneel Programmeren door Elroy Jumpertz 1.1 Inleiding Aangezien Informatica een populaire minor is voor wiskundestudenten, leek het mij nuttig om een stukje te schrijven over een onderwerp
Reguliere expressies
Reguliere expressies 1. Introductie Reguliere expressies vormen een specificatie-taal die een rol speelt als je in een grote hoeveelheid tekst een bepaald stukje zoekt. Het zoekwerk laat je door je computer
Programmeren met Arduino-software
Programmeren met Arduino-software De software waarin we programmeren is Arduino IDE. Deze software is te downloaden via www.arduino.cc. De programmeertaal die hier gebruikt wordt, is gebaseerd op C en
RELEASE NOTES. VERSIE Revisie 1.0. Imtech ICT Application Solutions
RELEASE NOTES VERSIE 3.3.07 Revisie 1.0 Imtech ICT Application Solutions Carlo Mertens, Zaltbommel, 4 November 2010 Inhoudsopgave Inhoudsopgave... 2 Documentgegevens... 3 Inleiding... 4 1. Nieuwe / Gewijzigde
AFO 241 - Leveranciers
AFO 241 - Leveranciers 241.1 Inleiding[//] Het systeem hanteert een authority bestand voor leveranciers waarin alle leveranciers opgenomen worden. Bij het invoeren van een bestelling wordt een leverancier
Algoritmen en Datastructuren 1. Functies
Algoritmen en Datastructuren 1 Functies Rad van Fortuin score = 0 huidigespeler++ draai rad bankroet verlies beurt joker huidigespeler++ jokers++ rad else score += bedrag * k rad/klinker toon gok medeklinker
Handleiding JCreator. Inhoud. Een Workspace en een eerste project maken
Handleiding JCreator Inhoud Een Workspace en een eerste project maken Een tweede project maken De editor van JCreator Aanpassen van de basis-directory Documentatie over klassen en methoden van de JDK Bestand
Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft
Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Dit
Huisstijlhandboek OPAC
1 Huisstijlhandboek OPAC 1. CURSUSSEN IN WORD: Voorblad: Naam cursus (Cambria 40, blauw) Naam vakgroep (Verdana 10, zwart) Docentengegevens (Verdana 10, zwart) Gegevens OPAC (Verdana 8, zwart) logo (2,11
Het wachtwoord van het GBA-netwerk. Datum 22 mei 2014
Het wachtwoord van het GBA-netwerk Datum 22 mei 2014 Inhoud Inleiding... 3 1 Hoe kan het wachtwoord worden gewijzigd?... 4 2 Foutcodes in relatie met Wachtwoord-operaties... 6 3 GBA-V... 7 Pagina 2 van
Training en workshops
Mirabeau Academy HACKING OWASP TOP 10 Training en workshops MIRABEAU ACADEMY AHEAD IN A DIGITAL WORLD Digitaal denken zit in onze code. We weten exact wat er online speelt. Sinds 2001 ontwikkelen we platformen
2.4.4 LibreOffice Werkblad Mac
2.4.4 LibreOffice Werkblad Mac Deze cursus bestaat uit 4 delen. 1. Werkblad gebruiken voor berekeningen 2. Werkblad gebruiken voor het maken van lijsten 3. Werkblad gebruiken voor een (eenvoudige) boekhouding
PHP. Les 4 : Variabelen
PHP Les 4 : Variabelen Interessante links: o http://www.dbzweb.be/moermant/ o http://php.net/manual/en/function.echo.php o http://www.w3schools.com/php/default.asp Wat zijn variabelen? Variabelen zijn
Het omzetten van reguliere expressies naar eindige automaten, zie de vakken Fundamentele Informatica 1 en 2.
Datastructuren 2016 Programmeeropdracht 3: Patroonherkenning Deadlines. Woensdag 23 november 23:59, resp. vrijdag 9 december 23:59. Inleiding. Deze opdracht is gebaseerd op Hoofdstuk 13.1.7 in het boek
FIT TEST 4 MENDIX. Low code & kwaliteit
FIT TEST 4 MENDIX Low code & kwaliteit 2 TODAY S TOPIC: Low code & kwaliteit 1. Definitie low code wat maakt low coding platformen waardevol? 2. Kwaliteit - staat low code gelijk aan hoge kwaliteit? 3.
Inleiding Programmeren 2
Inleiding Programmeren 2 Gertjan van Noord November 28, 2016 Stof week 3 nogmaals Zelle hoofdstuk 8 en recursie Brookshear hoofdstuk 5: Algoritmes Datastructuren: tuples Een geheel andere manier om te
Hand-out Introduction to Programming, werkcollege 4 Alex Reuneker ([email protected]), 2012
Hand-out Introduction to Programming, werkcollege Alex Reuneker ([email protected]), 0. Geneste if-statements (herhaling werkcollege ) If in if in if : Er kunnen meerdere if-statements genest worden. Dat
Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET
Visual Basic.NET M. den Besten 0.3 VB. NET Inhoud Voorwoord Deel 1 Visual Basic.NET 1.1 Inleiding...13 1.2 De programmeertaal Visual Basic.NET...14 1.3 Microsoft Visual Basic 2010 Express Edition...15
Inhoud. Unit4 Multivers Web
Release notes R-2019.3 21-03-2019 Inhoud 1 Algemeen... 1 1.1 Werken met de boekingsschermen... 1 1.1.1 Inkoop- en verkoopfacturen... 1 1.1.2 Kas-, Bank en Memoriaalboeken... 1 1.1.3 Werken met het toetsenbord
Uitwerkingen. Python Assessment
Uitwerkingen Python Assessment Nijmegen - Utrecht www.atcomputing.nl Copyright 2015,2016 Versie: 1a Uitwer king 1: Elementairedatatypes 1.a Een string bevat tekst in de vorm van Unicode characters, terwijl
GEBRUIKERS HANDLEIDING QT 6100 BACK TO BASICS BROODJES/SNACK
GEBRUIKERS HANDLEIDING QT 6100 BACK TO BASICS BROODJES/SNACK 09/01/2009 INHOUD: INLEIDING BACK TO BASIC PROGRAMMATIE 3 PROGRAMMATIE SCHERM OP QT6100 4 UITLEG VAN DE TOETSEN 5 13 PROGRAMMATIE 14 AANMAKEN
Maximo Tips and Tricks
Maximo Tips and Tricks Agenda Tips & Tricks 1. Scherm lay-out on demand 2. Koppelen Excel en Maximo 3. Foto s toevoegen aan records 4. Type ahead functie 5. Scripting voor calculaties en validaties 6.
Inhoud eindtoets. Eindtoets. Introductie 2. Opgaven 3. Terugkoppeling 6
Inhoud eindtoets Eindtoets Introductie 2 Opgaven 3 Terugkoppeling 6 1 Formele talen en automaten Eindtoets I N T R O D U C T I E Deze eindtoets is bedoeld als voorbereiding op het tentamen van de cursus
Programmeren onder RISC OS: de snelstart. in BBC-Basic
Programmeren onder RISC OS: de snelstart in BBC-Basic Programmeren in RISC OS: de snelstart De programma-directory Vensters maken Een eenvoudige foutprocedure Muis en toetsenbord Een icoon op de icoonbalk
Puzzelen met SQL: Fileleed
Puzzelen met SQL: Fileleed Patrick Barel, Alex Nuijten - AMIS Services BV Na begin de dag met een dansje en de NOS Headlines worden op Radio 3 de files voorgelezen. Heleen de Geest of John Bakker, van
