|
Artikelen van ACorners | terug |
!Squirrel is in staat om tekstvelden 'op te tellen'. Dit verschijnsel heet concatenatie. Laten we eens kijken, wanneer het nuttig is om dit te doen.
In het algemeen is het nuttig als je een veld met steeds wisselende
informatie wil combineren met dezelfde soort van informatie.
Je wil
bijvoorbeeld de naam van een geadresseerde iedere keer vooraf laten gaan
door: 'Dhr".
En toch wil je selecties blijven maken op het veld met de
achternaam. Of, zoals verderop in dit verhaal; je wil de gegevens voorzien
van HTML-code.
In ieder geval: Voor het maken van selecties wil je gebruik blijven maken
van de voordelen van een database; je wil selecties kunnen maken. Terwijl
voor de presentatie van die data het vaak van belang is dat deze op een
standaard manier worden gepresenteerd.
Een voorbeeld: stel je een eenvoudig adressenbestand voor: Hoe berg je daar
een naam als: Dhr. A.B. van der Aa in op?
Een mogelijkheid is:
titel: Dhr.
voorletters: A.B.
tussenvoegsel: van der
achternaam: Aaveldnaam: inhoud:
Alle data die mogelijk van betekenis kunnen zijn, zijn hier apart
beschikbaar. Maar om in een reportfile een aardige weergave te krijgen is
veel uitproberen nodig met de lengte van de report-onderdelen, fonts en
lettergroottes.
En dan nog is niet gegarandeerd dat alle namen uit die
database dan dezelfde weergave zullen hebben. Waarschijnlijk hebben namen
zonder tussenvoegsel een raar gat tussen voorletters en achternaam. Zou je
het 'pas' gemaakt hebben op een tussenvoegsel zoals 'te', zou 'van der'
waarschijnlijk niet gepast hebben.
Oplossing: Handhaaf deze velden (vanwege de selecties) en voeg extra velden toe waarin bestaande velden opgeteld worden. Bijvoorbeeld het veld:
hele naam:
De inhoud hiervan wordt:
titel+voorletters+tussenvoegsel+achternaam
Hiervoor worden de interne namen van de velden van de database gebruikt.
Omdat er natuurlijk een spatie tussen de onderdelen moet zitten; moeten
spaties toegevoegd worden:
titel+' '+voorletters+' '+tussenvoegsel+' '+achternaam
Alle toe te voegen tekst moet tussen '' staan.
Eigenlijk kunnen alleen maar velden op deze manier opgeteld worden als zowel
de op te tellen velden als ook het extra veld van het type 'string' zijn.
De extra velden moeten in het begin, of achteraf, toegevoegd worden aan de
database. (Natuurlijk is het ook mogelijk om velden te ontwerpen en toe te
voegen aan een Query, maar deze zijn eigenlijk alleen maar te gebruiken om
getallen rekenkundig te bewerken. In een Query zij de te ontwerpen velden
alleen maar van het type 'number'; floating point.)
De Query waaruit de presentatie van de gegevens plaatsvindt, bevat in zijn
Edit Report alleen maar dit extra veld: 'hele naam'; en niet meer de vier
afzonderlijke velden.
In de ontworpen Query wordt er dan gekozen voor 'Batch operations'
'Update'. Vervolgens wordt het extra veld binnen het batch update venster
gesleept en kan de 'new value' ingevuld worden. Deze moet voorafgegaan
worden door het teken '=' In de (Pascal-)betekenis:
de inhoud van dit veld WORDT.
dus:
field new value
hele naam =titel+' '+voorletters+' '+tussenvoegsel+' '+achternaam
Door de Query nu te bewaren, wordt, behalve de daarin gemaakte selectie, ook
het Batch Update veld bewaard. En, zoals bekend, een binnen de Query
gemaakte opmaak van de Report functie wordt ook bewaard. Daarmee zijn alle
samenhangende problemen en hun oplossingen aan elkaar gekoppeld.
We hebben al gezien, hoe eenvoudig spaties als tekst toegevoegd kunnen
worden aan een reeks van veld-inhouden. Welnu; daar hoeft natuurlijk niet
alleen maar een spatie te staan.
Veronderstel nu eens, dat wij van alle inhouden van 'hele veld' een lijst, een opsomming, willen maken in een HTML document: Hoe zou dat dan moeten?
Wel, voor het opgesomde is er dan een 'tag' nodig, en wel: <li>.
De oplossing is dan:
field: new value:
hele naam ='<li>'+titel+' '+voorletters+' '+tussenvoegsel+' '+achternaam
(Er is geen spatie nodig achter <li>)
In de reportfile die hieruit voortvloeit wordt dat in het betreffende document
ingevoegd tussen de tags <ul> en </ul>:
<ul>
<li>Dhr. A.B. van der Aa
<li>Mevr. C.D. Dekwaadtsteniet
<li>....
</ul>
Dit ziet er dan zo uit:
Waarschijnlijk zijn er nog meer zaken mogelijk. Waarschijnlijk kan een veld
gevuld worden met de 'kop' van een HTML document en een ander veld met de
'staart':
('kop':
<html>
<body>
'staart':
</body>
</html>)
Door vervolgens in de Query de velden een sortering te geven en in de Report
Editing de juiste headers en footers te benoemen en de velden te
rangschikken onder de juiste headers is het waarschijnlijk mogelijk om de
'kop' en 'staart' slechts één keer in de reportfile op te
laten nemen, met daartussen de gewenste opsomming. Ook de tags <ul> en
</ul> zouden dan opgenomen kunnen worden, met als resultaat:
<html>
<body>
<ul>
<li>Dhr. A.B. van der Aa
<li>....
<li>....
</ul>
</body>
</html>
Op deze manier zou je een compleet HTML-document genereren. Binnen de opmaak
van een report. Alleen, dat heb ik nog niet geprobeerd..
Tot zover de weerslag van datgene wat er op de clubavond is besproken.
Intussen heeft Peter Scheele wel een oplossing geleverd voor deze kwestie:
Hij leverde de code voor een Obey file die het werk doet. Door deze file als
allerlaatste aan te roepen (en automatisch) en uit te laten voeren, voegt
deze de stukjes HTML-document naadloos samen met de gegenereerde stukjes
reportfiles.
Concreet:
Op deze manier is een document gemaakt, waarin doorverwijzingen
opgenomen zijn naar inhouden van tijdschriftartikelen. Deze doorverwijzingen
zijn met behulp van !Squirrel thematisch gerangschikt. Op deze manier heb
ik van 23 thema's lijsten van artikelen gekregen, die in het document op de
goede plaats in een tabel moeten worden opgenomen.
Hierdoor wordt er niet binnen een report van een !Squirrel bestand geprobeerd om
een compleet HTML-document samen te stellen, maar op het niveau van het document
zelf. Dit is veel inzichtelijker en gemakkelijker te realiseren.
Als voorbeeld:
Het HTML document dat de tabel met verwijzingen bevat, is in 24 stukken (begin
blok1 blok2 blok3 ... eind) geknipt; waar de 23 lijsten (lijsta lijstb lijstc
lijstd...) tussen passen.
De lijsten zijn reports vanuit !Squirrel, waarbij iedere keer een Query een
lijst genereert én automatisch de volgende Query start, totdat alle
lijsten zijn aangemaakt.
De laatste Query start dan de volgende Obey file:
*Create <Obey$Dir>.nieuw(nieuw is de bestandsnaam)
*Type <Obey$Dir>.best1 { >> <Obey$Dir>.nieuw }
(Accolades, spaties en >> zijn van belang. *Close
In mijn geval wordt dat:
*Create <Obey$Dir>.ArcNw/html
*Type <Obey$Dir>.begin { >> <Obey$Dir>.ArcNw/html }
*Type <Obey$Dir>.lijsta { >> <Obey$Dir>.ArcNw/html }
*Type <Obey$Dir>.blok01 { >> <Obey$Dir>.ArcNw/html }
*Type <Obey$Dir>.lijstb { >> <Obey$Dir>.ArcNw/html }
*Type <Obey$Dir>.blok02 { >> <Obey$Dir>.ArcNw/html }
*Type <Obey$Dir>.lijstc { >> <Obey$Dir>.ArcNw/html }
*Type <Obey$Dir>.blok03 { >> <Obey$Dir>.ArcNw/html }
*Type <Obey$Dir>. lijst .....
*Type <Obey$Dir>.blok .....
*Close
Dit resulteert in een databestand ArcNw/html, dat ik daarna van bestandstype verander (faf) zodat het HTML document klaar is!
Dit bestand is met één druk op de knop ontstaan: door de eerste
Query te starten. Daardoor werden de 23 lijsten gegenereerd; waarna als laatste
het Obey-bestand start. Dit laatste breit dan de 24 documentbrokken samen met
de 23 lijsten.
In totaal 106 verschillende verwijzingen, die ieder een of meer keren in deze
thematische lijsten staan (immers: ieder artikel kan meer dan een thema bestrijken)
zijn dan op een gestuctureerde en overzichtelijke manier bereikbaar gemaakt.
Als je de tekst van de hier volgende page ophaalt, kun je zien dat ik met kommentaren in het document het begin en einde van ieder in te voegen stukje heb ingevoerd: http://www.ursula.nl/anw/arcindex.htm
mei 1999, Léon Ruwette