webForumDet fria alternativet

Regexp + filer

ASP

22 svar · 257 visningar · startad av ironhead

Medlem sedan mars 20011 346 inlägg
Frågan#1

1. Går det att öppna en fil och använda regexp för att ersätta strängar i filen?

2. Går det att göra så i ett word-dokument?

3. Hur gör man för att kunna öppna/söka i en fil?

Medlem sedan jan. 2001510 inlägg
#2

Ä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.

Hoppas du fick svar på dina frågor

/JANspeed

Medlem sedan mars 20011 346 inlägg
#3

Janspeed: Har iallafall kommit en bit på vägen :)

<% 
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+)&#0124;(\.\w+))*\@[A-Za-z0-9]+((\.&#0124;-)[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?

Någon som vet?

[Redigerat av ironhead den 30 aug 2001]

Medlem sedan jan. 2001510 inlägg
#4

En HTML-fil är en textfil och fungerar precis likadant. Word som sagt visste jag inte. :)

Medlem sedan mars 20011 346 inlägg
#5

Janspeed: Ja just det, tack för det

Medlem sedan mars 20011 346 inlägg
#6

Hrmmm! typiskt får inte till det...

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.

Medlem sedan jan. 2001510 inlägg
#7

Vad är det för ändring som du vill göra då? Byta ut en rad eller bara ett ord?

RegExp mönster tycker jag är himla svåra att tyda. Dock så har jag inga problem med att skapa dem. :)

[r]Meningsuppbyggnadsihopblandning ;)[/r]

[Redigerat av Janspeed den 31 aug 2001]

Medlem sedan jan. 2001510 inlägg
#8

Dessutom använder du ju inte deitt flådiga mönster i RegExp? Du kör ju bara en vanlig Replace?

/JANspeed

Medlem sedan mars 20011 346 inlägg
#9

Vill bara byta ut en rad.
tex om det finns <body i raden vill jag byta ut den till <body bgcolor="#FFFFFF"

Funkar bra med koden, men jag vet inte hur jag ska skriva in den på rätt plats i filen.

Medlem sedan jan. 2001510 inlägg
#10

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 

%>
Medlem sedan dec. 19996 721 inlägg
#11

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?

Inte den kod du visar väl? Du använder ju aldrig RegExp-objektet...

Medlem sedan jan. 2001510 inlägg
#12

Det kanske funkar utan RegExp även om det är en massa onödig kod. ;)

Medlem sedan mars 20011 346 inlägg
#13

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?!

Tack på förhand för ert engagemang!

Medlem sedan jan. 2001510 inlägg
#14

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>")

Koden i exemplet ersätter alla xxx@xxx.se med <a href="mailto:xxx@xxx.se">xxx@xxx.se</a>

/JANspeed

Medlem sedan mars 20011 346 inlägg
#15

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?

Medlem sedan mars 20011 346 inlägg
#16

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.

Medlem sedan mars 20011 346 inlägg
#17

Ingen som vet om/hur det fungerar att hämta en viss rad i en fil och ersätta den raden?

Medlem sedan jan. 2001510 inlägg
#18

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.

[r] Stavfel [/r]

/JANspeed

[Redigerat av Janspeed den 04 sep 2001]

Medlem sedan mars 20011 346 inlägg
#19

Janspeed: Snällt av dig att hjälpa, tyvärr med samma effekt som förut, står bara å tuggar...

Har kört regexp förut och det har fungerat (har: W2k Pro SP2, IIS5)

*Hrmmm* kan vara "Code Red" Patchen som har ställt till nåt kanske?!

Medlem sedan jan. 2001510 inlägg
#20

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
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)