Avatar billede niels_bonde Nybegynder
04. april 2004 - 04:04 Der er 10 kommentarer

At slette bestemt linie fra en txt fil

Vi har en irc kanal med en bot (en mirc klient) der vedligeholder "blacklists".

Jeg har brug for et script der kan slette en bestemt linie, via linie nummeret i en txt fil. Det er nemlig i denne fil som vores blacklists bliver gemt.

Linie nummeret kommer fra en textbox.
Det er dog vigtigt at hvis der bliver slettet fra midten af filen at de nedenstående linie bliver rykket op, så der ikke forekommer tomme linier.

Mit script til at tilføje til filen ser således ud:
<%
Dim fso, f, filespec
Set fso = CreateObject("Scripting.FileSystemObject")
filespec = Server.Mappath("../blacklists/blacklist_users.txt")
Set f = fso.OpenTextFile(filespec,8)

f.Write vbCrLf & Request.Form("addtext")
f.Close
Response.Redirect "users.asp"

%>

Ved ikke om det kan hjælpe lidt til at se min måde at scripte på.

På forhånd mange tak!
Avatar billede nute Nybegynder
04. april 2004 - 12:20 #1
det findes ikke en "delete" metode som man kan bruge for at slette en linie. Du er nødt til at bruge en lille kombination:

Dim fso, f, filespec
Set fso = CreateObject("Scripting.FileSystemObject")
filespec = Server.Mappath("blacklist_users.txt")
Set f = fso.GetFile(filespec)
Set objStream = f.OpenAsTextStream(1)
dim counter : counter = 1
dim intDeleteLine : intDeleteLine = CInt( Request( "sletLinie" ) )
dim strPreDelete : strPreDelete = ""
do
    strCurrent = objStream.ReadLine
    if( counter = intDeleteLine ) then
        exit do
    else
        strPreDelete = strPreDelete & strCurrent & vbCrLf
        counter = counter + 1
    end if
   
loop while not objStream.AtEndOfStream
Dim strRest : strRest = objStream.ReadAll()
Dim strContent : strContent = strPreDelete & strRest
objStream.Close
Set objStream = f.OpenAsTextStream(2)
objStream.Write( strContent )

/nute
Avatar billede niels_bonde Nybegynder
04. april 2004 - 12:55 #2
Tak skal du have nute. Det virker bare perfekt :)
Avatar billede niels_bonde Nybegynder
04. april 2004 - 15:19 #3
hmm, men nute eller i andre. Hvis jeg laver nogle af de her tegn . : / i min linie vil den ikke slette, den kommer med denne fejl:

Microsoft VBScript runtime error '800a003e'

Input past end of file

/admin/content/del_users.asp, line 20
Avatar billede gil-galad Nybegynder
04. april 2004 - 15:22 #4
Niels Bonde fra Bol?! :-D
Avatar billede niels_bonde Nybegynder
04. april 2004 - 15:29 #5
Det er som om det kun virker med "rene" tegn, altså a-z + 0-9

Hvordan kan det komme til at virke med alle de andre tegn i acsii tabellen ?
Avatar billede niels_bonde Nybegynder
04. april 2004 - 15:29 #6
spiffsen, ej det tror jeg næppe :P
Avatar billede nute Nybegynder
04. april 2004 - 16:18 #7
hvis du lægger mærke til hvad scriptet gør, så "slettes" ikke linien. Linien bliver bare sprunget over.

scriptet fungerer fint for mig (selv med . : og /). Men du kan måske lave det lidt mere "bullet proof". Denne linie:

Dim strRest : strRest = objStream.ReadAll()

skal være:

Dim strRest : strRest = ""

if( not objStream.AtEndOfStream ) then
    strRest = objStream.ReadAll()
end if

du kan også lave en

if( not objStream.AtEndOfStream ) then

omkring hele din do...loop, så prøver ikke scriptet at læse noget hvis filen ikke indeholder nogle linier:

if( not objStream.AtEndOfStream ) then
    do
        strCurrent = objStream.ReadLine
        if( counter = intDeleteLine ) then
            exit do
        else
            strPreDelete = strPreDelete & strCurrent & vbCrLf
            counter = counter + 1
        end if
       
    loop while not objStream.AtEndOfStream

    Dim strRest : strRest = ""
   
    if( not objStream.AtEndOfStream ) then
        strRest = objStream.ReadAll()
    end if
    Dim strContent : strContent = strPreDelete & strRest
    objStream.Close
    Set objStream = f.OpenAsTextStream(2)
    objStream.Write( strContent )
end if

/nute
Avatar billede gil-galad Nybegynder
04. april 2004 - 16:39 #8
Så du har nok ikke læst den...

(tolkien's)
Avatar billede niels_bonde Nybegynder
04. april 2004 - 17:16 #9
weeee, tak nute. Nu kan vi få lagt nogle af alle de virus links i filen, så botten kicker hvis man skriver sådan et link :)

Tusind tak :)
Avatar billede nute Nybegynder
04. april 2004 - 18:57 #10
fino :-)

så smider jeg et svar
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