webForumDet fria alternativet

Hantera textfil - Ta bort = InStr(rad,"ord")

ASP

27 svar · 1 117 visningar · startad av oskars

Medlem sedan nov. 20051 317 inlägg
Frågan#1

Hej,

håller på att få fnatt på en textfil som jag har här!

Jag vill göra ett script som tar bort alla rader i min textfil som innehåller t.ex ordet "tv" osv...

Tänkte mig formuläret så här enkelt:

<form name="do" method="post" action="default.asp?do=deleteLines">
   Välj textfil: <input name="textfile" type="file" /><br />
   Välj sträng att leta efter: <input name="string" type="text" /><br />
   <input type="submit" value="HIT IT!" />
</form>

Men jag vet inte hur jag ska lösa raderingen av raderna om dom innehåller valt ord...

Tacksam för hjälp =)=)=)

Oskar

Medlem sedan juni 20019 519 inlägg
#2

Bör kunna fixas med RegExp att den söker efter "tv" på raderna... och ta bort det tror jag... ska nog inte vara så svårt...

Medlem sedan juni 20019 519 inlägg
#3

Eller loopar du varje rad som din FSO läser och något i stil med:

if instr(strRow(1),"tv") then strRow(1) = ""
Medlem sedan juni 20019 519 inlägg
#4
<%
Const Filename = "/readme.txt"	' file to read
Const ForReading = 1, ForWriting = 2, ForAppending = 3
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
' Create a filesystem object
Dim FSO
set FSO = server.createObject("Scripting.FileSystemObject")
Dim Filepath
Filepath = Server.MapPath(Filename)

if FSO.FileExists(Filepath) Then
	Dim file	
	set file = FSO.GetFile(Filepath)

	Dim FileSize
	FileSize = file.Size
	' Open the file
	Dim TextStream
	Set TextStream = file.OpenAsTextStream(ForReading, _
                                               TristateUseDefault)

	' Read the file line by line
	Do While Not TextStream.AtEndOfStream
	  dim Line
	  Line = TextStream.readline
          if not Instr(Line,"TV") then response.Write Line & vbcrlf
	Loop

	Set TextStream = nothing
End If
Set FSO = nothing
%>

har ej testat.

Medlem sedan nov. 20051 317 inlägg
#5

Tack tack!

Får följande fel:

Feltyp:
Körningsfel i Microsoft VBScript (0x800A0005)
Ogiltigt proceduranrop eller argument.
/textfil/default.asp, line 28

På denna koden:

Rad28 = Set TextStream = file.OpenAsTextStream(ForReading, TristateUseDefault)

<form name="do" method="post" action="default.asp?do=CreateThatCoolTextFile">
Välj textsträng: <input name="textStr" type="text" /><br />
<input type="submit" value="HIT IT!" />
</form>

<%
If Request.Querystring("do") = "CreateThatCoolTextFile" Then

	Const Filename = "/testfilen.txt" ' File to read
	Const ForReading = 1, ForWriting = 2, ForAppending = 3
	Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
	
	' Create a filesystem object
	Dim FSO
	set FSO = server.createObject("Scripting.FileSystemObject")
	Dim Filepath
	Filepath = Server.MapPath(Filename)
	
	if FSO.FileExists(Filepath) Then
		Dim file	
		set file = FSO.GetFile(Filepath)
	
		Dim FileSize
		FileSize = file.Size
		
		' Open the file
		Dim TextStream
		Set TextStream = file.OpenAsTextStream(ForReading, TristateUseDefault)
	
		' Read the file line by line
		Do While Not TextStream.AtEndOfStream
		  dim Line
		  Line = TextStream.readline
	          if not Instr(Line,"CHRYSLER") then response.Write Line & vbcrlf
		Loop
	
		Set TextStream = nothing
	End If
	Set FSO = nothing

End If
%>
Medlem sedan juni 20019 519 inlägg
#6

kolla vad filepath är... ser om filen finns där filepath är :D

Medlem sedan nov. 20051 317 inlägg
#7

Filen finns där :)

JO!

Nu går det igenom utan felmeddelande, men dom raderna som innehåller CHRYSLER försvinner inte ... hhmmm... ska spana lite..

nått tips?

Medlem sedan juni 20019 519 inlägg
#8

är det med Upper case CHRYSLER? eller Chrysler?

Medlem sedan nov. 20051 317 inlägg
#9

up-up-up-up-uppercase!

precis så som jag skrivit :)

och filen är Ej skrivskyddad :)

Medlem sedan juni 20019 519 inlägg
#10

bara prova:

	          if not Instr(Line,"CHRYSLER") then response.Write Line & vbcrlf else response.write ">>" & Line & vbcrlf

Och se vad som händer :)

Medlem sedan nov. 20051 317 inlägg
#11

fixade till lite saker, så nu printar scriptet ut alla raderna från textfilen...

men den rensar inte... och det blir inga ">>"-rader med din nya kod :/

Medlem sedan juni 20019 519 inlägg
#12

ge den kod du använder just nu av..

Medlem sedan nov. 20051 317 inlägg
#13

Så här ser det ut nu :

<form name="do" method="post" action="tabort.asp?do=CreateThatCoolTextFile">
Välj textsträng: <input name="textStr" type="text" /><br />
<input type="submit" value="HIT IT!" />
</form>
<p style="font-size:10px;">
<%
	If Request.Querystring("do") = "CreateThatCoolTextFile" AND NOT Request.Form("textStr") = "" Then

		Const Filename = "testfilen.txt" ' File to read
		Const ForReading = 1, ForWriting = 2, ForAppending = 3
		Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0

		' Create a filesystem object
		Dim FSO
		set FSO = Server.CreateObject("Scripting.FileSystemObject")
		Dim Filepath
		Filepath = Server.MapPath(Filename)
		Response.Write FilePath + "<br />"
		if FSO.FileExists(Filepath) Then
			Dim file
			set file = FSO.GetFile(Filepath)

			Dim FileSize
			FileSize = file.Size

			' Open the file
			Dim TextStream
			Set TextStream = file.OpenAsTextStream(ForReading, TristateUseDefault)

			' Read the file line by line
			Do While Not TextStream.AtEndOfStream
			  dim Line
			  Line = TextStream.ReadLine
		        If not Instr(Line,""&Request.Form("textStr")&"") then response.Write Line & vbcrlf else response.write ">>" & Line & vbcrlf
		        Response.Write("<br />")
			Loop

			Set TextStream = nothing
		End If
		Set FSO = nothing
		
		Response.Write("Textfilen är rensad på rader som innehåller """&Request.Form("textStr")&""".")

	Else

		Response.Write("Knas!")

	End If
%>
</p>
Medlem sedan nov. 20051 317 inlägg
#14

Vill ju att raderna ska tas bort från textfilen.. inte att dom ska skrivas ut på sidan, förövrigt :)

Medlem sedan juni 20019 519 inlägg
#15

du måste ju få igång den innan du kan hoppa till nästa steg :P

Medlem sedan juni 20019 519 inlägg
#16
<%

set objfso = server.createobject("scripting.filesystemobject")
set objFile = objFso.getFile(server.mappath("testfilen.txt"))
Set textStream = objfso.OpenTextFile(server.mappath("testfilen.txt"),1, False)
arrRows = split(textStream.ReadAll , vbCrLf) 
textStream.close 

function getText(arrRows,ord)
  for i = lbound(arrRows) to ubound(arrRows)
    if instr(ArrRows(i),ord) then str = str & "" else str = str & ArrRows(i)
    if cint(ubound(arrRows)-1) <> cint(i) then str = str & vbCrLf
  next 
  getText = trim(str)
end function

'Skriv ut text filen men inte där raden med pelle
response.write getText(arrRows,"pelle")

%>
Medlem sedan nov. 20051 317 inlägg
#17

Det är grymt nu!

Nu skriver den bara ut dom raderna som inte innehåller ordet som man specificerat.

Kollar man källkoden för sidan då så är de rader som är "borttagna" bara blanka rader.. kan man få dom blanka raderna att försvinna? Och hur gör man för att få detta direkt till textfilen?

:stud Tack för att du tar dig tid!

Medlem sedan juni 20019 519 inlägg
#18
    if instr(ArrRows(i),ord) then str = str & "" else str = str & ArrRows(i)
    if cint(ubound(arrRows)-1) <> cint(i) AND NOT instr(ArrRows(i),ord) then str = str & vbCrLf

kanske?

Medlem sedan nov. 20051 317 inlägg
#19

Njäeh, det funkade inte :/

Medlem sedan juni 20019 519 inlägg
#20
    if instr(ArrRows(i),ord) then str = str & "" else str = str & ArrRows(i) & vbCrLf

fungera nog :)

273 ms totalt · 4 externa anrop · v20260731065814-full.d8c17768
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
136 ms — ändringar (db)