Michel Vuijlsteke's weblog

Tales of Drudgery & Boredom.

Kunst- en vliegwerk

Beeld u in: een ascii-document van vele vele duizenden lijnen, met daarin een boomstructuur, in deze vorm:

Product
» Bron
» » Source:Intranet|Type:Productbeschrijving|Title:Onze dingen|Date:??|URL:http://www…
» » Source:Intranet|Type:FAQ|Title:xyz|Date:2/4/07|URL:http://www…
» Tarief
» » Bron
» » » Source:Procedure|Type:Tarief|Title:??|Date:??|URL:http://www…
» » Rooster
» » » Optie één
» » » » Suboptie
» » » » » Bron
» » » » » » Source:Intranet|Type:Tarief|Title:Suboptie tarief|Date:??|URL:http://www….
» » » » Nog een suboptie
» » » » » Bron
» » » » » » Source:Intranet|Type:Tarief|Title:Nog een tarief|Date:21/10/2006|URL:http://www…

…en dat moet aanschouwelijk voorgesteld worden. Vele véle duizenden lijnen.

Het is gestructureerd, en de structuur is (meestal) consistent aangehouden, zelfs al is het document met de hand aangemaakt, dus er moet iets uit te krijgen zijn. Maakte ik me sterk, toen het document in zijn eerste vorm voorbijkwam. Mar ‘t is vandaag het uur van de waarheid, en time to put my money where my mouth was, als het ware.

Stap één is beslissen waarin het te visualiseren. Een Access-database met een formpje erop lijkt op het eerste gezicht het snelste: de boomstructuur in een treeview steken, de rest in een lijstje met bronnen, en dan is het meteen mogelijk te navigeren en dergelijke, én te kijken welke bron waar in de boom gebruikt wordt. En als niet iederee Access heeft, dan trek ik toch gewoon Visual Studio boven?

Maar: heb ik wel zin in programmeerwerk? Ja, ik heb zin in programmeerwerk. De betere vraag is: heb ik zin in onderhoud van een quick & dirty ding, tot het inde van mijn dagen?

Neen, daar heb ik geen zin in.

MindManager dus: iedereen heeft die hier staan, het kan omgaan met grote en complexe bomen, én het is mogelijk om op de nodes nota’s te hangen.

En het importeert gestructureerde tekst. Er moet wel gerommeld worden met het document, want alles wat Bron is, moet in een nota bij een node komen en niet als een sub-node. Dus, met andere woorden, ik moet tot iets in deze zin komen:

Product
» Tarief
» » Rooster
» » » Optie één
» » » » Suboptie
» » » » Nog een suboptie

…met dan op de juiste plaatsen, bijvoorbeeld bij die “Nog een suboptie”, in een nota telkens iets in deze zin:

Intranet
Type:Tarief
Title:Nog een tarief
Date:21/10/2006
URL:http://www…

Vroeger zou ik daar snel een script tegen geplakt hebben, in ColdFusion of in PHP of ASP of C# geschreven bijvoorbeeld, maaar ik heb het tegenwoordig veel meer voor de semi-automatische aanpak. Notepad++ en Excel en Word zijn mijn vrienden. En regexen, natuurlijk.

Dus!

Stap één. Document openen in Notepad++. Alle “» » » » » » »” vervangen door <h7>, alle “» » » » » »” door <h6>, etc. Dat geeft me een document dat er zo uitziet:

Product
<h1>Bron
<h2>Source:Intranet|Type:Productbeschrijving|Title:Onze dingen|Date:??|URL:http://www…
<h2>Source:Intranet|Type:FAQ|Title:xyz|Date:2/4/07|URL:http://www…
<h1>Tarief
<h2>Bron
<h3>Source:Procedure|Type:Tarief|Title:??|Date:??|URL:http://www…
<h2>Rooster
<h3>Optie één
<h4>Suboptie
<h5>Bron
<h6>Source:Intranet|Type:Tarief|Title:Suboptie tarief|Date:??|URL:http://www….
<h4>Nog een suboptie
<h5>Bron
<h6>Source:Intranet|Type:Tarief|Title:Nog een tarief|Date:21/10/2006|URL:http://www…

Al die broninformatie moet op paragraafniveau komen onder de heading waar ze thuishoren, dus alle <h[1-7]>Bron mogen weg, en alle <h[1-7]>Source: mogen vervangen worden door <p>. Dat geeft dit:

Product
<p>Intranet|Type:Productbeschrijving|Title:Onze dingen|Date:??|URL:http://www…
<p>Intranet|Type:FAQ|Title:xyz|Date:2/4/07|URL:http://www…
<h1>Tarief
<p>Procedure|Type:Tarief|Title:??|Date:??|URL:http://www…
<h2>Rooster
<h3>Optie één
<h4>Suboptie
<p>Intranet|Type:Tarief|Title:Suboptie tarief|Date:??|URL:http://www….
<h4>Nog een suboptie
<p>Intranet|Type:Tarief|Title:Nog een tarief|Date:21/10/2006|URL:http://www…

Excellent. Alle tags moeten wel gesloten worden op het einde van de lijnen. In twee keer: eerst <p>([^$]*)$ vervangen door <p>\1</p>, en dan <h([1-7])>([^$]*)$ vervangen door <h\1>\2</h\1>. Resultaat:

Product
<p>Intranet|Type:Productbeschrijving|Title:Onze dingen|Date:??|URL:http://www…</p>
<p>Intranet|Type:FAQ|Title:xyz|Date:2/4/07|URL:http://www…</p>
<h1>Tarief</h1>
<p>Procedure|Type:Tarief|Title:??|Date:??|URL:http://www…</p>
<h2>Rooster</h2>
<h3>Optie één</h3>
<h4>Suboptie</h4>
<p>Intranet|Type:Tarief|Title:Suboptie tarief|Date:??|URL:http://www….</p>
<h4>Nog een suboptie</h4>
<p>Intranet|Type:Tarief|Title:Nog een tarief|Date:21/10/2006|URL:http://www…</p>

Hoera! We zijn er al bijna! Nu die paragraafjes een beetje opleuken. Het eerste item is telkens de naam van een bron, dat mag in het vet: vervang <p>([^|]*)| door <p><strong>\1</strong>|. En ze mogen op aparte lijnen, da’s gewoon |Type: en zo vervangen door <br />Type:. Ik zet er voor de properheid nog een <html><head><title> en zo rond, en dan importeren in Word.

Het eerste item stond zonder niveau. Snel opgelost in outline view, en dat ziet er dan zo uit:

Wordboom01

Dit bewaren als een Word-document, en dat document importeren in MindManager, geeft dit:

Mmgrboom01

Hey presto!

6 Comments

  1. *claps hands*

    Das nu eens proper aangepakt. Ik moet dringend meer uit mijn Windows machine en Office 2007 halen. Die MindManager lijkt me ook geen onhandige tool. Sebiet eens de trial downloaden.

    Hoe doe je die reguliere expressies in Windows? Ik gebruik ze zelf continue op de Mac en onder Linux, maar ‘k heb nog geen tool voor op de Windows laptop.

    Do share your secrets Michel 🙂

  2. Notepad++, gratis en zeer goed.

  3. Simple, but effective…

  4. wow,
    regexen met Notepad++
    ga ik zeker proberen,
    thx for sharing 🙂

Zeg uw gedacht