Avatar billede dp2001 Juniormester
28. maj 2002 - 10:03 Der er 24 kommentarer og
1 løsning

Sortering af array (txt-fil)

Hej

Jeg har en fil, produkt.txt - som jeg læser fra.

Filen er semikolon(;)-separeret og indeholder følgende (uddrag)....

"18800100";"Søm";"32";"Isenkram"
"18800109";"Skruer, søndag";"50";"Isenkram"

dvs.:
produktnummer
produkttekst
produktsortering
samleprodukttekst


- Jeg vil gerne implementere en mulighed for at sortere
på alle data i dette array, hhv. asc og desc. Dette skal gøres ved at sætte en kode fra 1-8 op i Request.Querystring - men hvem kan hjælpe mig med at lave en løsning til sortering af array udfra input i Request.Querystring? Jeg har læst MANGE artikler om sortering af array - men det er sort snak og jeg har ikke kunnet omsætte det til noget, som jeg kunne bruge.

Derfor mange point for hjælp!
Avatar billede eklander Nybegynder
28. maj 2002 - 10:08 #1
brug javascript's split-funktion

eks: split(";")
Avatar billede eklander Nybegynder
28. maj 2002 - 10:10 #2
hvis du skal have mulighed for at sortere i dine data, så er det nemmest hvis du opretter en database med din data i, og så lave udtræk ved hjælp af sql-strenge.
Avatar billede a1a1 Novice
28. maj 2002 - 10:25 #3
du kan også bruge din tekst fil som database, ved at oprette et dsn til den mappe som tekst filen ligger i.

det er nok det nemeste / smarteste.

som du selv er inde på er det "besværligt" at sortere en array....;)

:)
Avatar billede dp2001 Juniormester
28. maj 2002 - 11:16 #4
Jeg har tidligere haft data i database, men har netop omlagt til tekstfil, da netværksadministratoren på mit arbejde truer med at nedlægge access-drivere på nettet. Derfor er jeg tvunget ud i en array-løsning.
Avatar billede a1a1 Novice
28. maj 2002 - 11:28 #5
så må du bruge mit forslag, det virker fint, du kan enda køre sql queries på den.....
Avatar billede dp2001 Juniormester
28. maj 2002 - 12:27 #6
Og hvordan gør man så det?
Avatar billede a1a1 Novice
28. maj 2002 - 12:45 #7
faktisk på samme måde som med en database...

1. Lav et DSN (control panel -> administrative tools -> ODBC data sources -> system DSN - der vælger du Add - vælg microsoft text driver - Skriv et navn (datasourcename) - vælg det dir som .txt filen ligger i (behøver jo ikke at være .txt)

2. din asp fil fx...

Set oConn2 = Server.CreateObject("ADODB.Connection")
oConn2.Open <DIT DATA SOURCE NAME>
Set oRs = oConn2.Execute("select * from <DIN TEKST FIL>")
While Not oRs.EOF
Avatar billede a1a1 Novice
28. maj 2002 - 12:47 #8
hov...
response.write oRs(0) & "-" & oRs(1)

oRs.MoveNext
Wend
oRs.Close
Set oRs = Nothing
oConn2.Close
Avatar billede a1a1 Novice
28. maj 2002 - 12:55 #9
under options -> define format (i ODBC admin.) kan du angive hvad felterne hedder ( og deres datatype)

(vælg evt. format -> custom delimiter (skriv ;) -> tryk guess
min tekst fil fik navnet F1 til F18

så kan du udføre alm. sql queries på den.

fx. select * from text.txt WHERE F2 = 'Søm' ORDER BY F1


;)
Avatar billede dp2001 Juniormester
28. maj 2002 - 13:59 #10
Det er muligt, at jeg ikke helt har fattet det...

Min kode ser nu ud som følger..

<html>
<title>Forsøg</title>
<head>
</head>
<body>
<%
Set oConn2 = Server.CreateObject("ADODB.Connection")
oConn2.Open henvprod.txt
Set oRs = oConn2.Execute("select * from henvprod.txt")
While Not oRs.EOF

response.write oRs(0) & "-" & oRs(1) & "-" & oRs(2) & "-" & oRs(3)

oRs.MoveNext
Wend
oRs.Close
Set oRs = Nothing
oConn2.Close


%>
</body>
</html>


Får fejlen:

Microsoft VBScript runtime error '800a01a8'

Object required: 'oConn2'

/RAS_Online/trafik/henvprod2.asp, line 8

Jeg har ikke nogle erfaringer udi ADODB - hvad skal jeg angive i DATA SOURCE NAME - eller hvordan finder jeg frem til dette?
Avatar billede a1a1 Novice
28. maj 2002 - 14:06 #11
oConn2.Open henvprod.txt

skal være navnet på den datasource du har oprettet i odbc manageren

1. Lav et DSN (control panel -> administrative tools -> ODBC data sources -> system DSN - der vælger du Add - vælg microsoft text driver - Skriv et navn (datasourcename) - vælg det dir som .txt filen ligger i (behøver jo ikke at være .txt)

:)
Avatar billede a1a1 Novice
28. maj 2002 - 14:09 #12
ellers ser det fint ud
Avatar billede dp2001 Juniormester
28. maj 2002 - 14:11 #13
Jeg har lavet det der DSN. Men er det ikke noget, der kommer til at fungere lokalt?

Jeg vil jo have min henvprod.txt ud at ligge på en web-server og hente data dérfra.

Vil datasource og tekstfil i øvrigt ikke altid være det samme hér?
Avatar billede a1a1 Novice
28. maj 2002 - 14:18 #14
? lokalt

hvad mener du, ja det skal ligge på en webserver (det skal dit asp script også :) )

det skal ligge på samme server som asp scriptet (eller et tilkyttet netværks drev)
Avatar billede dp2001 Juniormester
28. maj 2002 - 14:21 #15
lokalt = min maskine (stationær).

jeg publicerer det jo til en web-server, som jeg ikke selv administrerer. Hvordan skal jeg så kunne lave ADODB-setup på denne?!?!
Avatar billede a1a1 Novice
28. maj 2002 - 14:21 #16
Vil datasource og tekstfil i øvrigt ikke altid være det samme hér?
Nej, datasourcename er "bare" en henvisning til den mappe .txt filen(erne) ligger i, du kan godt have flere forskellige i samme dir (derfor strSQL = "select * from something.txt ")
Avatar billede a1a1 Novice
28. maj 2002 - 14:25 #17
du kan godt teste det på din lokale maskine (kræver jo installeret IIS)

Du kan ikke lave ODBC set up på en remote maskine, men det må du jo kunne få dem der styrer serveren til (du kan sagtens udskifte filen uden problemmer)
Avatar billede dp2001 Juniormester
28. maj 2002 - 14:28 #18
Så det er udelukkende for at teste det lokalt, at jeg bør sætte ADODB op inden?

Hvis DATASOURCE angiver stien, burde følgende virke...?


<html>
<title>Forsøg</title>
<head>
</head>
<body>
<%
Set oConn2 = Server.CreateObject("ADODB.Connection")
oConn2.Open /trafik/
Set oRs = oConn2.Execute("select * from henvprod.txt")
While Not oRs.EOF

response.write oRs(0) & "-" & oRs(1) & "-" & oRs(2) & "-" & oRs(3)

oRs.MoveNext
Wend
oRs.Close
Set oRs = Nothing
oConn2.Close


%>
</body>
</html>
Avatar billede a1a1 Novice
28. maj 2002 - 14:31 #19
det er IKKE ADODB MEN ODBC :)

datasource SKAL være en ODBC datasource som du HAR oprettet...(ikke bare en mappe henvisning)

har lige "opdaget" at odbc adminen laver en schema.ini fil med "oplysninger" om dine feltnavne, datatyper mv...
(den vil du jo kunne ændre til at passe lige til dine felter/værdier)
[xx.txt]
ColNameHeader=False
Format=CSVDelimited
MaxScanRows=25
CharacterSet=OEM
[xxx.txt]
ColNameHeader=False
Format=CSVDelimited
MaxScanRows=25
CharacterSet=OEM
[mgda70103800.txt]
ColNameHeader=False
Format=Delimited(;)
MaxScanRows=25
CharacterSet=OEM
Col1=F1 Char Width 255
Col2=F2 Char Width 255
Avatar billede dp2001 Juniormester
28. maj 2002 - 14:36 #20
Et step af gangen - du er ikke særlig pædagogisk! ;-)

Jeg skulle da ikke lave ODBS-opsætning, dengang jeg lavede en Access-løsning.

Så DATASOURCE er et slags synonym for stien?

Skal jeg uploade schema.ini til web - og hvad gavn kan det gøre for mig?
Avatar billede a1a1 Novice
28. maj 2002 - 14:57 #21
Der er 2 step's :)
1. lav dsn
2. lav asp fil

DATASOURCE er noget som "serveren" kender, kan også være til andre typer databaser og indeholde brugernavn og password (som jo så ikke skal
indtastes i din connection string)
Avatar billede a1a1 Novice
28. maj 2002 - 15:10 #22
schema.ini indeholder "specielle" oplysninger om din tekst fil felt typer, osv...

min txt fil xxx.txt har følgende indstillinger
[mgda70103800.txt]
ColNameHeader=False ~ der er ikke en første række der fortæller feltnavnne
Format=Delimited(;) ~ hvad er det delt op med
MaxScanRows=25 ~ hvormange rækker skal checkes (for om det er det rigtige format, har IKKE noget at gøre med hvormange rækker du får)
CharacterSet=OEM ~ Hvilket format er teksten i (ascII osv..)
Col1=F1 Char Width 255 ~ Kollone 1 hedder F1 og er af typen Char (tekst) og der kan være optil 255 tegn i denne
Col2=F2 Char Width 255 ~ som ovenstående dog hedder kollone 2 jo F2

;)
Avatar billede a1a1 Novice
28. maj 2002 - 15:14 #23
det skulle være muligt at gøre det uden et DSN....

oConn.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
                  "Dbq=\somepath\;" & _
                  "Extensions=asc,csv,tab,txt;" & _
                  "Persist Security Info=False"

Du skal jo så skifte din connection string (DATASOURCENAME), til noget lig ovenstående..

:)
Avatar billede dp2001 Juniormester
28. maj 2002 - 15:39 #24
Koden ser nu ud som følger...

<html>
<title>Forsøg</title>
<head>
</head>
<body>
<%
Set oConn2 = Server.CreateObject("ADODB.Connection")
oConn.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
                  "Dbq=\trafik\input\;" & _
                  "Extensions=asc,csv,tab,txt;" & _
                  "Persist Security Info=False"
Set oRs = oConn2.Execute("select * from henvprod.txt")
While Not oRs.EOF

response.write oRs(0) & "-" & oRs(1) & "-" & oRs(2) & "-" & oRs(3)

oRs.MoveNext
Wend
oRs.Close
Set oRs = Nothing
oConn2.Close


%>
</body>
</html>

Får blot fejlen:

HTTP 500 - Intern serverfejl
Internet Explorer

Har i øvrigt uploadet schema.ini - ved ikke om det er til nogen hjælp.
Avatar billede cht Nybegynder
04. oktober 2002 - 16:21 #25
Hvis dit spørgsmål stadigvæk er aktuelt, så prøv lige at se følgende side:
http://www.improve.dk/content/articles/item.aspx?ArticleID=10

og her kan du se hvordan du kan få sorteret et array:
http://www.kandu.dk/dk/tip/347

jeg kom kun lige ind på dette spørgsmål fordi jeg selv skulle bruge noget kode til at sortere et array, men jeg fandt det på ovenstående link, så du kan se om du kan bruge det til noget...
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