Hur får jag den här koden som gör en array av en txt fil att hämta alla bokstäver som kordinater. Nu tar den bara och skriver ut (0, 0) (1, 1) (2, 2) osv. Jag vill att den ska ta (0, 1) (0, 2) (1, 0) och alla sånna tal också. Går det att lösa med hjälp av en split funktion eller nått annat? Alltså jag vill öppna en fil till en 2D array. Så om det står Du har en fast storlek? Humm. Nu hämtar den ut hela rader på kordinaterna ex: Jag har försökt att trycka in split funktioner i koden i en hel dag och slitit så mycket hår så att jag blivit skallig. Men har fortfarande inte kommit en bit längrae på vägen. Jag ska göra några sista desperata försök som ni får veta hur det gick med senare idag eller imorron. <code> Här kommer en alternativ lösningSplit - Array - textfil
Dim f As Integer, i As Integer, j As Integer
Dim FileName As String, rutmonster$()
FileName = App.Path & "\map1.txt"
f = FreeFile
i = 0
If Dir(FileName) <> "" Then
Open FileName For Input As f
Do While Not EOF(f)
If i Mod 15 = 0 Then ReDim Preserve rutmonster$(i + 14, i + 14)
Line Input #f, rutmonster(i, i)
i = i + 1
Loop
Close f
End IfSv: Array
GG
SS
i tex en txt fil så kommer arrayen att läsa in det som
rutnar(0, 0) = "G"
rutnar(1, 0) = "G"
rutnar(0, 1) = "S"
rutnar(1, 1) = "S"
Men med min kod blir det bara att den gör en array som har 0, 0 - 1, 1 osv. Så kort sagt missar den att skriva in kordinaterna 1, 0 - 0, 1 osvSv: Array
Då använder du dig av principen (obs. pseudokod):
<code>
For y=1 To MaxX
For x=1 To MaxY
Array(x,y)=Nästa från fil
Next x
Next y
</code>Sv: Array
Text filen har inehållet
G|G|G|G|G|G|G|G|G|G|G|G|G|G|G
G|G|G|G|G|G|G|G|G|G|G|G|G|G|G
G|G|G|G|G|G|G|G|G|G|G|G|G|G|G
G|G|G|G|G|G|G|G|G|G|G|G|G|G|G
G|G|G|G|G|G|G|G|G|G|G|G|G|G|G
G|G|G|G|G|G|G|G|G|G|G|G|G|G|G
G|G|G|G|G|G|G|G|G|G|G|G|G|G|G
G|G|G|G|G|G|G|G|G|G|G|G|G|G|G
G|G|G|G|G|G|G|G|G|G|G|G|G|G|G
G|G|G|G|G|G|G|G|G|G|G|G|G|G|G
G|G|G|G|G|G|G|G|G|G|G|G|G|G|G
G|G|G|G|G|G|G|G|G|G|G|G|G|G|G
G|G|G|G|G|G|G|G|G|G|G|G|G|G|G
G|G|G|G|G|G|G|G|G|G|G|G|G|G|G
G|G|G|G|G|G|G|G|G|G|G|G|G|G|G
DÅ den hämtar värde till kordinaterna 0, 0 så hämtar den hela raden alltså "G|G|G|G|G|G|G|G|G|G|G|G|G|G|G" sitället för att hämta alla bokstäver mellan "|". Jag hade tänkt mig en split kod för att kunna ha 2 bockstäver på varje kordinat den hämtar istället för 1 men lyckas inte få split koden in i koden som läser in text filen till arrayen.
Koden ser ut såhär just nu
<code>
Dim f As Integer
Dim rutmonster(15, 15) As String
FileName = App.Path & "\map1.txt"
f = FreeFile
Open FileName For Input As f
For Y = 0 To 14
For X = 0 To 14
Do While Not EOF(f)
Line Input #f, rutmonster(X, Y)
Loop
Next
Next
Close f
</code>
Jag vill alltså få så att då den läser den där txt filen ska den få värdena
rutmonster(0, 0) = "g"
rutmonster(1, 0) = "g"
rutmonster(2, 0) = "g"
rutmonster(3, 0) = "g"
rutmonster(4, 0) = "g"
rutmonster(5, 0) = "g"
rutmonster(6, 0) = "g"
rutmonster(7, 0) = "g"
rutmonster(8, 0) = "g"
rutmonster(9, 0) = "g"
rutmonster(10, 0) = "g"
rutmonster(11, 0) = "g"
rutmonster(12, 0) = "g"
rutmonster(13, 0) = "g"
rutmonster(14, 0) = "g"
rutmonster(0, 1) = "g"
rutmonster(1, 1) = "g"
rutmonster(2, 1) = "g"
rutmonster(3, 1) = "g"
rutmonster(4, 1) = "g"
rutmonster(5, 1) = "g"
rutmonster(6, 1) = "g"
rutmonster(7, 1) = "g"
rutmonster(8, 1) = "g"
rutmonster(9, 1) = "g"
rutmonster(10, 1) = "g"
rutmonster(11, 1) = "g"
rutmonster(12, 1) = "g"
rutmonster(13, 1) = "g"
rutmonster(14, 1) = "g"
OSV......
Finns det nått bättre sätt att läsa in en text fil till en array så att det blir som jag vill ha min funktion kan ni ju gärna ge mig råd om hur ni tänkt.Sv: Array
Sv: Array
Dim f As Integer
Dim rutmonster(14, 14) As String
dim strTemp as string
dim X as long, dim Y as long
FileName = App.Path & "\map1.txt"
f = FreeFile
Open FileName For Input As f
x = 0
Do While Not EOF(f)
y = 0
Line Input #f, strTemp
do while strtemp <> ""
if instr(1, strtemp, "|") > 0 then
rutmonster(x, y) = left(strtemp, instr(1, strtemp, "|")- 1)
strtemp = mid(strtemp, instr(1, strtemp, "|") + 1)
else
rutmonster(x, y) = strtemp
strtemp = ""
end if
y = y + 1
loop
x = x + 1
Loop
Close
</code>Sv: Split - Array - textfil
<code>
Sub main()
Const DELIMITER = "|"
Dim f As Integer
Dim filnamn As String
Dim rutmonster()
Dim i As Integer
Dim RadData As String
filnamn = "C:\Temp\MyFile.txt"
f = FreeFile
i = 0
Open filnamn For Input As f
Do While Not EOF(f)
Line Input #f, RadData
ReDim Preserve rutmonster(i)
rutmonster(i) = Split(RadData, DELIMITER, , vbTextCompare)
i = i + 1
Loop
Close f
End Sub
</code>
//
Janne