calsonMedlem sedan dec. 2003487 inlägg Hej jag har knåpat ihop en kod med mening att söka igenom ett hundratal textfiler och hämta ut viss information.. Problemet är att det ochså är relativt stora textfiler.. Mitt webhotell har satt en script.limit - vilket är absolut förståligt - därför måste jag modifiera min kod till det bättre för att eventuellt kunna läsa igenom alla textfiler eller klara av så många som möjligt per del-inläsning.
Jag har fått mycket hjälp av att söka här på forumet men mycket har jag gjort själv vilket får mig tro att någon här kan hitta en eller annan förbättring för att få skriptet att gå smidigare.. Jag har satt lite kommentarer till det relevanta för att folk ska förstå snabbt vad saker och ting gör.
<%
Dim intObjFSO, objTS
Dim arrText
Dim i
Dim intCount, intV, strL, intHtml
Dim m
Dim re
Dim errExit
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
y = 0
intX = 150864
errExit = ""
Do Until errExit = "True"
y = y + 1
intX = intX + 1
On Error Resume Next
Set objTS = objFSO.OpenTextFile(Server.MapPath("newsT\" & intX & ".txt")) [B]' Öppnar textfilen[/B]
arrText = Split(objTS.ReadAll, vbCrLf) [B]' Läser in allt[/B]
objTS.Close
[B] 'Skapar ett mönster[/B]
set re = new regexp
re.global = true
re.pattern = "\(#(.*?)\)"
intCount = 0
If (Err.Number = 0) Then [B]' Om filen existerar[/B]
For i = 0 To UBound(arrText) [B]' Sök igenom alla rader i textfilen[/B]
intT = mid(arrText(i),92,1) [B]' Hämtar ut ett nummer från textraden[/B]
intV = mid(arrText(i),12,30) [B]' Hämtar ut ett flersiffrigt nummer från[/B] textraden
set m = re.execute(intV) [B]' Hämtar den aktuella informationen från intV[/B]
if m.count>0 then [B]' Om informationen finns att hämta spara den[/B]
intHTML=m(0).submatches(0)
End If
If intT > int(2) And intHtml = 2960 Then [B]' Om nummret från intT är större än 2 och intHTML är 2960[/B]
intCount = intCount + 1 [B]' Addera resultatet med 1[/B]
End If
Next
Else ' Om filen ej finns stäng loopen
response.write("<b>Reading from source failed...</b>")
errExit = "True"
End If
m.close
re.close
response.write("<b>" & intCount & "</b> hits for (#2960)<br>") [B]' Skriver ut resultatet efter varje genomsökt textfil [/B]
Loop
Set objTS = Nothing
Set m = nothing
Set re = nothing
Set objFSO = Nothing
%>
Tack på förhand
@ndersMedlem sedan juni 200032 969 inlägg
Mitt webhotell har satt en script.limit - vilket är sbsolut förståligt - därför måste jag modifiera min kod till det bättre för att eventuellt kunna läsa igenom alla textfiler eller klara av så många som möjligt per del-inläsning.
Kan du inte bara ställa upp Server.ScriptTimeout i din asp-fil?
calsonMedlem sedan dec. 2003487 inlägg jo där har du rätt - Tack (y)
men jag skulle inte ha något emot om någon kunde hitta något för att förbättra koden.. Har jag gjort rätt med alla stängningar av objekt tex?
calsonMedlem sedan dec. 2003487 inlägg Det fungerar aldeles utmärkt när jag ändrat timeout men jag kommer titta in här lite då och då för att se om jag kan förbättra något :)
calsonMedlem sedan dec. 2003487 inlägg en till fråga angående detta.
Jag vill kolla om det längre numret i varje rad är lika dant som i en databas. Som sagt är textfilerna långa och inehåller många rader så det blir en jäkla massa tabellöppningar.. Jag prövade med att lägga in en till array men det slutade med en iendlig loop..
Någon som vet hur man använder sig av två arrays tillsammans eller vet någon annan lösning.. Som det ser ut nu blir det fruktansvärt många tabellöppningar vilket slöar ner sidan tusenfaldt.
errExit = ""
Do Until errExit = "True"
y = y + 1
intX = intX + 1
On Error Resume Next
Set objTS = objFSO.OpenTextFile(Server.MapPath("newsT\" & intX & ".txt")) ' Öppnar textfilen
arrText = Split(objTS.ReadAll, vbCrLf) ' Läser in allt
response.write("Reading file...<br>")
objTS.Close
'Sätter ett mönster
set re = new regexp
re.global = true
re.pattern = "\(#(.*?)\)"
intCount = 0
If (Err.Number = 0) Then ' Om filen existerar
For i = 0 To UBound(arrText) ' Sök igenom alla rader i textfilen
intT = mid(arrText(i),92,1) ' Hämtar ut ett nummer från textraden
intV = mid(arrText(i),12,30) ' Hämtar ut ett flersiffrigt nummer från textraden
set m = re.execute(intV) ' Hämtar den aktuella informationen från intV
if m.count>0 then ' Om informationen finns att hämta spara den
intHTML=m(0).submatches(0)
End If
If intT > 2 Then ' Om nummret från intT är större än 2 och intHTML är 2960
[b] strSql=("Select intCountry From tblCountries Where intCountry=" &intHTML)
Set objRs = objConr.execute(strSql)
strRsOpen = "True"
If Not objRs.Eof Then
Response.write("Updating database...")
objConr.execute("Update tblCountries Set intHits=intHits+1 Where intCountry=" & objRs("intCountry"))
response.write(objRs("intCountry") & " - ")
Response.write("<b>.......................................Database Updated..........................................</b><br>")
End If
objRs.Close[/b]
End If
Next
Else ' Om filen ej finns stäng loopen
response.write("<b>Reading from source failed...</b>")
errExit = "True"
End If
m.close
re.close
Loop