een 2 dimensionale array uitlezen

  • Onderwerp starter Onderwerp starter bifi
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

bifi

Gebruiker
Lid geworden
20 apr 2007
Berichten
34
hallo

Weet iemand hoe ik een 2 dimensionele array kan uitlezen.
Als bijlage is mijn programma.

Vriendelijke groeten

bifi
 

Bijlagen

hoi bifi

klopt het dat in jou eind matrix meerder x'en naast elkaar staan?

of moet er een getal in komen?
 
nee er staan meerdere x-en langs elkaar. nu moet ik eigenlijk gaan uitlezen hoeveel x-en er staan.

Weer jij hier misschien een oplossing voor

groeten
 
probeer dit eens

Code:
Sub mijnMatrix()
    Dim Rij As Integer
    Dim Kolom As Integer
    Dim Uitvoer
    Dim collecieBeginPunten As New Collection
    Dim collecieEindPunten As New Collection
    Dim tellerBeginPunten As Integer
    Dim tellerEindPunten As Integer
    Dim beginPunt As String
    Dim eindPunt As String
    
    Cells.HorizontalAlignment = xlLeft
    Set Uitvoer = Range("d2")
    
    tellerBeginPunten = 1
    tellerEindPunten = 1
    teller = 1
    Do Until Cells(teller, 1) = ""
        beginPunt = Cells(teller, 1)
        eindPunt = Cells(teller, 2)
        On Error Resume Next
        collecieBeginPunten.Add Item:=tellerBeginPunten, key:=beginPunt
        If Err = 0 Then
            Uitvoer(tellerBeginPunten, 0) = beginPunt
            tellerBeginPunten = tellerBeginPunten + 1
        End If
        On Error Resume Next
        collecieEindPunten.Add Item:=tellerEindPunten, key:=eindPunt
        If Err = 0 Then
            Uitvoer(0, tellerEindPunten) = eindPunt
            tellerEindPunten = tellerEindPunten + 1
        End If
        Rij = collecieBeginPunten(beginPunt)
        Kolom = collecieEindPunten(eindPunt)
        Uitvoer(Rij, Kolom) = Uitvoer(Rij, Kolom) + 1
        teller = teller + 1
    Loop
End Sub
 
bij dit programma krijg ik eigenlijk mijn aantal verschillende punten. Maar dit heb ik al.
Die x-en zijn de waarden die in kolom A en B langs elkaar staan.

Hetgeen ik nu moet hebben is dat ik moet gaan tellen hoeveel x-en staan per component. Dus op moment dat ik in mijn matrix bij (1,1) kijk staan daar 2 x-en dan moet ik zeggen dat er 2 x-en zijn en dan weet ik dat ik dan tussen die 2 componenten 2 lijnen moet trekken

groeten
 
ja ik heb gezien dat die zijn waarden in Excel geeft. Maar ik moet die waarden kunnen gebruiken voor mijn lijnen te trekken. Dit moet allemaal automatisch gebeuren dus is het moeilijk om te zeggen dat hij in die cel moet gaan kijken om dat te weten he

groeten
 
hoi bifi

hoe moet je uivoer naar autocad er uit gaan zien?

je kan er een script van maken (dat is een tekst bestand dat je aan autocad voert)

of moet het een dxf bestand worden ?(dat is zeer geschikt voor uitwisseling tussen tekenprogramma's)

het uitlezen opzich is niet moeilijk, maar wat moet ik met de uitgelezen gegevens doen
hoe moeten die geordend zijn?
 
ik heb een programma geschreven zodat mijn autocad automatisch opent. Ik zal eventjes uitleggen wat de bedoeling is.

Mijn kolom A is dat zijn mijn beginpunten. Kolom B zijn mijn Eindpunten. Alles wat ik in kolom A en B staat moet een rechthoek worden en de grote van die rechthoek is afh van het aantal lijnen dat daaruit vertrekken. Als ik nu mijn kruisjes ga tellen of zoals jij gemaatk heb zie ik dat er bv 2 lijnen vertrekken vanuit A1 naar B1 dan moet kost 2 keer groter worden. en dan moet ik in vba een programma schrijven zodat ik mijn lijnen kan tekenen in autocad met de juist coördinaten enz.

Begrijp je het??

Mss kan je nu beter helpen voor het uitlezen. Ik moet gewoon weten dat van A1 naar B1 bv 2 kruisjes staan en deze waarde moet ik in een programma van VBA schrijven. maar dit moet wel allemaal automatisch gebeuren dat tellen enz. dus kan ni echt met cellen werken denk ik.

Groeten

bifi
 
hoi bifi

HTML:
bv 2 lijnen vertrekken vanuit A1 naar B1 dan moet kost 2 keer groter worden

wat is kost?

moeten er 2 lijnen van A1 naar B1 getrokken worden of moet de lijn 2 maal zo dik worden

geef eens een letterlijk voorbeeld hoe jou uitvoer naar AutoCat er uit moet komen te zien

aan de hand van jou voorbeeld

laat maar eens zien wat er moet gebeuren als er 2 lijnen van A1 naar B1 gaan

en wat als er 3 lijnen van A1 naar B1 gaan

groeten Sylvester

ps
die tabel die ontstaat in de cellen is zeer eenvoudig in een 2D matrix te kopieen hoor
het voordeel van mijn oplossing is dat je niet eerst de maat van de matrix hoeft te bepalen, en dat er aantallen en de matrix staan
 
Code:
wat is kost?

moeten er 2 lijnen van A1 naar B1 getrokken worden of moet de lijn 2 maal zo dik worden

geef eens een letterlijk voorbeeld hoe jou uitvoer naar AutoCat er uit moet komen te zien

aan de hand van jou voorbeeld 

laat maar eens zien wat er moet gebeuren als er 2 lijnen van A1 naar B1 gaan 

en wat als er 3 lijnen van A1 naar B1 gaan

Hallo

dit is een typ fout. dit moet kast zijn.

Ja voor dit laten te zien is dit moeilijk over internet. Alles wat in kolom A staat zijn mijn beginpunten ( dit is mijn vertrekkast), alles wat in kolom B staat zijn mijn eindpunten ( dit is mijn eindkast). Op het moment dat tussen A1 en B1 2 lijnen zijn moeten er hiertussen 2 lijnen getrokken worden. Wanneer er hier een 3 staat, moeten er 3 lijnen getrokken worden.

Hopelijk is dit duidelijker

groeten

Bifi
 
hoi bifi

om ta laten zien dat het uitlezen niet moeilijk is een voorbeeld

Code:
'in kolom A staan beginPunten van lijnen in tekst fomnaat
'in kolom B staan eindPunten van lijnen in tekst formaat
'in één rij staat één lijn
'in kolom A mogen iedentieke punten staan in kolom B ook
'nu moet er een matrix gevormd worden met bovenin de unieke punten van kolom B
'en vertikaal de unieke punten van kolom A
'omdat de punten unie moeten zijn, is een collectie met de unieke punten (tekst)als key
'en de plaats in de matrix als item, een makkerlijke oplossing om de matrix te benaderen
'zorg dat de lijst met punten begint op rij 1
    Public hoofdMatrix
    Public collecieBeginPunten As New Collection
    Public collecieEindPunten As New Collection
    
Sub mijnMatrix()
    Dim Rij As Integer
    Dim Kolom As Integer
    Dim tellerBeginPunten As Integer
    Dim tellerEindPunten As Integer
    Dim beginPunt As String
    Dim eindPunt As String
    Dim E As Integer
    Dim teller As Integer
    
    Cells.HorizontalAlignment = xlLeft
    Set hoofdMatrix = Range("d2")
    
    tellerBeginPunten = 1
    tellerEindPunten = 1
    teller = 1
    Do Until Cells(teller, 1) = ""
        beginPunt = Cells(teller, 1)
        eindPunt = Cells(teller, 2)
        On Error Resume Next
            collecieBeginPunten.Add Item:=tellerBeginPunten, key:=beginPunt
            E = Err
        On Error GoTo 0                 'zo snel mogenlijk de error behandeling weer op normaal zetten
        If E = 0 Then                   'geen error dus er is een nieuw uniek item toegevoegd aan collectieBeginPunten
            hoofdMatrix(tellerBeginPunten, 0) = beginPunt   'dit nieuwe beginpunt krijgt gelijk een plaats op de sheet
            tellerBeginPunten = tellerBeginPunten + 1   'deze teller is eigenlijk niet nodig,kan ook de count gebruiken
        End If
        On Error Resume Next
            collecieEindPunten.Add Item:=tellerEindPunten, key:=eindPunt
            E = Err
        On Error GoTo 0
        If E = 0 Then
            hoofdMatrix(0, tellerEindPunten) = eindPunt
            tellerEindPunten = tellerEindPunten + 1
        End If
        Rij = collecieBeginPunten(beginPunt)
        Kolom = collecieEindPunten(eindPunt)
        hoofdMatrix(Rij, Kolom) = hoofdMatrix(Rij, Kolom) + 1
        teller = teller + 1
    Loop
    aantalLijnenPerPunt
End Sub
Sub aantalLijnenPerPunt()
    Dim beginPunt
    Dim eindPunt
    Dim totaal As Integer
    Dim uitVoer As Range
    
    Set uitVoer = hoofdMatrix(collecieBeginPunten.Count + 4, 1) 'hier komt je nieuwe tabel
    uitVoer(0, 0) = "Punt"
    uitVoer(0, 1) = "aantal lijnen per punt"
    For Each beginPunt In collecieBeginPunten
        uitVoer(beginPunt, 0) = hoofdMatrix(beginPunt, 0)
        totaal = 0
        For Each eindPunt In collecieEindPunten
            totaal = totaal + hoofdMatrix(beginPunt, eindPunt)
        Next eindPunt
        uitVoer(beginPunt, 1) = totaal
    Next beginPunt
    
    Set uitVoer = uitVoer(collecieBeginPunten.Count + 2, 1) 'hier komt nog een tabel
    uitVoer.Select
    For Each eindPunt In collecieEindPunten
        uitVoer(eindPunt, 0) = hoofdMatrix(0, eindPunt)
        totaal = 0
        For Each beginPunt In collecieBeginPunten
            totaal = totaal + hoofdMatrix(beginPunt, eindPunt)
        Next beginPunt
        uitVoer(eindPunt, 1) = totaal
    Next eindPunt
    
End Sub

sub hoofdMatrix() starten met F5 of stap voor stap met F8

groeten sylvester
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan