Tutorial > CSV-bestanden ophalen en lokaal opslaan
Het CSV-formaat is het eenvoudigste en oudste databaseformaat dat er bestaat. Dit soort bestanden wordt vaak gebruikt om de inhoud op te slaan van logboeken, firewalls of tabellen met daarin de gegevens. De data kan afkomstig zijn uit bijvoorbeeld API's of een array en binnen nodum omgebouwd worden tot een csv-bestand.
Een CSV kan als volgt worden weergegeven (op basis van een lokale voorbeeld-dataset):
{%- do twig.noTemplate -%}
{%- set data = [
{ voornaam: 'José', achternaam: 'van Laar', leeftijd: 30 },
{ voornaam: 'Tristan', achternaam: 'van de Kamp', leeftijd: 30 },
{ voornaam: 'Kevin', achternaam: 'Koobs', leeftijd: 23 }
] -%}
voornaam;achternaam;leeftijd
{% for line in data %}
{{ line.voornaam }};{{ line.achternaam }};{{ line.leeftijd }}
{% endfor -%}
De output wordt dan als volgt:
voornaam;achternaam;leeftijd
José;van Laar;30
Tristan;van de Kamp;30
Kevin;Koobs;23
Verklaring
Wat gebeurt hier? Vanalles. Per regel zullen we het verklaren:
1. We willen dat er geen template wordt gegenereerd
a. Met de twig.noTemplate methode zorgen we er voor dat het template niet wordt weergegeven. We willen alleen de output van de huidige pagina weergeven, niet de header en footer van de hele met Nodum te genereren webpagina.
b. Met het do statement zorgen we er voor dat de methode wordt aangeroepen, zonder output te genereren.
c. We werken met 'logica-operators', omdat we geen output willen genereren, maar iets willen doen: {% en %}
d. De streepjes (koppeltekens) aan de 'logica-operators' vast, zorgen er voor dat deze regel code geen witregel genereert: spaties en enters voor, en na de opdrachtregel worden niet weergegeven (anders zou onze CSV output een witregel boven aan bevatten).
2. We maken een variabele (array) met meerdere data-regels met gegevens. Deze gegevens kunnen bijvoorbeeld uit AFAS Profit komen met een GetConnector.
a. We gebruiken het set statement, omdat we een variabelen (genaamd data) een waarde willen geven. We maken een array met [ en ].
b. We gebruiken een {%- operator en een -%} operator om de logica uit te voeren, met de koppeltekens om geen witruimte in beslag te nemen.
- Een object met data (voornaam, achternaam en leeftijd)
- Een object met data (voornaam, achternaam en leeftijd)
- Een object met data (voornaam, achternaam en leeftijd)
- We sluiten de array en sluiten het set statement
- We loopen door de data variabele, waarbij ieder voorkomen in de variabele line word gestopt. De logica operators {% en %} gebruiken we dit keer zonder koppelteken, omdat we wel degelijk een witregel willen genereren voor iedere nieuwe regel.
- We bouwen de regels op die we weer willen geven per data-regel.
- We sluiten de for, en sluiten dit keer wel de logica-operator af met een koppelteken, om geen 'trailing' witregel te genereren
En nu lokaal krijgen
Nu is er dus een URL waar een live gegenereerde CSV op te halen is. Wat als we die met een geplande taak automatisch naar een locatie op een (netwerk-) schrijf willen laten wegschrijven?
Hiervoor is curl.exe heel handig. Deze executable maakt het mogelijk met 1 opdrachtregel de inhoud van een URL op te halen. Door een .bat-file te maken en deze in een geplande taak te stoppen, kunnen we automatisch de URL waar we het bovenstaande script hebben geplaatst op gezette momenten laten ophalen en op een lokale locatie laten wegschrijven. Na het uitpakken zit in de map een bin-map, deze bevat de exe en vereiste DLL's. In sample.bat zit het voorbeeld om een URL op te halen en de output weg te schrijven.
Verklaring
Wat gebeurt er in dit bat-file
- We zorgen er voor dat de individuele commando's niet worden weergegeven.
- Een opmerking
- Een opmerking
- We maken het scherm leeg.
- We maken een variabele met de URL die we willen aanroepen. Parameters kunnen worden meegegeven (param.get) om in Nodum te bepalen wat we op gaan halen.
- We maken een variabele met het pad waar we de output willen opslaan. %~dp0% wordt automatisch de map waarin de bat-file staat.
- We maken een variabele met de bestandsnaam waar we de opgehaalde data mee willen opslaan. Tip: gebruik bijvoobeeld datum-/tijdselementen om historie te bewaren i.p.v. te overschrijven.
- We geven een regel weer om te laten weten wat er gebeurt
- We voeren CURL uit, halen de URL op en slaan de output op.
- We laten weten dat het script klaar is