---
title: "läs in txtfil till 2 dimensionell array."
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/47607-läs-in-txtfil-till-2-dimensionell-array"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "T_Codez"
published: "2002-07-10T08:40:53.000Z"
updated: "2003-01-03T13:26:17.000Z"
replies: 19
views: 665
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/47607-läs-in-txtfil-till-2-dimensionell-array"
---

# läs in txtfil till 2 dimensionell array.

## #1 — T_Codez, 2002-07-10T08:40Z

Hej hej :-) 

Nu har jag nästa lilla txt fil fundering.

Igår lärde jag mig av @nders hur man läser in varje rad från en textfil till en array på en gång.

Set fso = CreateObject("Scripting.FileSystemObject")
	Set textfil3 = fso.OpenTextFile(server.mappath("./") & "\\grannar.txt",1, False)
	text = textfil3.ReadAll
	arrRows = split(text, vbCrLf)	
	textfil3.close

Nästa steg är att jag även skulle vilja
ha en 2 dimensionerad array. Där raden får ett
värde.

typ: array(1), Precis som tidigare.

Och det nya är att varja rad har 4 värden
som är semikolon separerade i txtfilen typ:

Kalle;Anka;Ankborg;kalle.anka@ankeborg.com
Kajsa;Anka;Ankborg;kajsa.anka@ankeborg.com

och då ska raden få (flera) värden t ex:

array(1.1) = Kalle
array(1.2) = Anka
array(1.3) = Ankeborg
array(1.4) = <kalle.anka@ankeborg.com>

Kan man göra det på någe vänster...

Har testat ett gäng olika varienter på raden

	arrRows = split(text, vbCrLf)

och lagt till: ";" i den på många olika sätt utan att lyckas.

Antar att jag kanske måste ha en ny split kanske...

Vet ni hur ?

Tack för uppmärksamheten

/T

Permalänk: https://www.webforum.nu/p/47607

## #2 — LAMP, 2002-07-10T08:45Z

Lite begreppsförvirring. ;)

Dimmad brukar man säga när man dimmar variabler, object mm. Ex:

dim ture, gote, kanin, vit

Jag misstänker att du menar en 2 dimensionell array? ;)

Permalänk: https://www.webforum.nu/p/716256

## #3 — T_Codez, 2002-07-10T08:47Z

\*Fixat\*

Thanks för korrigeringen och begreppslektionen :e

Permalänk: https://www.webforum.nu/p/716258

## #4 — PatrikB, 2002-07-10T09:59Z

detta funkar helt ok:

```
<%
Option Explicit

Response.Buffer = True

Dim strFilePath
Dim strFileContent

Dim varMembers

Dim N

strFilePath = Server.MapPath("/arrays/members.txt")

strFileContent = GetFileContent(strFilePath)

varMembers = StringTo2DArray(strFileContent, vbcrlf, ";")
%>
<html>
<head>
<title>File to 2-dimensional array</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#FFFFFF" text="#000000">
<%
If IsArray(varMembers) Then
	For N = 0 TO UBound(varMembers,2)
		Response.Write "<A href=""mailto:" & varMembers(3,N) & """>" & _
			varMembers(0,N) & " " & varMembers(1,N) & "</A>, " & varMembers(2,N) & "<BR>"
	Next
End If
%>
</body>
</html>
<%
'## -- hämta allt innehåll i en text-fil --
Function GetFileContent(sFilePath) ' As String
	Dim objFSO, objFile
	Dim strFileContent
	
	Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
	
		Set objFile = objFSO.OpenTextFile(sFilePath,1, false)
			strFileContent = objFile.ReadAll
		Set objFile = Nothing
	
	Set objFSO = Nothing
	GetFileContent = strFileContent
End Function

Function StringTo2DArray(sString, vFirstSplit, vSecondSplit)
	Dim varTemp, varTemp2, var2DTemp
	Dim I, N, intPos, intIndex
	
	'## -- splita strängen för att få en array med all info --
	varTemp = Split(sString, vFirstSplit)
	If IsArray(varTemp) Then
		intIndex = UBound(varTemp)
		intPos = UBound(Split(varTemp(0), vSecondSplit))
		ReDim var2DTemp(intPos, intIndex)
		For I = 0 TO intIndex
			'## -- splitta varje index för info-arrayn för att
			'##    kunna ta ut detaljerad information
			varTemp2 = Split(varTemp(I), vSecondSplit)
			
			'## -- spar detaljinfo till en 2-D Array --
			For N = 0 TO intPos
				var2DTemp(N,I) = varTemp2(N)
			Next
		Next
	End If
	'## -- returnera resultatet som en 2-D array --
	StringTo2DArray = var2DTemp
End Function
%>
```

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/716311

## #5 — T_Codez, 2002-07-10T10:18Z

Thankz! :e 

Ska genast grotta ner mig i denna till dess att jag fårstår den till fullo...  :-)

Permalänk: https://www.webforum.nu/p/716315

## #6 — T_Codez, 2002-07-10T11:07Z

Hej igen

PatrikB - Koden du lämnade var helt okay (den kändes dock lite tung att sätta in sig i just nu). Den gav mig dock uppslag till följande ide som fungerar. men jag skulle behöva lite hjälp med att skapa ytterligare en dimension i den.

Så här ser det ut nu:

dim r, row, instream

Set FileObject = Server.CreateObject("Scripting.FileSystemObject")
Set InStream = FileObject.OpenTextFile (Server.Mappath ("textfil2.txt"),1, False)

do while not instream.atEndOfStream

	row = instream.readline
	items = split(row, ";")
	helaraden = split(row, vbCrLf)

                här skull jag vilja skapa en 2 dimensionell array som läser in värdena från  helaraden(index) och items(index)

                Typ att ArrayAll(helaraden(index).items(index))

                Jag är tyvärr inte så haj på flerdimensionerade arrayer
men det borde gå. Eller hur?

loop
inStream.close

**Vad tror ni om det? Har ni några ideer?** 

Ska givetvis söka på forumet också   ;)

Permalänk: https://www.webforum.nu/p/716351

## #7 — T_Codez, 2002-07-10T12:21Z

Någonting sånt här kanske:

c = 0

Set FileObject = Server.CreateObject("Scripting.FileSystemObject")
Set InStream = FileObject.OpenTextFile (Server.Mappath ("textfil2.txt"),1, False)

do while not instream.atEndOfStream

	c2 = 0

	row = instream.readline
	items = split(row, ";")
	helaraden = split(row, vbCrLf)

	arrayall(c,c2) = helaraden(c) 'Rad 74
		Do while c2 \<\> 4
		arrayall(c,c2) = items(c2)
		c2 = c2 + 1
		loop
	c = c + 1
loop
inStream.close

Detta ger dock ett felmeddelande som säger:

Error Type:
Microsoft VBScript runtime (0x800A000D)
Type mismatch: 'arrayall'
/tt.asp, line 74

Lite osäker på initieringen av en array med fler dimensioner. Det är nog det som är den mest yrsliga just nu.

Har glidit runt en del nu men inte blivit så mycket klokare av det...

Någon därute som vet?

Permalänk: https://www.webforum.nu/p/719272

## #8 — T_Codez, 2002-07-10T13:09Z

Okay... Har nu kommit lite längre... (tror jag)

Har efter en del trillande fram till följande:

dim r, row, instream, helaraden, c, c2, ArrAll(0,0)

c = 0

Set FileObject = Server.CreateObject("Scripting.FileSystemObject")
Set InStream = FileObject.OpenTextFile (Server.Mappath ("textfil2.txt"),1, False)
'row = instream.ReadLine
'items = split(row, vbCrLf)

do while not instream.atEndOfStream

	c2 = 0
'  räknar rader...
	row = instream.readline
	items = split(row, ";")
	helaraden = split(row, vbCrLf)

	Ubound(ArrAll,1) = c          (rad 73)
		Do while c2 \<\> 4
	    Ubound(ArrAll,2) = items(c2)
		 c2 = c2 + 1
	    Redim ArrAll(c,c2)
		loop
	c = c + 1
	Redim ArrAll(c,c2)
loop
inStream.close

Det behövdes några redim etc.

Men jag får fortfarande ett felmess som säger:

Error Type:
Microsoft VBScript runtime (0x800A000D)
Type mismatch: 'Ubound'
/tt.asp, line 73

Har inte en susning vad det kan bero på... 

Misstänker att det kan kanske ha någe med initieringen att göra kanske... Den som lever får se...

Anyone  :q

Permalänk: https://www.webforum.nu/p/719316

## #9 — PatrikB, 2002-07-10T15:23Z

ehhh, gick den koden som jag visade långsamt?
Den som du använder och läser rad för rad går ca 6 ggr långsammare.

Med koden jag gav lästa jag in ca 20 000 rader in i en 2D array på ca 500 ms (460 - 520 ms) den varianten att läsa rad för rad tog ca 3000ms dvs 3 sek ( 2880 - 3250 ms)

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/719420

## #10 — PatrikB, 2002-07-10T15:29Z

till din fråga på om rad 73:

UBound är en metod som returnerar ett värde. dvs, du kan inte "skriva" till UBound() eftersom det inte är en egenskap

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/719423

## #11 — T_Codez, 2002-07-10T15:30Z

Naaeeejj... alltså... 

det var mer att jag ville åstakomma något som jag kunde förstå lättare... Eller nåt sånt... samt, och, eller kanske typ...

Plus att jag är nyfiken på om det går att lägga in två 1 dimensionella i en 2-dimensionell array samt hur det
går till etc...

Man måste ju testa sig fram lite...  :OO 

vägen till total kod förståelse är en lång och krokig väg...

Permalänk: https://www.webforum.nu/p/719424

## #12 — T_Codez, 2002-07-10T15:51Z

Då är frågan hur själva värde tilldelningen till en array går till?

Hur ser en vanlig syntax för det ut?  
Kanske dags att skaffa en bokluring snart för min del... Så ni slipper såna här Basic frågor (i guess). 

Har letat mig runt men inte hittat något (för mig) glasklart. Jag var på "Vides" sida och kollade och den var kanon. Men ändock ingen info.(som jag kunde hitta) om själva tilldelningen av värden till elementen i en 2 - dimensionell array.

well...

C ya

Permalänk: https://www.webforum.nu/p/719440

## #13 — T_Codez, 2002-07-10T21:52Z

Lånade en bok med Lite info om Textstreaming...

"kanske kan komma till användning någon gång"
 

**TEXTSTREAM OBEKTETS EGENSKAPER            
\-----------------------------------------------

Egenskap			                Beskrivning
\-------------               	                                --------------**
 AtEndOfLine				Returnerar True om filpekarna är vid slutet på en rad i filen.
 AtEndOfStream				Returnerar True om filpekaren är i slutet av filen.
 Column					Returnerar kolumnnumret för aktuella tecken i filen.
 Line				Returnerar aktuellt radnummer i filen 

 Egenskaperna AtEndOfLine och AtEndOfStream är bara tillgängliga för en fil som har öppnats
 för "iomode" ForReading. Om du testar annat blir det bara error mess. 

 **TEXTSTREAM OBEKTETS METODER            
 \---------------------------------------

 Metod			Beskrivning
 \--------                                     ---------------**

 Close()		                Stänger öppen fil.
 Read(numchar)		Läser numchar antal tecken från filen.
 ReadAll()		                Läser hela filen som en enda sträng.
 ReadLine()		Läser en rad(fram till en radmatning)från filen som en sträng.
 Skip(numchar)		Hoppar över och ignorerar numchars antal tecken vid läsning från filen.
 SkipLine()    		Hoppar över och ignorerar nästa rad vid läsning från filen.
 Write(string)		Skriver string till filen.
 WriteLine()		Skriver string(valfri)och ett radmatningstecken till filen.
 WriteBlankLines(n)	                Skriver n radmatningstacken till filen.

Permalänk: https://www.webforum.nu/p/719639

## #14 — Ekström, 2002-07-10T21:56Z

Härmed utnämer jag T_Codez till den oövervinnerlige mästaren när det gäller att skriva flera inlägg på rad. :) :birp

Permalänk: https://www.webforum.nu/p/719644

## #15 — T_Codez, 2002-07-10T22:09Z

Själv är bäste dräng  ;)  Eller!?

Well... inte alla ggr kanske  :r 

Men du måste medge att det är inte så fel nästa gång någon vill ha lite fakta om Textstreams...

Jag kommer vara en av dem t ex. Sitter på en publik plats och skriver av en bokluring... av det jag tror mig behöva imorgon etc.

Jag ska banne mig bena ut detta och lite till. Nästa steg blir
arrayerna.

Bra förresten!  :e 

Den ska ju med...

  ArrAll(c,c2) = c 
	Do while c2 \<\> 4 
	  ArrAll(c,c2) = items(c2) 
	  c2 = c2 + 1 
	  Redim ArrAll(c,c2) 
	loop 
   c = c + 1 
   Redim ArrAll(c,c2) 

Näruu... Ekström. Nu tar jag mig en sista "lill-lördag" 

 :birp 

"Hepå're"

Permalänk: https://www.webforum.nu/p/719648

## #16 — PatrikB, 2002-07-11T06:47Z

> Härmed utnämer jag T_Codez till den oövervinnerlige mästaren när det gäller att skriva flera inlägg på rad

he, he ... att prata mid sig själv är alltid bäst ..... man får de svar man vill ha :e

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/719699

## #17 — Jesper T, 2003-01-03T00:41Z

PatrikB: Jag får "Subscript out of range: 'N' "
<http://www.webforum.nu/showthread.php?s=&postid=389852#post389852>
Textfilen ser ut så här:

```
Jesper;Thorn;08-557 849 35;jesper@thorn.as
Olle;Johnsson; 08-545 21 55;jesper@thorn.as
Kalle;Anka;Ankborg;kalle.anka@ankeborg.com 
Kajsa;Anka;Ankborg;kajsa.anka@ankeborg.com
```

Permalänk: https://www.webforum.nu/p/901408

## #18 — PatrikB, 2003-01-03T10:47Z

Hello!

gammal tråd
återkommer

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/901502

## #19 — PatrikB, 2003-01-03T10:59Z

ok, tillbaka ..... 

La till lite felhantering/koll att vi har det vi ska ha ;)

```
Function StringTo2DArray(sString, vFirstSplit, vSecondSplit)
	Dim varTemp, varTemp2, var2DTemp
	Dim I, N, intPos, intIndex
	
	'## -- splita strängen för att få en array med all info --
	varTemp = Split(sString, vFirstSplit)
	If IsArray(varTemp) Then
		intIndex = UBound(varTemp)
		intPos = UBound(Split(varTemp(0), vSecondSplit))
			
		ReDim var2DTemp(intPos, intIndex)
		
		For I = 0 TO intIndex
			'## -- splitta varje index för info-arrayn för att
			'##    kunna ta ut detaljerad information
			varTemp2 = Split(varTemp(I), vSecondSplit)
			
			'## -- kontrollera att vi har en array --
			If UBound(varTemp2) > -1 Then
				'## -- spar detaljinfo till en 2-D Array --
				For N = 0 TO intPos
					var2DTemp(N,I) = varTemp2(N)
				Next
			End If
		Next
	End If
	'## -- returnera resultatet som en 2-D array --
	StringTo2DArray = var2DTemp
End Function
```

En sak som slår mig när jag ser din text-fil är att du är inkonsekvent i vilka positioner värdena återfinns.

I 3:e positionen på rad 1 och 2 innehåller telenummer medans i rad 3 o 4 innehålls den positionen av stad.

en mall att jobba med är:

förnamn;efternamn;stad;telenr;mail

Om inget värde finns ska ska positionen bli tom eller ett defaultvärde skrivas in, typ - 

ex:
Patrik;Berggren;Fiholm;-;info (AT) mrwize (DOT) nu

cya,
PatrikB

Permalänk: https://www.webforum.nu/p/901507

## #20 — Jesper T, 2003-01-03T13:26Z

Kanoooon!

Permalänk: https://www.webforum.nu/p/901628

---

Tråden på webben: https://www.webforum.nu/amne/asp/47607-läs-in-txtfil-till-2-dimensionell-array
