Hej! Det enklaste är om du skaffar något editeringsprogram som har stöd för Regular Expressions. Ah! Glömde den lilla grejen att detta skall vara helt automatiserat utan mänsklig inblandning. För det första: kan du VB? Nope! Kan jag inte påstå att jag kan. Det är därför jag vill ha hjälp. <code=vbscript> Hej Martin! Kanske 134 följs av en tabb och inte blanktecken. Nu löste jag det till slut. Efter lite googlande och sökande efter regexp så kom jag till slut på vad felet var.Söka efter text i textfil och sedan radera hela raden med vbs
Jag heter Peter och är ny på forumet.
Jag är inte så haj på detta men har förstått att ni är det.
Jag har ett litet problem som jag skulle vilja ha hjälp med.
Jag har en texfil som är full med rader. Vissa av raderna börjar med t ex:
134 lite text lite mer text ännu mer text
2 lite text lite mer text ännu mer text
3 lite text lite mer text ännu mer text
0 lite text lite mer text ännu mer text
134 lite text lite mer text ännu mer text
134 lite text lite mer text ännu mer text
Jag skulle alltså med en *.vbs-fil vilja ha bort alla rader som börjar med 134 och ersätta med ingenting.
Jag har hittat lite "färdiga" script med hjälp av google som gör nästan det jag vill, men inte riktigt ända fram. Något script ersatte endast 134 och lät resten stå kvar
Ett annat gjorde inte ett jota av det jag ville.
Ett tredje stekte hela filen som jag ville modifiera. :/
Jag har föröskt att ändra och greja i scripten själv men förstår mig inte riktigt på vad jag gör :(
Jag vill ha möjligheten att söka med wildcard (*) efter 134 då texten som står efter just 134 inte alltid är samma.
Kan ngn vänlig själ hjälpa mig med detta?
/PeterSv: Söka efter text i textfil och sedan radera hela raden med vbs
Annars är principen i just ditt fall (om det verkligen är det enkla fallet att det är de första siffrorna):
str = "134"
for alla rader i filen
if not left(raden, len(str)) = str then
skriv raden till ny filen
end if
nextSv:Söka efter text i textfil och sedan radera hela raden med vbs
Så här:
En batch-fil skapar en lista med detta innehåll från Netbackup med nattens backuper.
vidare så sorteras listan för att sedan mailas iväg.
Innan listan mailas iväg så vill jag ta bort ett antal "skräp" rader för att mailet skall se prydligare ut. Detta script skall anropas i batchfilen.
Den kod du skrev säger mig ingenting faktiskt :/
Det jag har experimenterat med är följande:
Code:
option explicit
On Error Resume Next
'Since this was written for Windows Scri
' pting Host,
'it uses VBScript which doesn't use type
' s.
'To use this with VB, as types to the de
' clarations
Dim objFSO 'as FileSystemObject
Dim fle1 'as file
Dim fle2 'as file
Dim strPath 'as String
Dim strFldr 'as String
Dim strLine 'as String
strPath = "C:\temp\crap.txt" 'Put In the file you want To edit
strFldr = "C:\temp\crap2.txt"
Main 'This Calls the Main Sub
Sub Main()
Dim rtn 'as Integer
rtn = CopyStuff() 'This calls and runs the CopyStuff function
if rtn = 1 Then
MsgBox "Copy is complete"
else
MsgBox "An Error was found and the process was aborted. " & Cstr(rtn)
'The & Cstr(rtn) will display the number returned by CopyStuff
'After you've got your script running, you may want To remove this feature
End if
'Cleanup
if Not fle1 is nothing Then Set fle1 = nothing
if Not fle2 is nothing Then Set fle2 = nothing
if Not objFSO is nothing Then Set objFSO = nothing
End Sub
function CopyStuff()
Set objFSO = CreateObject("Scripting.FileSystemObject") 'This creates the FSO
'I've included Error handling after Each step
if err.number <> 0 Then
MsgBox "Error In Creating Object: " & err.number & "; " & err.description
CopyStuff = 0 'Returns this number
Exit function 'Stop processing, go back to Main
End if
if Not objFSO.FileExists(strPath) Then 'The file To copy is not present
MsgBox "The " & strPath & " file was Not found On this computer"
CopyStuff = 2
Exit function
End if
if objFSO.FileExists(strFldr) Then
objFSO.DeleteFile(strFldr) 'If the temp file is found, delete it
End if
Set fle1 = objFSO.OpenTextFile(strPath) 'Open
if err.number <> 0 Then
MsgBox "Error opening " & strPath & ": " & err.number & "; " & err.description
CopyStuff = 3
Exit function
End if
Set fle2 = objFSO.CreateTextFile(strFldr) 'Create the temp file
if err.number <> 0 Then
MsgBox "Error creating temp ini: " & err.number & "; " & err.description
CopyStuff = 4
Exit function
End if
'Here's the work horse that does the copying
Do While Not fle1.AtEndofStream
strline = fle1.ReadLine
If strline like "134%" Then
fle2.WriteLine "testskrift"
Else
fle2.WriteLine strValue
End If
Loop
if err.number <> 0 Then
MsgBox "Error transfering data: " & err.number & "; " & err.description
CopyStuff = 5
fle1.close
fle2.close
Exit function
End if
fle1.close
Set fle1 = nothing
fle2.close
Set fle2 = nothing
'objFSO.DeleteFile strPath, True 'This deletes the original file
objFSO.MoveFile strFldr, strPath 'This moves and renames the temp file, replacing the original
if err.number <> 0 Then
MsgBox "Error replacing " & strPath & " With new file: " & err.number & "; " & err.description
CopyStuff = 6
Else
CopyStuff = 1 'Remember that In Main, a 1 means successful
End if
End function
End Code
Det här scriptet har jag dock sabbat så nu fungerar det inte alls. Det jag ville var att få det att fungera med * efter 134. Jag vill naturligtvis också att den skall ta bort hela raden där 134 finns...
/PeterSv: Söka efter text i textfil och sedan radera hela raden med vbs
Om ja:
Det jag beskrev var pseudokod för hur programmet ska skrivas.
Du öppnar två filer; ena är den du vill använda, andra är den du vill skriva till.
Sen går du igenom den första rad för rad; om raden inte matchas (det kollar du enligt min förra post), så skriver du den till den andra filen, annars hoppar du över den.
Jag har inte tid att sätta mig in i koden du skickade, men någon annan kanske vill göra det. Du borde rimligtvis kunna använda det som står där, om den gör "ungefär" vad du vill.Sv:Söka efter text i textfil och sedan radera hela raden med vbs
Det som du beskriver har jag förstått att det script jag bifogade här gör, men det når inte ända fram.
Så om ngn annan vänlig själ kan förbarma sig över detta.... snälla!
/PeterSv: Söka efter text i textfil och sedan radera hela raden med vbs
Set fso = CreateObject("Scripting.FileSystemObject")
source = fso.OpenTextFile(FilNamn, 1).ReadAll
With New RegExp
.Pattern = "^134 .*$"
.Global = True
source = .Replace(source, "")
End With
fso.CreateTextFile(NyttFilNamn, True).Write source
</code>Sv:Söka efter text i textfil och sedan radera hela raden med vbs
Provade detta, men det fungerade inte?! Eller gör jag fel?
Jag bara kopierade din kod och klistrade in det i en ny fil. Ändrade filnamn, från och till och körde sedan.
No go! :(
Så här:
Set fso = CreateObject("Scripting.FileSystemObject")
source = fso.OpenTextFile("C:\temp\crap.txt", 1).ReadAll
With New RegExp
.Pattern = "^134 .*$"
.Global = True
source = .Replace(source, "")
End With
fso.CreateTextFile("C:\temp\crap2.txt", True).Write source
Den gör en ny fil när jag kör den visserligen, men har inte tagit bort raderna med "134 ... osv"
Filen ser precis likadan ut som från början.
Eller skall jag använda denna kod i den som Jag bifogade ovan?!
/PeterSv: Söka efter text i textfil och sedan radera hela raden med vbs
Prova med "^134\s.*$" iställetSv:Söka efter text i textfil och sedan radera hela raden med vbs
Så här skall det vara:
-----------------------------------------------------------
Set fso = CreateObject("Scripting.FileSystemObject")
source = fso.OpenTextFile("crap.txt", 1).ReadAll
With New RegExp
.Pattern = "134.*"
.Global = True
source = .Replace(source, "")
End With
fso.CreateTextFile("C:\temp\crap2.txt", True).Write source
------------------------------------------------------------------
Tricket låg i "134.*"
Äntligen så gör scriptet det som jag vill. :) Tjohoo!
Stänger tråden som löst.
Tack för all hjälp.
/Peter