Avatar billede brynil Nybegynder
13. september 2001 - 16:42 Der er 7 kommentarer og
1 løsning

Indlæs textfil i multiArray

Hej!
Jeg har en indkøbskurv gemt i et 2-dim array .. localcart(4,20). Det gemmer jeg i en fil på flg. måde:

set objFSO=Server.CreateObject(\"Scripting.FileSystemObject\")
set objTstream = objFSO.CreateTextFile(\"E:\\laptop\\MinFil.txt\", true, false)

FOR i = 0 TO UBOUND( localCart, 2 )
IF localCart( CARTPID, i ) <> \"\" THEN
orderTotal = orderTotal + ( localCart( CARTPPRICE, i ) * localCart( CARTPQUANTITY, i ) )

objTstream.writeLine localcart(cartpquantity, i)
objTstream.writeLine Server.HTMLEncode( localCart( CARTPNAME, i ) )

END IF
NEXT
----------
Textfilen ser således ud:

3
navnEt
1
navnAndet
----------

Kan nogen fortælle mig hvordan man tilbagelæser værdierne fra filen til arrayet? Evt. ved at gemme arrayet på disk i et andet format!
Avatar billede nute Nybegynder
13. september 2001 - 16:53 #1
hmm....som en \"sikkerhetsfunksjon\" ville jeg gjerne ha skrevet til filen på følgende måte:

objTstream.writeLine localcart(cartpquantity, i) & \"#$#\" & Server.HTMLEncode( localCart( CARTPNAME, i ) )

deretter vil din fil se sånn ut:

3#$#navnEt
1#$#navnAndet

deretter kan du enklere lese denne fil (for å forsikre deg mot at det ikke er noen tomme linjer som ødelegger rekkefølgen...)

set objFSO=Server.CreateObject(\"Scripting.FileSystemObject\")
set fileObj = objFSO.GetFile(\"E:\\laptop\\MinFil.txt\")
set streamObj = fileObj.OpenAsTextStream( 1, -2 )

while( NOT streamObj.AtEndOfStream )
  strText = streamObj.ReadLine
  tmpArr = SPLIT( strText, \"#$#\" )
  dinArray([dinIndex],[dinIndex]) = tmpArr(0) 
  dinArray([dinIndex],[dinIndex]) = tmpArr(1) 
wend

Kan dette hjelpe ?

/nute
Avatar billede brynil Nybegynder
13. september 2001 - 18:55 #2
Jeg checker lige om jeg kan få det til at virke. Der går nok lidt tid.
Avatar billede brynil Nybegynder
13. september 2001 - 21:25 #3
Hej nute
Den skriver fint til filen, f.ex:

123#$#Pr&#248;veflaske t/partikkelt&#230;lling
32#$#Plastichaner
1#$#1/2 ltr. Pr&#248;veflasker

..varenavnene indeholder alle mulige tegn og kan ikke undgås.

Mit sessions-array oprettes således:

IF NOT isArray( Session(\"cart\")) THEN
  DIM localCart( 4, 20 )
ELSE
  localCart = Session( \"cart\" )
END IF

Jeg henter værdierne iht dit svar ind i localCart(4,20) som herunder:

set objFSO=Server.CreateObject(\"Scripting.FileSystemObject\")
set fileObj=objFSO.GetFile(\"E:\\laptop\\MinFil.txt\")
set streamObj=fileObj.OpenAsTextStream(1, -2)

while(NOT streamObj.AtEndOfStream)
    strText = streamObj.ReadLine
    tmpArr = SPLIT(strText, \"#$#\")

    LocalCart(4,20)=tmpArr(0)
    LocalCart(4,20)=tmpArr(1)
wend

men jeg kan ikke få værdierne ind i:

  Session(\"cart\") = localCart

Det er tanken, at en \'kunde\' skal kunne hente en uafsluttet bestilling ind fra textfilen. Kan det gøres nogenlunde enkelt?

Avatar billede nute Nybegynder
14. september 2001 - 09:58 #4
hve mener du med \"kan ikke få værdiene ind i\" ? Kan du ikke legge arrayet inn i session\'en ? eller kan du ikke få lagt inn alle verdiene inn i ditt array ?

hvis det er det siste, så er det nok fordi du legger alle verdiene inn i Localcart(4,20). Helt ærlig, så har jeg aldri arbeidet med VB\'s multidimensjonelle arrays, så jeg vet ikke helt hvordan de fungerer. Personlig ville jeg nok ha opprettet 2 arrays (en for \'varenummer\' og en for \'varenavn\'). Disse vil jeg alltid holde synkronisert ved at en verdi i det ene array alltid tilsvarer den verdi på samme index i den andre array...

/nute
Avatar billede brynil Nybegynder
14. september 2001 - 12:45 #5
Lyder godt. Jeg kan ikke lide multiArrays. Kan du give et eksempel på hvordan du synkroniserer 2 arrays før jeg sender points til dig??
Avatar billede nute Nybegynder
14. september 2001 - 12:58 #6
gjør om denne:

set objFSO=Server.CreateObject(\"Scripting.FileSystemObject\")
set fileObj=objFSO.GetFile(\"E:\\laptop\\MinFil.txt\")
set streamObj=fileObj.OpenAsTextStream(1, -2)

while(NOT streamObj.AtEndOfStream)
    strText = streamObj.ReadLine
    tmpArr = SPLIT(strText, \"#$#\")

    LocalCart(4,20)=tmpArr(0)
    LocalCart(4,20)=tmpArr(1)
wend

til noe ála:

set objFSO=Server.CreateObject(\"Scripting.FileSystemObject\")
set fileObj=objFSO.GetFile(\"E:\\laptop\\MinFil.txt\")
set streamObj=fileObj.OpenAsTextStream(1, -2)
Dim numberArr, itemArr, index
numberArr = Array(0)
itemArr  = Array(0)
index    = 0
while(NOT streamObj.AtEndOfStream)
    strText = streamObj.ReadLine
    tmpArr = SPLIT(strText, \"#$#\")
    ReDim preserve numberArr( UBOUND(numberArr) + 1 )
    ReDim preserve itemArr( UBOUND(itemArr) + 1 )

    numberArr(counter)=tmpArr(0)
    itemArr(counter)=tmpArr(1)
wend

er det alltid en verdi i itemArr som hører til en verdi i numberArr

/nute
Avatar billede brynil Nybegynder
14. september 2001 - 23:17 #7
multiTak, nute. Så har jeg noget at arbejde videre med.
/birger
Avatar billede nute Nybegynder
15. september 2001 - 10:32 #8
anytime :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester