Archief - CSV files inlezen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Gitan

Legacy Member
Op mijn werk (een voedingsbedrijf) wordt de temperatuur van frigo's, kookketels, ... continu gemonitord. De gegevens worden weggeschreven naar csv-files (1 file per geregistreerd kanaal). Mocht het aan mij liggen dan zat alles al lang in een database, maar het is nu zo.

Die temperaturen worden ook uitgelezen d.m.v. een applicatie die geschreven is in VBA voor Access en die de gegevens dan in een Excelgrafiek zet. Zeer vergezocht allemaal. Dat spel opent 2 excelvensters per grafiek (en meerdere grafieken tegelijk bekijken is niet mogelijk om een of andere reden). Aangezien ik dagelijks enkele grafieken moet checken ben ik dus dagelijks enkele minuten gefrustreerd. Daarom denk ik eraan om zelf een applicatie te schrijven in VB.NET die alle grafieken mooi binnen 1 programma kan tonen met grosso modo 50% minder muisclicks.

Het grootste struikelblok is het efficiënt uitlezen van de csv-files. Het systeem is nu 1 jaar in gebruik en per kanaal (bv. een frigo) is de file al om en bij de 10 MB. Zoeken binnen zo'n bestand is niet mogelijk, dus ik kan wellicht niet anders dan de hele zaak in te lezen en dan zelf een zoekmethode te implementeren, right? Als ik de temperaturen wil opvragen van bv. gisteren betekent dit dan ongelooflijk veel overhead, want alles wat ervoor komt moet ik inlezen, maar heb ik in feite niet nodig.

Heeft iemand suggesties om dat goed aan te pakken?

Chaoz

Legacy Member
De reden dat ge geen meerdere grafieken kunt bezien is wss omdat zo huge files zijn. Text parsing is zowieso traag.

Worden die files real time gegenereert?

cool_boy_ke

Legacy Member
Waarom niet de csv's per maand laten indelen? En dan een file met de laatste x dagen.

SideShow

Legacy Member
Waarschijnlijk zo een outdated windows applicatie uit 1996 :)

Een conversie van een csv naar een databank duurt toch maar een ogenblik? Of enkele ogenblikken dan als ge ene hebt van 10MB

DarthDavy

Legacy Member
Gitan zei:
Het grootste struikelblok is het efficiënt uitlezen van de csv-files. Het systeem is nu 1 jaar in gebruik en per kanaal (bv. een frigo) is de file al om en bij de 10 MB. Zoeken binnen zo'n bestand is niet mogelijk, dus ik kan wellicht niet anders dan de hele zaak in te lezen en dan zelf een zoekmethode te implementeren, right? Als ik de temperaturen wil opvragen van bv. gisteren betekent dit dan ongelooflijk veel overhead, want alles wat ervoor komt moet ik inlezen, maar heb ik in feite niet nodig.

Heeft iemand suggesties om dat goed aan te pakken?

Dat heb je goed gezien, maar er is misschien een oplossing.

Weet je hoeveel lijnen er per dag geschreven worden in die csv-file? Is dat één per uur, per half-uur, per minuut? Als je dat weet, kan je om het boeltje toch enigzins wat performant te houden het bestand openen om te lezen en een streamreader naar een bepaalde positie in de file verplaatsen (is snel). Vandaar lees je dan de hoeveelheid data uit die je nodig hebt in het geheugen van je applicatie en doe je je ding daarmee.

Gitan

Legacy Member
Darthdavy: ik dacht aan zoiets, maar ik wist niet of dat mogelijk was. Ik denk dat er per minuut iets weggeschreven wordt.
Geeft deze manier van werken dan geen probleem wanneer de frequentie van wegschrijven ooit zou veranderen? Dan moet ik al met 2 (of meer) frequenties rekening zitten houden.

Sideshow: the sad story is dat we dat systeem sinds januari 2010 gebruiken...

Chaoz: de csv files worden niet real time gegenereerd, ze worden steeds aangevuld.

Cool_boy_ke: ik wil momenteel niets veranderen aan het huidige systeem (alleeja, 'k zou wel willen, maar dat gaat teveel ineens zijn voor de zwakke harten van de managers).

DarthDavy

Legacy Member
Je zal natuurlijk een algoritme moeten gaan verzinnen over hoe je je door de file te verplaatsen. De meeste stream objecten van .NET hebben de property Position om je ergens binnen een file te gaan positioneren om te lezen (of schrijven). Ook moet je naar de functie Peek() gaan kijken binnen de stream objecten om te gaan kijken/controleren of je op de goede positie staat.

Ik weet natuurlijk de functionele behoeftes van de applicatie niet, maar een andere mogelijkheid zie ik niet buiten er een database bij te sleuren, een service te schrijven die de csv-files naar de database wegschrijft en dan de applicatie die queries op de database afvuurt.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan