Jump to content

delete / replace multiple lines between two keywords


Recommended Posts

Hi all,

I have a TXT-File with the content

file start

[xbeginx]

a

b

c

d

[xendx]

file stop

now I want to replace the content between xbeginx and xendx to make the TXT-File looks like

[xbeginx]

clean

[xendx]

my code doesnt work :( it seems it doesnt work on multiple lines....

$sFile = "source.txt"
$sText = FileRead($sFile,FileGetSize($sFile))

$aFound = _StringBetween($sText,"[xbeginx]","[xendx]")

$sText = StringReplace($sText, "$aFound", "clean")

$sFileNew = "result.txt"
FileWrite($sFileNew,$sText)

can you help me?

thanks

Edited by svatvn
Link to comment
Share on other sites

my first guess is @CRLFs are read into the string and mess it up for you.

I'll play around with the code a second.

Edit: $aFound displays correctly with _arraydisplay($aFound)

Edited by Xandy
Link to comment
Share on other sites

You can access the data in $aFound[0]. :)

I think what you might want to do is parse the file for [xbeginx] then crop the lines between the end tag.

I'll write it using _FileReadToArray()

edit:

I'm going to abort my example, I've having trouble being sure if I'm writing what you want and others might be more on track with what you want done.

I can finish it up after you get back to us if you still need help.

Edited by Xandy
Link to comment
Share on other sites

$sText = StringReplace($sText, "$aFound", "clean")

$sText = StringReplace($sText, $aFound[0], "clean").

Don't quote the variable otherwise it is passed as a string. Simultaneously as Xandy said the return of _stringbetween is an array therefore $aFound[0] would be the first match.

Regards :)

Edited by PhoenixXL

My code:

PredictText: Predict Text of an Edit Control Like Scite. Remote Gmail: Execute your Scripts through Gmail. StringRegExp:Share and learn RegExp.

Run As System: A command line wrapper around PSEXEC.exe to execute your apps scripts as System (LSA). Database: An easier approach for _SQ_LITE beginners.

MathsEx: A UDF for Fractions and LCM, GCF/HCF. FloatingText: An UDF for make your text floating. Clipboard Extendor: A clipboard monitoring tool. 

Custom ScrollBar: Scroll Bar made with GDI+, user can use bitmaps instead. RestrictEdit_SRE: Restrict text in an Edit Control through a Regular Expression.

Link to comment
Share on other sites

This will work pressuming the opening square bracket is not included in the text you wish to replace. I have solved this before, but I forget how. It will come to me again, no doubt. Here's the code as it stands.

Local $sText = "[xbeginx]some text between[xendx] outside" & @CRLF & _
"[xbeginx]more text[xendx] more stuff"

Local $sStart = "(\[xbeginx\])"
Local $sEnd = "(\[xendx\])"
Local $sReplace = "clean"

$sText = StringRegExpReplace($sText, "(?i)" & $sStart & "([^\[]*)" & $sEnd , "$1" & $sReplace & "$3")

MsgBox(0, "", $sText)
Link to comment
Share on other sites

Why not use turn that text file into an Ini file? You're pretty much 75% there, unless it's not your config file.

UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...