FastFiber

Lange excel bestanden inlezen.

Gestart door H@rm, di 29 09 2009, 11:34:29

Vorige topic - Volgende topic

H@rm

Wijze mannen en vrouwen,

Ik heb een standaard routine gemaakt om gegevens uit een excelbestand in te lezen.
Het werkt wel maar ik denk (weet eigenlijk wel zeker) dat er verbetering mogelijk is.
Om 1 kolom uit mijn excel bestand in te lezen maak ik gebruik van de volgende variabele
(set q kol_z (car (cdr (cddddr (cddddr (cddddr (cddddr (cddddr (cddddr l1))))))))
Zoals duidelijk mag zijn geldt dit voor een cel in kolom Z. Ik wil dit eigenlijk voor ontelbaar kolommen doen. Ik heb nu dus al 26  variabelen voor elke excel-regel. Dit moet handiger kunnen maar hoe?  :vraagteken: :vraagteken:
Het idee is dat iedere regel voor een bepaald block geldt, en ieder kolom voor een bepaalde waarde van een atribuut en/of da positie van dat block.

Graag een goude tip.
(helaas mijn baas staat niet toe dat ik hiervoor beloniongen uitreik :cry:)

Michel
Acad 10 t/m 2015
Revit 2010 t/m 2015
autodidact lisp

HofCAD

#1
Beste Michel,

Ik zal je wel niet snappen, maar
(setq m '((a11 a12 a13 a14 a15 ... a1n)
         (a21 a22 a23 a24 a25 ... a2n)
         (a31 a32 a33 a34 a35 ... a3n)
         (a41 a42 a43 a44 a45 ... a4n)
         (a51 a52 a53 a54 a55 ... a5n)
..........................................
         (am1 am2 am3 am4 am5 ... amn)
))

De lijst (a11 a12 a13 a14 a15 ... a1n) kan bijv. een regel of een kolom zijn
van je Excel spreadsheet.
Met bijv.:
(setq i 2 j 4 aij (nth (1- j) (nth (1- i) m))); aij is dus nu a24

Ik zou dat echter nooit voor ontelbaar veel kolommen willen doen, omdat het
laden van de matrix M nog al wat tijd kan kosten.
Ik zou bijv. alleen kolom A laden, die dan dient als index voor het opzoeken.
Als ik dan de gevens voor een bepaald block zoek, doe ik dat via die kolom en vindt
dan de overige gegevens op de bijbehorende regel die ik dan pas ga uitlezen.

Met vriendelijke groet, HofCAD CSI.

PS Voor het vullen van de matrix zie bijv. http://www.cadsite.be/smf/index.php?topic=194.0
ACADcadabra

H@rm

@ HofCad,
met:
Citaat van: HofCAD op di 29 09 2009, 12:06:18
Ik zou dat echter nooit voor ontelbaar veel kolommen willen doen,
bedoel ik dat ik niet beperkt wil worden in mijn routine door het aantal kolommen in mijn Excel sheet.

Verder realiseer ik mij dat er twee soorten inlezen zijn.
A) het in lezen van punten (coordinaten) en daar iets mee doen (block inserten). Hierbij moeten alle regels en kolommen 1 voor 1 doorlopen worden. Deze excel sheet zal over het algemeen uit een beperkt aantal kolommen (< 20) bestaan en een onbeperkt aantal regels (>>1000).
B) Het inlezen van data gegevens (teksten) en die invullen in een bepaald block (b.v. onderhoek.). Hierbij zal over het algemeen 1 regel per block benodigd zijn met heel veel kolommen (>50)

Voor dat eerste heb ik al iets dat aardig werkt. Ik wil nu bezig om voor het tweede geval iets te maken. Ik denk dat dan het inlezen van een matrix zoals door HofCad beschreven volstaat. Eerst een zoeksleuten zoeken in een kolom en dan de gegevens uit die regel inlezen. Ik zal http://www.cadsite.be/smf/index.php?topic=194.0 eens kijken.

Michel
Acad 10 t/m 2015
Revit 2010 t/m 2015
autodidact lisp

FastFiber