Met Dynamo kun je best eenvoudig wat teksten manipuleren. Er zijn nodes om delen te strippen of te vervangen, of anders wel op te splitsen. Stel dat je een plattegrond van je gebouw hebt en elke kamer bevat niet alleen een nummer, maar ook een kamer-omschrijving. “Room 1” t/m “Room 21” bijvoorbeeld. En je wilt alleen dat nummer hebben (om in een Block attribuut te stoppen of in een Legenda, of noem-maar-op).

Soms komt het voor dat je een lege string terug krijgt, of zelfs een null-object. Dan bestaat het hele kamernummer niet eens en kun je ook niet de tekst ervan opvragen. Bij een lege string bestaat het kamernummer wel maar is deze niet ingevuld.
Vraag je de lengte op (alles met een lengte groter dan 0 is goed), dan kan je een foutmelding krijgen. De foutmelding is niet echt behulpzaam (“Object reference not set to an instance of an object”).

Andere functies kunnen dit ook teruggeven, zoals een Replace.

Je kunt in principe wel verder werken want het meeste werk is wel gedaan, maar als je verderop iets wilt doen met het resultaat, kun je nog een keer tegen het probleem aanlopen. Nu is de Replace functie misschien wel onhandig omdat je mogelijk ook “Kamer 13” of “Bezemkast 3” tegen kan komen. Automatiseren is nog best wel een dingetje…
Om te voorkomen dat je null-objecten gaat verwerken, kun je deze vervangen door lege strings. Met de List.AllIndicesOf en List.ReplaceItemAtIndices kun je snel op null-objecten zoeken en vervangen.

Je hebt dan wel lege strings, maar geen null-objecten meer. En wil je alleen het nummer eruit filteren, dan kun je o.a. de String.GetNumber node toepassen.

Hier kan je dan weer zoeken op alle indices van een lege string, of alle items met lengte 0, om die te vervangen door iets als “x” of “”. Wil je helemaal geen nummers maar gewoon de lege strings en nulls vervangen door iets anders, dan kun je ook op meerdere waarden zoeken. De gevonden indices-lijst moet je dan wel even platslaan om te voorkomen dat je lijsten binnen lijsten krijgt, maar met een paar nodes ben je er.

Wie mijn blogs leest, weet dat ik graag Code Blocks gebruik. En ook hier kun je met één regel code controleren of het een null-object is of een string met een lengte 0.

(En nog een flauwe afsluiter, de node StringGetNumber werkt ook op lege strings en null-objecten, maar zoiets moet je testen om zeker te weten. In dit geval had je alle tussen-nodes en controle-checks achterwege kunnen laten maar dan had je ook niks geleerd van deze blog, toch?)
Wil je complexe of repetitieve taken automatiseren in Civil 3D? Dit boek helpt je alles te leren over de design automating tool Dynamo voor Civil 3D. Je wordt een professional in visueel programmeren, en binnenkort zijn al je saaie of complexe taken geautomatiseerd! This book is only available in English.
