21. juli 2006 - 04:31Der er
28 kommentarer og 1 løsning
Søge tekst file for specifikt info, og tage data derefter.
hej alle sammen, jeg henter en masse navne fra en database, som jeg godt kunne tænke mig at søge efter i et specifikt tekst dokument, og efter hvert navn kommer der et komma hvor så asp skal tage det der kommer lige efter kommaet, og gå til næste navn som blev hentet fra databasen.
Navn,Et tidspunkt Navn,Et tidspunkt Navn,Et tidspunkt Navn,Et tidspunkt Navn,Et tidspunkt Navn,Et tidspunkt osv. Jeg vil godt have at man søger efter navnet, og tager tidspunktet , og går til næste navn.
Først har jeg et program som udskriver nogle dataer i et tekst dokument. Jeg kender navnet på dokumentet. .txt dokumentet ser sådan her ud : Navn,Et tidspunkt Navn,Et tidspunkt Navn,Et tidspunkt Navn,Et tidspunkt Navn,Et tidspunkt Navn,Et tidspunkt
Kommer an på hvor mange personer der var med den dag.
Nu har jeg en .asp fil, som henter en masse navne fra en database, (Fra her af skal jeg have hjælp): Jeg vil så gerne have at asp tager et navn af gangen som jeg hentede fra databasen, og søger efter det i .txt dokumentet og hvis den finder dette navn skal den tager Tidspunktet efter kommaet og opdatered databasen med dette tidspunkt. Også gå til næste navn i databasen og søge efter det og..........
Man kan nærmest sige at jeg vil flytte dataen fra .txt til min database.
Rent faktisk behøver du ikke at hente navnene ud fra databasen først. Du kan simpelthen løbe txt-filen igennem, finde oplysningerne for hvert navn, og så lave en UPDATE for hver af dem. Hvis der er et navn i txt-filen, som ikke er i datbasen, resultere dette blot i en UPDATE hvor der ikke sker noget.
Noget i denne stil:
<% Set fs = Server.CreateObject("Scripting.FileSystemObject") Set f = fs.OpenTextFile(Server.MapPath("dinTextFil.txt"), 1) Response.Write(f.ReadLine)
Dim linjeArr Do While f.AtEndOfStream = False linje = f.ReadLine
linjeArr = Split(linje, ",")
navn = linjeArr(0) tdispunkt = linjeArr(1)
strUpdate = "UPDATE dinTabel SET ditTidsFelt = " & tidspunkt & " WHERE ditNavneFelt = '" & navn & "'" Conn.Execute(strUpdate) Loop
f.Close
Set f = Nothing Set fs = Nothing %>
UPDATE-sætningen skal tilpasses efter den database du bruger. F.eks. bruger Access #-tegn rundt om datoer:
strUpdate = "UPDATE dinTabel SET ditTidsFelt = #" & tidspunkt & "# WHERE ditNavneFelt = '" & navn & "'"
ok kiggede lige dybere i det, og kan se at først læser den linje 1, prøver at updatere, men opdatere ik, så går den til linje 2, prøver at opdatere og crash går scriptet i stå, så det må være en database fejl ik?
dette var efter en runde kun med navne i databasen.
Rækkefølgen er ikke så vigtig, den skal bare være åben under kaldene til Conn.Execute ... men, ja, det lyder fornuftigt at gøre det i den beskrevne rækkefølge.
Det er uheldigt at du har kaldt dit felt got "join" - det er et reserveret ord i SQL og det må derfor ikke bruges uden videre. Hvis du *skal* bruge "join" så skal du (i Access) omklamer det med []-parenteser:
strUpdate = "UPDATE raid SET [join] = #" & tidspunkt & "# WHERE name = '" & navn & "'"
Hvilken datatype er dit join-felt i øvrigt derfineret til at være?
Hvis du sidenhen har brug for at kunne behandle oplysningeren i databasen som om at de er datoer:
(o) F.eks. hvis du bar brug for at sortere dem i datoorden, eller: (o) hvis du har brug for at kunne udtraække alle poterne for en bestemt dato,
ja, så bør du have feltet som et datofelt. Hvis du derimod ikke har brug for dette, ja så er det fint nok at gemme som tekst.
Men, hvis du gemmer som tekst, så skal SQL'en også tilrettes derefter. #-tegn bruges netop hvis der er tale om en dato/et tidspunkt. Hvis der derimod er tale om en tekst, skal der bruges '-tegn:
strUpdate = "UPDATE raid SET [join] = '" & tidspunkt & "' WHERE name = '" & navn & "'"
Hvis du derimod (kan forudset at du) har behov for at kunne behandle dem som dato/tid, ja så skal du hellere bruge noget energi på at finde fejlen i stedet for at ændre felttypen. :^)
Nå men, nu kommer der ikke nogle fejl repporter, og det virker da også fint nok, bortset fra: Den opdatere alle linjer til databasen, undtagen linie 1.
Gør heller ik så meget hvis det bare er linie 1 som ik bliver opdateret.
Men sad og tænkte på om det er muligt, hvis det navn man opdatere ikke er i databasen om man så ik kunne tilføje det navn til databasen, f.eks. sådan her:
******************************* tidspunkt = linjeArr(1)
Det er jo bare en dum fejl for min side - har pået flyttet en ReadLine udenfor løkken:
<% Set fs = Server.CreateObject("Scripting.FileSystemObject") Set f = fs.OpenTextFile(Server.MapPath("dinTextFil.txt"), 1) --- Response.Write(f.ReadLine) --- Fjern denne linje!
Dim linjeArr Do While f.AtEndOfStream = False linje = f.ReadLine
Øø linie 1 ser ud som de andre, kan give dig et udsnit fra linie 1 til 4: Heltinde,07/19/06 18:54:30 Monoii,07/19/06 18:54:30 Tappi,07/19/06 18:57:52 False,07/19/06 19:17:43
du må selv bestemme om du gider at svare på mit side spørgsmål> Skulle lige kode færdig:
<% Set fs = Server.CreateObject("Scripting.FileSystemObject") Set f = fs.OpenTextFile(Server.MapPath("dinTextFil.txt"), 1)
Dim linjeArr Do While f.AtEndOfStream = False linje = f.ReadLine
linjeArr = Split(linje, ",")
navn = linjeArr(0) tdispunkt = linjeArr(1)
sql = "SELECT count(*) AS antal FROM raid WHERE name = '" & navn & "'" Set rs = Conn.Execute(sql)
If rs("antal") > 0 Then sql = "UPDATE raid SET [join] = '" & tidspunkt & "' WHERE name = '" & navn & "'" Else sql = "INSERT INTO raid (name, [join]) VALUES ('" & navn & "', '" & tidspunkt & "')" End If
Husk lige at dine SQL-sætninger også bør tage højde for om man kommer til at skrive med store eller små bogstaver - Nielle og nielle er to forskellige navne.
Jeg ved ikke om dette er en risiko i dit tilfækde?
aye? når men ihverfald titusinden tak, troed slet ik det var muligt at gøre alt det der ;P
Synes godt om
Ny brugerNybegynder
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.