Avatar billede mr.gessle Nybegynder
10. september 2002 - 08:46 Der er 9 kommentarer

At læse og sortere indholdet fra en tekstfil

Jeg har en tekstfil indeholdende 4 kolonner af oplysninger. Hver kolonne er adskilt med tegnet #. I en kolonne optræder den samme oplysning gentagende gange.
Altså:
#Varenr #Unik varebetegnelse #varekategori #pris

Altså vil varekategorien optræde gentagende gange.

Nu vil jeg altså lave et script som først læser varekategorierne og præsenterer dem pænt på siden. Varekategorierne skal helst være alfabetisk sorterede og må ikke fremkomme mere end én gang.
Dernæst skal varekategorien kædes videre til en side, som læser hver enkelt varebetegnelse, varenr og pris og ligeledes præsenterer disse pænt.

Hvordan gøres dette nemmest og kodeeksempler ville være lækkert?
Avatar billede medions Nybegynder
10. september 2002 - 08:52 #1
Jeg ville nok kaste dine linje ind i et Array, og så bagefter oprette endnu et Array til dine Vareoplysninger. Fx.

Array Linjer...
  Array varoplysninger...

//>Rune
Avatar billede mr.gessle Nybegynder
10. september 2002 - 08:55 #2
Den ide har jeg selv fået. Men problemet er, at jeg gerne skulle have sorteret disse arrays. Det er den tricky del eftersom tekstfilen er lavet således, at varegruppen kan fremkomme gentagende gange i adskilte blokke hvis du forstår... Hvis arrayet skal gennemløbes og præsenteres på siden må kategorien ikke fremkomme mere end en gang og skal helst være alfabetisk sorteret.
Avatar billede mccannon Nybegynder
10. september 2002 - 08:55 #3
set FSO = Server.CreateObject("Scripting.FileSystemObject")
set readfile = FSO.OpenTextFile("c:\somefile2.txt", 1, false)
indhold = readfile.ReadAll
readfile.close
arrindhold = split(indhold,"#")
set fso = nothing
for i = 0 to ubound(arrindhold) step 4
response.write arrindhold(i) & "<br>"
next
Avatar billede askhoej Praktikant
10. september 2002 - 08:58 #4
Avatar billede mccannon Nybegynder
10. september 2002 - 09:05 #5
måske en lidt bedre løsning ...

set FSO = Server.CreateObject("Scripting.FileSystemObject")
fil = server.mappath("text.txt")

set readfile = FSO.OpenTextFile(fil, 1, false)
do until readfile.AtEndOfStream
indhold = indhold & readfile.readline
loop

readfile.close
arrindhold = split(indhold,"#")
set fso = nothing
for i = 0 to ubound(arrindhold)
response.write arrindhold(i) & "<br>"
next
Avatar billede mccannon Nybegynder
10. september 2002 - 09:09 #6
textfil indhold .:
hej#
med#
dig#
hej#
med#
dig#

kode .:
set FSO = Server.CreateObject("Scripting.FileSystemObject")
fil = server.mappath("text.txt")

set readfile = FSO.OpenTextFile(fil, 1, false)
do until readfile.AtEndOfStream
indhold = indhold & readfile.readline
loop

readfile.close
arrindhold = split(indhold,"#")
set fso = nothing
for i = 0 to ubound(arrindhold) -1 step 3
response.write arrindhold(i) & "<br>"
response.write arrindhold(i+1) & "<br>"
response.write arrindhold(i+2) & "<br>"
next

output.:
hej
med
dig
hej
med
dig
Avatar billede mr.gessle Nybegynder
10. september 2002 - 09:17 #7
Det er skam fint nok... Men sæt nu værdierne optræder flere gange i digkolonnen. Den skal kun printe værdien første gang, men tage resten af kolonnerne med i pågældende linie og sortere hvad der nu kommer i denne kolonne alfabetisk? ;-)
Avatar billede mccannon Nybegynder
10. september 2002 - 09:20 #8
hmm alfebetisk, ved jeg ikke engang om man kan når det komemr fra en text fil..hummm
Avatar billede askhoej Praktikant
10. september 2002 - 19:33 #9
Hurtigt og utestet:

--------------------------------------
data.txt indeholder:

#1#...#Bøger#43kr
#1#...#Skibe#43kr
#1#...#Bøger#43kr
#1#...#Skibe#43kr
#1#...#Bøger#43kr
#1#...#Heste#43kr
#1#...#Grise#43kr
#1#...#Bøger#43kr
#1#...#Penalhuse#43kr
#1#...#Bøger#43kr
#1#...#Bøger#43kr
#1#...#Bøger#43kr
#1#...#Penalhuse#43kr
#1#...#Bøger#43kr
#1#...#Bøger#43kr

--------------------------------------
kode:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
    <title>Eksperten 256109</title>
</head>

<body>
<%
set FSO = Server.CreateObject("Scripting.FileSystemObject")
fil = server.mappath("data.txt")

set readfile = FSO.OpenTextFile(fil, 1, false)

strFile = ""
do until readfile.AtEndOfStream
    strFile = strFile & readfile.readline & "¤"
loop

readfile.close
set fso = nothing

arrLines = Split(strFile,"¤")
antal = 100 'antal linier i datafil
ReDim arrVarekategorier(0,antal)

Dim arrLine
For i = 0 To UBound(arrLines)
    arrLine = Split(arrLines(i),"#")
   
    for j=3 To Ubound(arrLine)-1
        arrVarekategorier(0,i) = arrLine(j)
    Next

Next

Call BubbleSort(arrVarekategorier, 0, 0)

prevKategori = ""
for i = 0 to ubound(arrVarekategorier,2)

    if Len(arrVarekategorier(0,i)) > 0 AND NOT prevKategori = arrVarekategorier(0,i) Then
        response.write arrVarekategorier(0,i) & "<br>"
    End If
    prevKategori = arrVarekategorier(0,i)
   
next

Private Sub BubbleSort(byRef arrTemp, byVal sDim, byVal sSort)

' ======================================================================
' Name:        BubbleSort
' Arguments:    arrTemp = The array you want to be sorted
'    sDim = The dimension you want to sort for
'        sSort = Asc (0) OR Desc (1)
' Returns:    A sorted array
' Developer:    Dennis Knappe (dennis@activeserverpages.dk)
'
' This sourcecode can only be used if you DO NO remove my name and e-mail
' ======================================================================

    Dim n
    Dim y
    Dim t
    Dim tmpTop
    Dim tmpVal
    Dim iBookMark
    Dim BubbleElement

    BubbleElement = False

    For n = 0 To UBound(arrTemp,2)
        tmpTop = arrTemp(sDim,n)
        iBookmark = n

        For y = n To UBound(arrTemp,2)
            If sSort = 0 Then
                If (tmpTop > arrTemp(sDim,y)) Then
                    BubbleElement = True
                End If
            Else
                If (tmpTop < arrTemp(sDim,y)) Then
                    BubbleElement = True
                End If
            End If

            If BubbleElement Then
                tmpTop = arrTemp(sDim,y)
                iBookmark = y
                BubbleElement = False
            End If
        Next

        For t = 0 to UBound(arrTemp, 1)
            tmpVal = arrTemp(t, n)
            arrTemp(t, n) = arrTemp(t, iBookmark)
            arrTemp(t, iBookmark) = tmpVal
        Next
    Next

End Sub
%>


</body>
</html>

---------------------------------------
/askhoej
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