Avatar billede starf Nybegynder
06. juli 2006 - 09:26 Der er 24 kommentarer og
1 løsning

se log mappe igennem og vælg nyeste

Hej

jeg har en bunke log filer som bliver oprettet med navnet som en dato f.eks
"MDaemon-20060706-Routing.log"

jeg vil så gerne ha et asp script der kigger igennem mappen vælger den nyeste log og outputter loggen på skærmen.

Hvis det er muligt må den gerne vende det på hovedet også, så at sidste linie står først osv osv. da loggen jo får fra top imod bund men når man skal se det på siden vil det være dejligt hvis den viste det så nyeste linie stod i toppen hele tiden.

hvordan gøres dette?
Avatar billede fennec Nybegynder
06. juli 2006 - 09:32 #1
Hedder alle filer "MDaemon-" til start eller er der forskellige navne??
Avatar billede starf Nybegynder
06. juli 2006 - 09:37 #2
alle filer hedder MDaemon-"dato"-Routing.log

som default hvor "20060706" er det eneste der ændre sig.
Avatar billede fennec Nybegynder
06. juli 2006 - 10:36 #3
Med denne kode bliver filerne sorteret efter navnet. Vi er nemlig så heldige at din datoangivelse kan bruges i en text sortering:

dim FSO, folder, files, file, RS
Set FSO = CreateObject("Scripting.FileSystemObject")
Set folder = FSO.GetFolder(server.mapPath("."))
Set RS = Server.CreateObject("ADODB.Recordset")

RS.Fields.Append "Filnavn", 200, 20
RS.Open

For Each file in folder.Files
    RS.Addnew
    RS("Filnavn") = file.Name
    RS.Update
Next

RS.Sort = "Filnavn DESC"
RS.MoveFirst
while Not RS.EOF
  Response.Write RS("filnavn") & "<br>"
  RS.MoveNext
wend
RS.Close
Set RS =nothing
Set FSO =nothing

Dette kan du så bruge da du ved at den nyeste fil ligger først:

...
RS.Sort = "Filnavn DESC"
RS.MoveFirst
Set File = FSO.OpenTextFile(server.mappath(RS("filnavn")), 1, Create)
If not File.AtEndOfStream Then
  Do While not File.AtendOfStream
    newline = File.ReadLine
    response.write newLine &"<br>"
  loop
end if

Samme metode kan bruges til at sortere linjerne fra filen, hvis du vil have dem i omvent rækkefølge.

Du kan læse mere om sortering af filer via et recordset her:
http://www.roubaixinteractive.com/PlayGround/FSO/Sort_Folder_Contents.asp

Læg mærke til at de her også gemme filens "dateCreated" så du kan faktisk sortere efter det felt i stedet hvis det skal være.
Avatar billede fennec Nybegynder
06. juli 2006 - 10:38 #4
Du skal evt have udbygget files loopet lidt, så den kun tager dine MDaemon filer, hvis du har andre filer til at ligger i samme mappe:

For Each file in folder.Files
  if left(file.Name, 7) = "MDaemon" then
    RS.Addnew
    RS("Filnavn") = file.Name
    RS.Update
  end if
Next
Avatar billede fennec Nybegynder
06. juli 2006 - 10:43 #5
Dine filnavne er længere end 20 tegn så vi skal lige have udvidet feltet til mere end 20 tegn:

RS.Fields.Append "Filnavn", 200, 50
Avatar billede starf Nybegynder
06. juli 2006 - 11:01 #6
<% dim FSO, folder, files, file, RS
Set FSO = CreateObject("Scripting.FileSystemObject")
Set folder = FSO.GetFolder(server.mapPath("/log"))
Set RS = Server.CreateObject("ADODB.Recordset")

RS.Fields.Append "Filnavn", 200, 20
RS.Open

For Each file in folder.Files
  if left(file.Name, 7) = "MDaemon" then
    RS.Addnew
    RS("Filnavn") = file.Name
    RS.Update
  end if
Next

RS.Sort = "Filnavn DESC"
RS.MoveFirst
while Not RS.EOF
  Response.Write RS("filnavn") & "<br>"
  RS.MoveNext
wend
RS.Close
Set RS =nothing
Set FSO =nothing

RS.Sort = "Filnavn DESC"
RS.MoveFirst
Set File = FSO.OpenTextFile(server.mappath(RS("filnavn")), 1, Create)
If not File.AtEndOfStream Then
  Do While not File.AtendOfStream
    newline = File.ReadLine
    response.write newLine &"<br>"
  loop
end if

%>

der får jeg bare:

Microsoft Cursor Engine error '80040e21'

Multiple-step operation generated errors. Check each status value.

/file.asp, line 12

linie 12 er:

RS("Filnavn") = file.Name
Avatar billede starf Nybegynder
06. juli 2006 - 11:03 #7
hov havde lige overset din over 20 char fejl...

efter jeg har rettet det får jeg:

MDaemon-20060706-Routing.log

Microsoft VBScript runtime error '800a01a8'

Object required

/file.asp, line 27
Avatar billede fennec Nybegynder
06. juli 2006 - 11:05 #8
Hvad er linje 27??
Avatar billede starf Nybegynder
06. juli 2006 - 11:12 #9
RS.Sort = "Filnavn DESC" er linie 27
Avatar billede fennec Nybegynder
06. juli 2006 - 11:17 #10
Det er fordi du lukker RS i linjerne før, og det første loop behøver vi ikke længere:

Set FSO = CreateObject("Scripting.FileSystemObject")
Set folder = FSO.GetFolder(server.mapPath("/log"))
Set RS = Server.CreateObject("ADODB.Recordset")
RS.Fields.Append "Filnavn", 200, 50
RS.Open

For Each file in folder.Files
  if left(file.Name, 7) = "MDaemon" then
    RS.Addnew
    RS("Filnavn") = file.Name
    RS.Update
  end if
Next

RS.Sort = "Filnavn DESC"
RS.MoveFirst
Set File = FSO.OpenTextFile(server.mappath(RS("filnavn")), 1, Create)
If not File.AtEndOfStream Then
  Do While not File.AtendOfStream
    newline = File.ReadLine
    response.write newLine &"<br>"
  loop
end if
RS.Close
Set RS =nothing
Set FSO =nothing
Avatar billede starf Nybegynder
06. juli 2006 - 11:19 #11
ok mange tka nu virker det.. en sidste ting dog, er det muligt at læse det modsat?

f.eks hvis txt filen så sådan her ud:
1
2
3
4
5

på hver sin linie så vil den vise med scriptet på skærmen

5
4
3
2
1

`?
Avatar billede starf Nybegynder
06. juli 2006 - 11:25 #12
samt det ser heller ikke ud til det er muligt at læse dem fra en anden mappe ved at ændre

Set folder = FSO.GetFolder(server.mapPath("."))

til

Set folder = FSO.GetFolder(server.mapPath("/log"))

f.eks?
Avatar billede fennec Nybegynder
06. juli 2006 - 11:41 #13
Du skulle kunne læse fra en anden mappe, men når du starter med / går den til roden af dit webhotel, og finder log mappen. Du er måske i denne fil:
c:/interpub/wwwRoot/enMappe/minfil.asp

server.mapPath(".") returnere c:/interpub/wwwRoot/enMappe/
server.mapPath("/") returnere c:/interpub/wwwRoot/
server.mapPath("log") returnere c:/interpub/wwwRoot/enMappe/log
server.mapPath("/log") returnere c:/interpub/wwwRoot/log

Man kan mig bekendt ikke læse en fil baglæns. Men du kan bruge samme metode som med filerne. Vender tilbage med et eks lige om lidt.
...LOADING...
...LOADING...

he he
Avatar billede fennec Nybegynder
06. juli 2006 - 11:56 #14
...DONE...

RS.Sort = "Filnavn DESC"
RS.MoveFirst
Set File = FSO.OpenTextFile(server.mappath(RS("filnavn")), 1, Create)
Set RS1 = Server.CreateObject("ADODB.Recordset")
RS1.Fields.Append "sort", 3
RS1.Fields.Append "Tekst", 200, 100
RS1.Open
counter = 0
If not File.AtEndOfStream Then
  Do While not File.AtendOfStream
    newline = File.ReadLine
    RS1.Addnew
    RS1("sort") = counter
    RS1("Tekst") = newLine
    RS1.Update
    counter = counter + 1
  loop
end if
RS1.Sort = "sort DESC"
RS1.MoveFirst
while not RS1.eof then
  Response.write RS1("Tekst") & "<br>"
  RS1.MoveNext
wend

Og har du ændret mappen skal du også gøre det i OpenTextFile
Set File = FSO.OpenTextFile(server.mappath("/log/"&RS("filnavn")), 1, Create)

Evt lave en Path variabel i starten også bruge den, så du nemt kan ændre mappen til en anden på et senere tidspunkt:
Path = server.mappath("/log")
Set folder = FSO.GetFolder(Path)
Set File = FSO.OpenTextFile(Path &"/"RS("filnavn")), 1, Create)
Avatar billede starf Nybegynder
06. juli 2006 - 12:07 #15
ok jeg får dog følgende fejl nu:

Microsoft VBScript compilation error '800a0400'

Expected statement

/file.asp, line 36

while not RS1.eof then
------------------^


min kode er:

<%Set FSO = CreateObject("Scripting.FileSystemObject")
Set folder = FSO.GetFolder(server.mapPath("log2"))

Set RS = Server.CreateObject("ADODB.Recordset")
RS.Fields.Append "Filnavn", 200, 50
RS.Open

For Each file in folder.Files
  if left(file.Name, 7) = "MDaemon" then
    RS.Addnew
    RS("Filnavn") = file.Name
    RS.Update
  end if
Next

RS.Sort = "Filnavn DESC"
RS.MoveFirst
Set File = FSO.OpenTextFile(server.mappath("/log2/"&RS("filnavn")), 1, Create)
Set RS1 = Server.CreateObject("ADODB.Recordset")
RS1.Fields.Append "sort", 3
RS1.Fields.Append "Tekst", 200, 100
RS1.Open
counter = 0
If not File.AtEndOfStream Then
  Do While not File.AtendOfStream
    newline = File.ReadLine
    RS1.Addnew
    RS1("sort") = counter
    RS1("Tekst") = newLine
    RS1.Update
    counter = counter + 1
  loop
end if
RS1.Sort = "sort DESC"
RS1.MoveFirst
while not RS1.eof then
  Response.write RS1("Tekst") & "<br>"
  RS1.MoveNext
wend %>

og linie 36 er:

while not RS1.eof then
Avatar billede fennec Nybegynder
06. juli 2006 - 12:25 #16
min fejl. Der skal ikke "then" på en while:

while not RS1.eof
Avatar billede starf Nybegynder
06. juli 2006 - 12:26 #17
så får jeg:

Microsoft Cursor Engine error '80040e21'

Multiple-step operation generated errors. Check each status value.

/file.asp, line 29

linie 29 eR:

    RS1("Tekst") = newLine
Avatar billede fennec Nybegynder
06. juli 2006 - 12:32 #18
Hvor lange er hver linje i log filen??
Det lader til at de er over 100 tegn lange, så du skal have sat feltstørrelsen op så den kan tage dem:

RS1.Fields.Append "Tekst", 200, xxx
Avatar billede starf Nybegynder
06. juli 2006 - 12:35 #19
ok satte den til 400 det så ud til at virke, hva bestemmer 200 ?
Avatar billede starf Nybegynder
06. juli 2006 - 12:39 #20
Samt der er lige et sidste problem før det virker.

der er andre filer i samme mappe der hedder f.eks

MDaemon-20060706-System.log
MDaemon-20060706-Statistics.log
MDaemon-20060706-SMTP-(in).log
MDaemon-20060706-Routing.log
MDaemon-20060706-RAW.log

osv problemet er den ser ud til bare at tage MDaemon-20060706-System.log og ik MDaemon-20060706-Routing.log er det muligt at ændre den lille del?
Avatar billede fennec Nybegynder
06. juli 2006 - 12:48 #21
1:
Datatypen. De 3 mest brugte er:
200 = VarChar
7 = Date
3 = Int

2:
if left(file.Name, 7) = "MDaemon" and inStr(file.Name, "Routing") then
Avatar billede starf Nybegynder
06. juli 2006 - 12:49 #22
mange tak! smid så et svar :D
Avatar billede fennec Nybegynder
06. juli 2006 - 12:51 #23
Angående 1. Så kan du se at "sort" er sat til at være et tal:
RS1.Fields.Append "sort", 3
Avatar billede fennec Nybegynder
06. juli 2006 - 12:51 #24
.o) <-- One Eyed Jack
Avatar billede starf Nybegynder
06. juli 2006 - 12:54 #25
ok tak for forklaringen også! har bestemt hjulpent med forstårelsen af det her :)
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