Avatar billede carparknorth Nybegynder
12. april 2004 - 14:30 Der er 14 kommentarer og
1 løsning

Skrive/læse i html-fil

Hejsa...

Kan man vha. ASP kigge ned i en HTML-fil fra et bestemt sted til et slutsted?

Jeg er i gang med at lave en lille editor og jeg havde tænkt mig et administrationsmodul, hvor denne editor så er.

Eks på redigering af HTML-filen:

<HTML>
<HEAD>
<TITLE>Titlen på dokumentet</TITLE>
</HEAD>
<BODY>

<!--- Start redigering --->

Her er teksten så

<!--- Slut redigering --->


Er det muligt at få vist teksten der er imellem <!--- start redigering ---> og <!--- slut redigering ---> i min editor?
Avatar billede montago Praktikant
12. april 2004 - 20:52 #1
ehmm...

jeg kan umidlbart fortælle dig at du kan åbne hele filen... men man kan jo lade scriptet søge efter den linie som indeholder <!--- Start redigering --->
og vise alt derefter...
Avatar billede montago Praktikant
12. april 2004 - 21:10 #2
jeg er ved at have et script færdig... 5 min til tops
Avatar billede montago Praktikant
12. april 2004 - 21:15 #3
<%
Set fso = CreateObject("Scripting.FileSystemObject")
Set textStreamObject = fso.OpenTextFile(Server.Mappath("edit.html"))
    Do
        lineNum = lineNum + 1
        strEditLine = textStreamObject.ReadLine
        if inStr(strEditLine,"<!--- Start redigering --->") Then
            StartPos = lineNum
        elseif inStr(strEditLine,"<!--- Slut redigering --->") Then
            StopPos = lineNum
        end if
    loop while not textStreamObject.AtEndOfStream
%>
<textarea name="textfield" cols="100" rows="30">
<%
Set textStreamObject = fso.OpenTextFile(Server.Mappath("edit.html"))

For EditSkipLine = 0 to StartPos -1
    textStreamObject.SkipLine
Next

For EditReadLine = StartPos to StopPos -2
    Response.Write Server.HTMLEncode(textStreamObject.Readline) & Chr(10)
Next
%>
</textarea>
<%
Set textStreamObject = Nothing
Set fso = Nothing
%>
Avatar billede montago Praktikant
13. april 2004 - 18:45 #4
Muahaha... jeg fik mine første 100 point
Avatar billede nute Nybegynder
14. april 2004 - 15:04 #5
carparknorth >> øhh ... det er da et *rimelig* overkill forslag du har accepteret. det kan gøres meget mere fornuftig end dette:

<%@ language="vbscript" %>
<%
Set fso = CreateObject("Scripting.FileSystemObject")
Set textStreamObject = fso.OpenTextFile(Server.Mappath("edit.html"))

Dim strText : strText = textStreamObject.ReadAll
Dim strFindStart : strFindStart = "<!--- Start redigering --->"
Dim strFindEnd : strFindEnd = "<!--- Slut redigering --->"
Dim intStartIndex : intStartIndex = InStr( strText, strFindStart )
Dim intEndIndex : intEndIndex = InStr( strText, strFindEnd )

if( intStartIndex > 0 ) then
    intStartIndex = intStartIndex + LEN( strFindStart )
end if
strText = MID( strText, intStartIndex, (intEndIndex - intStartIndex) )
%>
<textarea name="textfield" cols="100" rows="30">
<%
Response.Write( strText )
%>
</textarea>
<%
Set textStreamObject = Nothing
Set fso = Nothing
%>

/nute
Avatar billede montago Praktikant
14. april 2004 - 15:30 #6
hvis den virker er det vel okay ?
Avatar billede nute Nybegynder
14. april 2004 - 15:35 #7
joda ... det fungerer også meget godt at *gå* til toppen af Mount Everest, men hvis man kan flyve et helikopter på 1/100 af tiden og til lavere pris, så er det rimelig latterlig at gå.

om det er ok hvis den virker ?? mit svar til det, kan ikke være andet end "nej". Hvorfor ikke skrive optimal kode, når man har muligheden for det ? hvorfor belaste serveren meget mere end nødvendig ?
Avatar billede montago Praktikant
14. april 2004 - 15:40 #8
hehe... og det siger du..

kan vi blive enige om at hele teksten skal kigges igennem mindst en gang, før den bliver skrevet...

og at den bliver rettet til når den læses...

ergo er begge scripts lige gode...

din tur til mount everest tager derfor lige så lang tid...
Avatar billede montago Praktikant
14. april 2004 - 15:43 #9
<%
'Min metode
  læs hele teksten og find [start] og [stop]
  læs teksten anden gang, skip alt før [start] og stop skrivning ved [stop]
%>

<%
'Din metode
  læs hele teksten og find [start] og [stop] - samt put text i variable
  slet alt før og efter [start] og [stop]
  udskriv variable
%>
Avatar billede nute Nybegynder
14. april 2004 - 15:59 #10
ok ... you missed my point ...

den metode du har postet, kunne vel så gerne være den algoritme som InStr er implementeret efter (det ved jeg ikke, men lad os antage dette ... som et "eksperiment"). Hvis du implementerer denne funktionalitet, efter den samme algoritme som en funktion er implementeret, hvorfor så ikke bruge funktionen istedet ? Denne vil alligevel eksekveres hurtigere, da den er kompileret. Hvis jeg skulle implementere algoritmer istedet for at bruge de indebyggede funktioner, ville alle mine kolleger hvertfald grine højt af mig, hvis jeg nu havde været så heldig at have et arbejde på trods min "evne" til at gå den længste vej.

Jo, vi er enige om at teksten skal kigges igennem mindst en gang ( noget andet ville jo være magi ;o] )
Avatar billede montago Praktikant
14. april 2004 - 16:09 #11
mindst en gang før den læses igen... dvs 2 gange
Avatar billede carparknorth Nybegynder
17. april 2004 - 11:01 #12
Hejsa igen..

Tusind tak for jeres hjælp. Scriptet fungerer mega godt.

Nute -> vil du have point for dit script?

Jeg har lige endnu et spørgsmål. Hvordan skriver jeg ned i filen igen? Jeg kan godt få den til at læse fra <!--- Start redigering ---> til <!--- Slut redigering --->. Nu sender jeg så de nye indhold af textarea-boksen.

Hvordan får jeg et script til at skrive fra <!--- Start redigering ---> til <!--- Slut redigering ---> med det nye indhold?
Avatar billede nute Nybegynder
17. april 2004 - 11:36 #13
du bruger samme teknik, men du bruger blot en Replace():

<%@ language="vbscript" %>
<%
Set fso = CreateObject("Scripting.FileSystemObject")
Set textStreamObject = fso.OpenTextFile(Server.Mappath("edit.html"))

Dim strText : strText = textStreamObject.ReadAll
Dim strFindStart : strFindStart = "<!--- Start redigering --->"
Dim strFindEnd : strFindEnd = "<!--- Slut redigering --->"
Dim intStartIndex : intStartIndex = InStr( strText, strFindStart )
Dim intEndIndex : intEndIndex = InStr( strText, strFindEnd )
textStreamObject.Close

if( intStartIndex > 0 ) then
    intStartIndex = intStartIndex + LEN( strFindStart )
end if
Dim strEditText : strEditText = MID( strText, intStartIndex, (intEndIndex - intStartIndex) )
strText = Replace( strText, strEditText, "[NY TEKST]" )

Set textStreamObject = fso.OpenTextFile(Server.Mappath("edit.html"),2)
textStreamObject.Write( strText )
textStreamObject.Close


Set textStreamObject = Nothing
Set fso = Nothing
%>

om jeg vil have points ... hmm ... det er dig der bestemmer. kan ikke helt finde ud af om det er et spørgsmål du stiller, eller en venlig kommando. hvis du synes jeg skal have points, så er det ok, men hvis du overlader til mig, at bestemme om jeg vil have points, så takker jeg nej :o]

/nute
Avatar billede carparknorth Nybegynder
17. april 2004 - 11:40 #14
Så synes jeg helt klart du skal have point.

Gå til http://www.eksperten.dk/spm/490224
Avatar billede nute Nybegynder
17. april 2004 - 12:16 #15
Det er ikke nødvendig ... jeg er her ikke primært for points, men for at hjælpe :o] Tak, men nej tak ( i al venlighed )

:o]
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