Min hjärna har låst sig helt. Kan någon hitta på en bra lösning? Hej Vad är det du vill göra. Tilldela en rad till arrayen?<br> Sven jag tror jag måste ha min array kanske går det att lösa på något annat sätt men det får jag fundera på om det går segt. Så här kan man lösa det om man vet att X är 2 men det funkar ju lite sämre om X är 7 ;) Nu funkar hjärnan lite bättre tror jag. Så jag kom på en lösning kanske inte den bästa? Men jag lyssnade lite på Sven också och använde bara en dimension på arrayen. Hej igen Tack Sven. Det såg mycket intressant ut. Nästan lite för avancerat för min kunskapsnivå. Men det är alltid roligt att lära sig något nytt. Jag tror inte ska använda den just här i programmet men jag kanske kommer att måsta använda 3 tecken då skulle den vara bra. Kommer iaf att spara och testa den. Har gjort en ny kod för det var inte så bra att bygga upp raderna på det sättet för jag kunde inte sortera bort rader direkt så här kommer en ny kod. Går det att kolla hur stor en array är i byte? Eller måste man räkna för hand?multidim.Array
Jag skulle vilja kunna göra en funktion som fyller en multidim.array liknande denna.
Dim IntMA(50000,x)%
IntMA(0) = 1,1,1,1
IntMA(1) = 1,1,1,2
IntMA(2) = 1,1,2,1
IntMA(3) = 1,1,2,2
Osv.
(i exemplet är x=4)
X är radlängden och den kommer att vara mellan 1 och 13. Värdena ska vara antigen 1 eller 2 (jag kanske kommer att använda 1-3 men det ska väl inte vara någon skillnad) och funktionen ska skapa alla olika kombinationer av rader.
Det är lätt att fylla en multidim.Array med loopar om man vet x men jag kommer inte på om jag inte vet x. Säg till om jag behöver förklara problemet mer.Sv: multidim.Array
Rent principellt skall du unvika multidimensionella arrayer.
Tänk efter om du inte kan lägga allt i en lång array
där man vet att på fack (tex 112) börjar nästa dimmension.
Eller deklarera tex. 10 olika Arrayer som innehåller dina dimmensioner.
Multidimensionella arrayer är slöa och ineffektiva.
tycker
Sven
Har stavat dimmension på två sätt , jag ser inte vad som är riktigt.
DSSv: multidim.Array
<br>
Kan ju försöka med:
<code>
x=4
Dim IntMA(50000, x)
IntMA(0, 0) = 1
IntMA(0, 1) = 1
IntMA(0, 2) = 1
IntMA(0, 3) = 1
IntMA(1, 0) = 1
IntMA(1, 1) = 1
IntMA(1, 2) = 1
IntMA(1, 3) = 2
IntMA(2, 0) = 1
IntMA(2, 1) = 1
IntMA(2, 2) = 2
IntMA(2, 3) = 1
IntMA(3, 0) = 1
IntMA(3, 1) = 1
IntMA(3, 2) = 2
IntMA(3, 3) = 2
</code>Sv: multidim.Array
andreas det var inte riktigt det jag fundera på ska försöka göra det lite mer tydligt
<code>
public function FyllaArray(X as integer)
Dim intMA(50000,X)
Här ska finnas kod som stoppar in värdena 1 och 2(kanske 3 också)
i arrayen. intMA(0) ska vara första raden och bli tilldelad 1,1,1,1,1 längden på raden beror på X och intMA(1) ska var nästa rad osv.
Alla rader ska vara olika för jag ska använda dom för kontrollera
andra rader jag har.
Dom ska tilldelas exakt som du skriver men jag vill ha en loop eller
om man kan göra på något annat sätt.
End function
</code>Sv: multidim.Array
<code>
X = 2
Dim intMA(500, X)
Dim x1%, x2%, x3%, intRaknare%
For x1 = 1 To 2
For x2 = 1 To 2
For x3 = 1 To 2
intRaknare = intRaknare + 1
intMA(intRaknare, 0) = x1
intMA(intRaknare, 1) = x2
intMA(intRaknare, 2) = x3
Next
Next
Next
</code>Sv: multidim.Array
Det funkade att köra med radlängd=13 och antaltecken=3 men den käkade upp 143mb Minne så jag tror det endast får bli antaltecken=2.
<code>
Option Base 1
Private Function SkapaOlikaRader(RadLangd As Byte, AntalTecken As Byte)
Dim OlikaRader() As String
Dim x%, y#, z#, v%, RadNR#, q#
ReDim OlikaRader(AntalTecken ^ RadLangd) As String
q = AntalTecken
For x = 1 To RadLangd
RadNR = 1
For y = 1 To ((AntalTecken ^ RadLangd) / q)
For v = 1 To AntalTecken
For z = 1 To (q / AntalTecken)
OlikaRader(RadNR) = v & OlikaRader(RadNR)
RadNR = RadNR + 1
Next
Next
Next
q = q * AntalTecken
Next
End Function
</code>Sv: multidim.Array
När det sådana enorma datamängder så undrar jag
om det inte är bättre att du använder en Random Access fil
ex på hur jag lagrar temperaturdata.Datatypen ser inte exakt
ut så här men beskrivningen gäller hur du skulle kunna tänka.
Private Type TEMPDATA
Datum As String * 10
Klocka As String * 8
XCord As Long
YCord As Single
End Type
Private Sub WriteRecord()
Dim Entry As TEMPDATA
Dim DATAFILE As String
Dim RecordNumber As Long
Dim FileNum As Long
DATAFILE = App.Path & "\Temperatur02.dat"
FileNum = FreeFile
Open DATAFILE For Random As #FileNum Len = Len(Entry)
RecordNumber = LOF(FileNum) \ Len(Entry) + 1
' Make record and save it to file
Call MakeRecord(Entry)
Put #FileNum, RecordNumber, Entry
Close #FileNum
End Sub
Private Sub MakeRecord(Entry As TEMPDATA)
Entry.Datum = Label1.Caption
Entry.Klocka = Label2.Caption
Entry.XCord = Xpos
Entry.YCord = tempC
End Sub
mvh
SvenSv: multidim.Array
<code>
Option Base 0
Dim OlikaRader() As String
Private Function SkapaOlikaRader2(RadLangd As Byte, AntalTecken As Byte, MaxAntalEttor As Byte, MinAntalEttor As Byte)
Dim x#, y#, dblAntalRader#, strStrang$, intAntalEttor%
Dim intRad(13) As Integer
ReDim OlikaRader(AntalTecken ^ RadLangd) As String
dblAntalRader = 1
For x = 1 To (AntalTecken ^ RadLangd)
strStrang = ""
intAntalEttor = 0
For y = RadLangd To 1 Step -1
If intRad(y) = 2 Then
intRad(y) = 0
intRad(y - 1) = intRad(y - 1) + 1
End If
If intRad(y) = 1 Then intAntalEttor = intAntalEttor + 1
strStrang = intRad(y) & strStrang
Next
If intAntalEttor <= MaxAntalEttor And intAntalEttor >= MinAntalEttor Then
OlikaRader(dblAntalRader) = strStrang
dblAntalRader = dblAntalRader + 1
End If
intRad(RadLangd) = intRad(RadLangd) + 1
Next
OlikaRader(0) = dblAntalRader - 1
ReDim Preserve OlikaRader(dblAntalRader - 1)
End Function
</code>