Avatar billede agony Nybegynder
26. november 2001 - 19:52 Der er 11 kommentarer og
1 løsning

lav et sciprt som sletter linier

oki jeg er åbenbart for dum til selv at kunne lave dette. Jeg har en lang række log filer men en masse linier. Jeg mangler et script som kan slette de linier hvor ordet killed ikke indgår efter linie 2.

Jeg giver ikke point for link til sider om ASP file object.
Avatar billede nute Nybegynder
26. november 2001 - 19:58 #1
hva mener du med \"slette de linier hvor ordet killed ikke indgår efter linie 2\" ??

hvordan ser din log fil ut ?
Avatar billede agony Nybegynder
26. november 2001 - 19:58 #2
hvad jeg selv har fundet frem til indgår i dette script, men den sletter alle linier og ikke kun den ene hvor order \"killed\" ikke indgår.


Set MyFileObject = Server.CreateObject(\"Scripting.FileSystemObject\")
Set MyFolder = MyFileObject.GetFolder(\"C:\\Inetpub\\wwwroot\\statsServer\\newLogFiles\")

killed = 0
kill = 0
killed = 0
numberOfFiles = 0
wonid = \"\"
nick = \"\"
i = 1

Set Conn = Server.CreateObject(\"ADODB.Connection\")
Conn.Open \"driver={MySql};dns=csStats;Database=csStats;uid=root;pwd=\"

\' movement **********************************************************************
sql = \"SELECT * FROM frags ORDER BY count DESC LIMIT 0,30\"
Set rs3 = Conn.Execute(sql)

Do until rs3.EOF
    sql = \"UPDATE nicks SET lastposition = \"&i&\" WHERE id =\" &rs3(\"n_id\")
    Conn.Execute(sql)
    i = i + 1
Rs3.Movenext
Loop
\'*********************************************************************************

sql = \"SELECT p.wonid, n.id, n.nick FROM players p, nicks n WHERE p.id = n.p_id \"
Set rs = Conn.Execute(sql)

Do until RS.EOF
    wonid = \"<\"&rs(\"wonid\")&\">\"
    nick  = rs(\"nick\")
    id    = rs(\"id\")

FOR EACH thing in MyFolder.Files
    numberOfFiles = numberOfFiles + 1

    Set MyTextFile  = MyFileObject.OpenTextFile(thing,2,true)

\' bestem map og all time best palyer ************************************************

    mapid = -1

    mapStr = MyTextFile.read(350)
    sql = \"SELECT * FROM maps\"
    Set rs4 = Conn.Execute(sql)

    do until rs4.EOF
        mapName = rs4(\"name\")
        if inStr(mapStr,mapName) <> 0 THEN
            mapid = rs4(\"id\")
            alltimeBest = CInt(rs4(\"alltimebestplayer\"))
        END IF
    Rs4.Movenext
    loop

    Set rs4 = nothing
\'*********************************************************************************************   

    WHILE NOT MyTextFile.AtEndOfStream
        str = MyTextFile.ReadLine
                       
        start = 0
        \'er der et kill
        start = inStr(str,\"killed\")
        IF start <> 0 THEN
   
           
            IF inStr(str, wonid) THEN
                kill = kill + 1
                IF inStr(start, str, wonid) THEN
                    killed = killed + 1
                    kill = kill -1   
                END IF
            END IF
\' står der ikke killed slet linie ************************************************************           
        ELSE   
        MyTextFile.WriteLine \"\"
           
        END IF
\'***********************************************************************************************       
    WEND
NEXT
Avatar billede agony Nybegynder
26. november 2001 - 20:00 #3
der er tale om en række log filer fra couter strike. Disse skal gennemlæses mange gange og derfor ville det går hurtigere hvis alle de ubrugelige linier blev slettet. Ang. det med linier 2 så er det fordi der i netop linie 2 er noget infor som skal bruges.
Avatar billede nute Nybegynder
26. november 2001 - 20:06 #4
hva gjør denne:

  IF inStr(str, wonid) THEN
      kill = kill + 1
    IF inStr(start, str, wonid) THEN
        killed = killed + 1
      kill = kill -1   
    END IF
  END IF

er det noe som skal være med ?
Avatar billede nute Nybegynder
26. november 2001 - 20:11 #5
hmm....du er nødt til å trikse litt. du kan ikke lese og skrive til samme fil objekt. du er nødt til først å åpne, lese, og deretter åpne og skrive igjen. prøv denne:

Set MyFileObject = Server.CreateObject(\"Scripting.FileSystemObject\")
Set MyFolder = MyFileObject.GetFolder(\"C:\\Inetpub\\wwwroot\\statsServer\\newLogFiles\")

killed = 0
kill = 0
killed = 0
numberOfFiles = 0
wonid = \"\"
nick = \"\"
i = 1

Set Conn = Server.CreateObject(\"ADODB.Connection\")
Conn.Open \"driver={MySql};dns=csStats;Database=csStats;uid=root;pwd=\"

\' movement **********************************************************************
sql = \"SELECT * FROM frags ORDER BY count DESC LIMIT 0,30\"
Set rs3 = Conn.Execute(sql)

Do until rs3.EOF
    sql = \"UPDATE nicks SET lastposition = \"&i&\" WHERE id =\" &rs3(\"n_id\")
    Conn.Execute(sql)
    i = i + 1
Rs3.Movenext
Loop
\'*********************************************************************************

sql = \"SELECT p.wonid, n.id, n.nick FROM players p, nicks n WHERE p.id = n.p_id \"
Set rs = Conn.Execute(sql)

Do until RS.EOF
    wonid = \"<\"&rs(\"wonid\")&\">\"
    nick  = rs(\"nick\")
    id    = rs(\"id\")

FOR EACH thing in MyFolder.Files
    numberOfFiles = numberOfFiles + 1

    Set MyTextFile  = MyFileObject.OpenTextFile(thing,1,true)

\' bestem map og all time best palyer ************************************************

    mapid = -1

    mapStr = MyTextFile.read(350)
    sql = \"SELECT * FROM maps\"
    Set rs4 = Conn.Execute(sql)

    do until rs4.EOF
        mapName = rs4(\"name\")
        if inStr(mapStr,mapName) <> 0 THEN
            mapid = rs4(\"id\")
            alltimeBest = CInt(rs4(\"alltimebestplayer\"))
        END IF
    Rs4.Movenext
    loop

    Set rs4 = nothing
\'*********************************************************************************************   
    content = \"\"
    WHILE NOT MyTextFile.AtEndOfStream
        str = MyTextFile.ReadLine
                       
        start = 0
        \'er der et kill
        start = inStr(str,\"killed\")
        IF start <> 0 THEN
   
           
            IF inStr(str, wonid) THEN
                kill = kill + 1
                IF inStr(start, str, wonid) THEN
                    killed = killed + 1
                    kill = kill -1   
                END IF
            END IF
\' står der ikke killed slet linie ************************************************************           
        ELSE   
          content = content & str & vbCrLf
        END IF
\'***********************************************************************************************       
    WEND
        Set MyTextFile  = MyFileObject.OpenTextFile(thing,2,true)
        MyTextFile.Write content
NEXT

/nute
Avatar billede agony Nybegynder
26. november 2001 - 20:18 #6
IF inStr(str, wonid) THEN
      kill = kill + 1
    IF inStr(start, str, wonid) THEN
        killed = killed + 1
      kill = kill -1   
    END IF
  END IF


Dette skal bruges til når der er fundet et kill så skal hvem er der lavet det kille findes
Avatar billede agony Nybegynder
26. november 2001 - 20:29 #7
det virkede ikke :-|
men hvad et seperat script uden alt det andet ?
Avatar billede nute Nybegynder
26. november 2001 - 20:33 #8
\"det virkede ikke :-|\"...*hva* virket ikke ?? får du en feil melding ??
Avatar billede nute Nybegynder
26. november 2001 - 20:41 #9
aaargh....bytt ut disse linjer:

Set MyTextFile  = MyFileObject.OpenTextFile(thing,2,true)
MyTextFile.Write content

med

Set stream  = MyFileObject.OpenAsTextStream(2,-2)
MyTextFile.Write content
Avatar billede nute Nybegynder
26. november 2001 - 20:48 #10
oki...et lite eksempel på hvordan det kan gjøres...

opprett en fil som heter \'logfil.txt\'.
legg dette inn i denne fil:
killed
test
test
test
test
killed
test
test
killed
test
test
test
killed
testtest

opprett en fil som heter \'index.asp\'.
legg denne fil i samme folder som \'logfil.txt\' og legg dette inn i denne fil:

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

<html>
<head>
    <title>Untitled</title>
</head>

<body>
<%
Set fso = Server.CreateObject(\"Scripting.FilesystemObject\")
Set fileObj = fso.getFile( Server.MapPath(\"logfil.txt\") )
Set stream = fileObj.OpenAsTextStream( 1, -2 )

content = \"\"
while NOT stream.AtEndOfStream
  str = stream.ReadLine
    if( InStr( str, \"killed\" ) > 0 ) then
      content = content & str & vbCrlf
    end if
wend
Set stream = fileObj.OpenAsTextStream( 2, -2 )
stream.Write content
stream.Close

Set stream = nothing
Set fileObj = nothing
Set fso = nothing
%>
</body>
</html>

kjør filen, og du vil (forhåpentlig) få ditt ønske oppfylt

/nute
Avatar billede agony Nybegynder
28. november 2001 - 15:07 #11
takker :-)
Avatar billede nute Nybegynder
28. november 2001 - 16:01 #12
selv takk :-)
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

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