Programmeren in REXX/Voorbeeld 2: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
GuyDC (overleg | bijdragen)
Eerste draft
 
GuyDC (overleg | bijdragen)
Verdere afwerking
Regel 11:
9 | 20 Dec 2000: B2X en X2B functies toegevoegd
10 | ******************************************************************/
11 | parse upper arg arg . 1 kar1 2 /* Argument ophalen */
11 |
12 | hex=0 /* veronderstel geen hexadecimale notatie */
12 | parse upper arg arg .
13 | if left(arg,1)kar1="'" &| right(arg,2)kar1="'X"' then do /* als begin een ' of " is */
14 | parse varif right(arg ",1)='X'" argthen /* en rechts een "'X" */
15 | if \datatype parse value 1 translate(arg,"'X",'"'), then do
16 | say '"'arg'" is geen geldige with hex data'arg ; exit 5;end /* vertalen en hex=1 */
1116 |
17 | arg=x2c(arg)
17 | if hex then do /* als hexadecimaal is */
19 | end
18 | parse var arg "'" arg "'X" /* karakters eruithalen */
20 |
19 | if \datatype(arg,'X') then do /* verifiëren of geldig X */
21 | call test C2D
20 | say '"'arg'" is geen geldige hex data' ; exit 5;end
22 | call test C2X
21 | arg=x2c(arg) /* omzetten naar karakter */
23 | call test D2C
1922 | end
24 | call test D2X
23 | /* Nu hebben we geldige karakters, dus alle conversies proberen */
25 | call test X2C
2624 | call test X2DC2D
2725 | call test X2BC2X
2826 | call test B2XD2C
2127 | call test C2DD2X
29 | exit
3028 | call test X2C
3129 | TEST:call parse argtest functieX2D
3230 | call signal ontest syntaxX2B
2231 | call test C2XB2X
33 | interpret "val="functie"(arg)"
2932 | exit
34 | say left(functie'('arg')='val,20)left("=X'"C2X(val)"'",30)
33 | /* Functie TEST gaat na of conversie werkt en toont resultaat */
35 | return
34 | TEST: parse arg functie /* Welke conversie ? */
36 |
35 | signal on syntax /* intercepteer syntax fouten */
37 | SYNTAX:
3836 | say tellinterpret "val="functie'"('arg')=onmogelijk'" /* voer uit */
3437 | say left(functie'('arg')='val,20)left("=X'"C2X(val)"'",30)
39 | return
3538 | return
39 | /* SYNTAX procedure wordt opgeroepen als conversie mislukt */
3740 | SYNTAX:
41 | say tell functie'('arg')=onmogelijk' /* zeg dat het fout is */
3942 | return
</pre>}}
{{sub}}
*'''1''' tot '''10''': mooie inleidende commentaar voor het programma. Ook historiek van veranderingen.
*'''11''': ophalen van het argument, waarbij eerste karakter in ''kar1'' wordt gezet;
*'''13''': als links een ' of een " staat kunnen we te doen hebben met een hexadecimale notatie;
*'''14''': maar dan moet rechts een "X" staan;
*'''15''': dan zetten we hex=1 en vertalen we een eventuele " in '. Gewoon direct het argument vertalen mag niet, want dan zou het argument geen ' of " meer mogen zijn;
*'''17''': als we nu een hexadecimale notatie hebben...
*'''18''': halen we de hexadecimale karakters eruit...
*'''19''': we gaan na of de karakters geldige hexadecimale karakters zijn, en...
*'''20''': tonen foutbericht en stoppen de procedure met code 5.
*'''21''': anders zetten we de hexadecimale karakters om naar gewone karakterstring;
*'''24''': nu roepen we een '''test''' subroutine op, één voor één met de namen van de mogelijke conversiefuncties;
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.