Jump to content
Sign in to follow this  
svatvn

delete / replace multiple lines between two keywords

Recommended Posts

svatvn

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

Share this post


Link to post
Share on other sites
Xandy

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

Share this post


Link to post
Share on other sites
Xandy

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

Share this post


Link to post
Share on other sites
PhoenixXL

$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
  • Like 1

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.

Share this post


Link to post
Share on other sites
czardas

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)
  • Like 1

Share this post


Link to post
Share on other sites
guinness

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

  • Like 1

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

Share this post


Link to post
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
Sign in to follow this  

×