Är det en textfil ska det inte vara så särskilt svårt. Om den däremot måste öppnas binärt så är det svårare.
För en vanlig textfil använder du FSO dvs. FileSystemObject. Mer om detta kan du läsa på http://www.idg.se/webstudio där jag lärde mig mycket om FSO i alla fall.
Word-dokument vet jag inte riktigt hur man läser och skriver i ASP men detta ska gå det med.
Söka i filen kan du enkelt göra när du lärt dig öpna den. Se FSO ovan.
<%
Dim F, T
Set F = CreateObject("Scripting.FileSystemObject")
Set T = F.OpenTextFile("c:\inetpub\wwwroot\fil.doc")
Do Until T.AtEndOfLine
Texten = T.ReadLine
a= StrFix(Texten)
Loop
T.Close
Function StrFix(StrText)
mDelimit = Chr(0)
Set re = New RegExp
re.Global = True
re.IgnoreCase = true
re.Pattern = "(\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+)"
strText=replace(strText,"banan","*Utbytt*")
strText = Replace(strText, mDelimit, "")
StrFix=StrText
End Function
%>
Denna kod funkar utmärkt i vanliga txt-filer, men hur ska jag göra en replace i en word-fil eller en html-fil?
Med utgång av koden ovan så funkar det att ersätta text när jag skriver ut filen på skärmen, men hur bär jag mig åt när jag vill skriva in ändringen i textfilen? Så att ändringen verkligen kommer på rätt rad/ställe.
Om du ska ersätta en <body>-tagg i ett html-dokument eller i en textfil så är nog det bästa att läsa in hela filen i en variabel och sedan ersätta det du ska ersätta med Replace(). Efter det så skriver du bara över det nya innehållet till filen.
Typ så här:
<%
Dim F, T
Set F = CreateObject("Scripting.FileSystemObject")
Set T = F.OpenTextFile("c:\inetpub\wwwroot\fil.[b]html[/b]")
strText = T.ReadAll
Replace(strText, "<body>", "<body bgcolor=""#00ff00"">")
Set T = F.OpenTextFile("c:\inetpub\wwwroot\fil.[b]html[/b]", 2)
T.Write strText
T.close
%>
Kan någon hjälpa mig på traven med regexp? Har nog inte förstått saken helt klart:(
Jag har kommit så lång att jag kan konvertera flera doc-filer till HTML samtidigt, nu vill jag ersätta vissa rader i html-filen...obs! filerna blir så stora som 320kb, så någon kanske vet en snabb lösning?!
Det är inte alltid att man behöver RegExp. Ibland räcker det med en vanlig Replace.
Ett exempel på RegExp kan se ut så här:
<%
'Text including codes to be converted
strText = "babbel och ccc@qqq.se en massa aaa@bbb.se annat tjolahppsan"
'HTMLencode to get rid of tags
strText = Server.HTMLEncode(strText)
'Creates new regexp
Set objRegExp = New regexp
'Do more than once
objRegExp.Global = true
'Ignore whether upper or lowercase
objRegExp.IgnoreCase = true
'Transform mailadress
objRegExp.Pattern = "\s{1,}(...@...\.se)"
strText = objRegExp.Replace(strText," <a href=""mailto:$1"">$1</a>")
'Skriv ut resultatet
Response.write strText
%>
Det RegExp gör är att den ersätter den text i variabeln strText som matchar det mönster (pattern) som definierats i objRegExp.Pattern = "\s{1,}(...@...\.se)"
Ersättningen aktiveras genom strText = objRegExp.Replace(strText," <a href=""mailto:$1"">$1</a>")
Då använder vi replace istället, men jag vet bara att raden börjar med <body
sedan vet jag inte innehållet vidare.
Kan jag lägga in <body bgcolor="#ffffff" på raden utan att förstöra övrig kod på den raden?
Janspeed:Får det inte att fungera, skriptet står bara å tuggar...(kanske för att filerna är så stora? ~320 kb)
Skulle man kunna söka efter en sträng i texten, läsa in den raden i en variabel, ersätta den med en ny och sedan skriva in den på rätt plats i html-filen igen?
Någon som vet hur detta skulle kunna gå till? Man borde ju vinna en massa prestanda istället för att läsa in hela filen i en variabel.
Det kan tänkas att du inte har rätt ScriptEngine för att kunna köra RegExp men det är jag inte så säker på hur man åtgärdar.
Koden i mitt exempel ska du kunna använda utan nånting mer. Prova att klistra in koden i ett helt tomt asp-dokument.
Ett exempel för att läsa en rad och sedan skriva dit en ny rad på samma ställe:
Set FSO = Server.CreateObject("Scripting.FileSystemObject")
Set T = FSO.OpenTextFile(sökväg)
Do Until T.AtEndOfStream OR InStr(RadText, "<body>")
RadText = T.ReadLine
Loop
If not T.AtEndOfStream Then
'Ta reda på vilken rad
RadNr = T.Line
'Ersätt body
NyRadText = Replace(RadText, "<body>", "<body bgcolor=""#00ff00""")
', 2 för att skriva över fil
Set T = FSO.OpenTextFile(sökväg, 2)
Do Until T.Line = RadNr
T.SkipLine
Loop
T.WriteLine NyRadText
Else
Response.Write "Ditt sökord hittades inte!"
End If
Om du dock ska kunna söka på tex <body ???=??? ???> osv så bör du nog använda RegExp istället för vanlig replace.
Mitt exempel på RegExp bör fungera felfritt . Dock så är inte jag expert på RegExp heller så jag vet tyvärr inte hur jag ska hjälpa dig.
Mitt andra exempel har jag inte testat och då jag inte har angett någon sökväg så lär det inte fungera utan att du modifierar det själv.
Att den bara står och tuggar låter konstigt. Antingen är det någon loop som snurrar i en evighet eller så bör det ploppa upp ett felmeddelande tycker jag ju?
Är inte expert på sånt heller tyvärr. :)
/JANspeed
266 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2