MyEarth Posted April 15, 2013 Posted April 15, 2013 (edited) Hi, I know there are many threads on this argument, but i'm searching the fastest method to replace some text in a file: Local $hFile = "Test.txt" $sData = "FIRSTNAME Lastname - BAT _ TIME1" & @CRLF & _ "FIRSTNAME Lastname - BAT _ TIME2" & @CRLF & _ "FIRSTNAME Lastname - BAT _ TIME3" FileWrite($hFile, $sData) FileClose($hFile) $hFileOpen = FileOpen($hFile) $ReadData = FileRead($hFileOpen) $sNewFile = StringRegExpReplace($ReadData, '(?i:' & "TIME" & ')', "COOL") ;~ $sNewFile = StringRegExpReplace($sData, "(-)(.*)(_)", "Another Text") FileClose($hFile) FileOpen($hFile, 2) FileWrite($hFile, $sNewFile) FileClose($hFile) 1) This is the fastest method, using StringRegExpReplace? 2) How to combine 2 or more StringRegExpReplace with different pattern ( i'm totally new to this )? Thanks Edited April 15, 2013 by MyEarth
Nessie Posted April 15, 2013 Posted April 15, 2013 Try this: #include<File.au3> $sData = "FIRSTNAME Lastname - BAT _ TIME1" & @CRLF & _ "FIRSTNAME Lastname - BAT _ TIME2" & @CRLF & _ "FIRSTNAME Lastname - BAT _ TIME3" $FileName = "Test.txt" $hFile = FileOpen($FileName, 1) FileWrite($hFile, $sData) FileClose($hFile) $hFileOpen = FileOpen($FileName) $ReadData = FileRead($hFileOpen) FileClose($hFileOpen) $sNewFile = StringRegExpReplace($ReadData, '(?i:' & "TIME" & ')', "COOL") $sNewFile = StringRegExpReplace($sNewFile, "(-)(.*)(_)", "Another Text") $hFileOpen = FileOpen($FileName, 2) FileWrite($hFileOpen, $sNewFile) FileClose($hFileOpen) Here you can see how to combine 2 or more StringRegExpReplace with different pattern Hi! My UDF: NetInfo UDF Play with your network, check your download/upload speed and much more! YTAPI Easy to use YouTube API, now you can easy retrive all needed info from a video. NavInfo Check if a specific browser is installed and retrive other usefull information. YWeather Easy to use Yahoo Weather API, now you can easily retrive details about the weather in a specific region. No-IP UDF Easily update your no-ip hostname(s). My Script: Wallpaper Changer Change you wallpaper dinamically, you can also download your wallpaper from your website and share it with all! My Snippet: _ImageSaveToBMPConvert an image to bmp format. _SciteGOTO Open a file in SciTE at specific fileline. _FileToHex Show the hex code of a specified file
kylomas Posted April 15, 2013 Posted April 15, 2013 MyEarth, Building on Nessie's example #include<File.au3> $sData = "FIRSTNAME Lastname - BAT _ TIME1" & @CRLF & _ "FIRSTNAME Lastname - BAT _ TIME2" & @CRLF & _ "FIRSTNAME Lastname - BAT _ TIME3" $FileName = "Test.txt" $hFile = FileOpen($FileName, 2) FileWrite($hFile, $sData) FileClose($hFile) $hFileOpen = FileOpen($FileName) $ReadData = FileRead($hFileOpen) FileClose($hFileOpen) $sNewFile = StringRegExpReplace($ReadData, 'TIME', 'COOL') ; <--- simplified $sNewFile = StringRegExpReplace($sNewFile, "- \w+ _", "Another Text") ; <--- simplified $hFileOpen = FileOpen($FileName, 2) ; <---- overwrite file FileWrite($hFileOpen, $sNewFile) FileClose($hFileOpen) shellexecute('test.txt') ; open file with default ".txt" program kylomas Forum Rules Procedure for posting code "I like pigs. Dogs look up to us. Cats look down on us. Pigs treat us as equals." - Sir Winston Churchill
MyEarth Posted April 16, 2013 Author Posted April 16, 2013 (edited) Thanks, you guys can confirm the use of StringRegExpReplace is the fastest method to replace text in a file? I see other func / method like: StringReplace _ReplaceStringInFile ( this solution don't have any wildcards ot things like that ) But i don't know what is the best to use and the fastest on larger file, i rely on your expertise Edited April 16, 2013 by MyEarth
JonBMN Posted April 16, 2013 Posted April 16, 2013 In my opinion and from many searches, it seems StringRegExpReplace is the fastest method available. If my answer is wrong I'm sure someone with more knowledge will chime in.
guinness Posted April 16, 2013 Posted April 16, 2013 SRER has more flexibility, though one thing for sure is _ReplaceStringInFile is designed poorly. An improved version I submitted to the beta... expandcollapse popup; #FUNCTION# ==================================================================================================================== ; Name ..........: _ReplaceStringInFile ; Description ...: Replaces substrings in a file. ; Syntax ........: _ReplaceStringInFile($sFilePath, $sSearchString, $sReplaceString[, $iCaseSensitive = Default[, $iOccurance = Default]]) ; Parameters ....: $sFilePath - Full path of file to replace substrings. ; $sSearchString - The string to evaluate. ; $sReplaceString - The replacement string. ; $iCaseSensitive - [optional] Flag to indicate if the operations should be case sensitive. ; $STR_NOCASESENSE (0) = not case sensitive, using the user's locale (default) ; $STR_CASESENSE (1) = case sensitive ; $STR_NOCASESENSEBASIC (2) = not case sensitive, using a basic/faster comparison ; Constants are defined in Constants.au3 ; $iOccurance - [optional] 0 - Only the first occurrence is replaced or 1 - all occurrences are replaced (default) ; Return values .: Success - Returns the number of occurrences found ; Failure - Returns -1 and sets @error to non-zero ; |@error = 1 - File is read-only ; |@error = 2 - Unable to open the file ; |@error = 3 - Unable to write to the file ; Author ........: Kurt (aka /dev/null) and JdeB ; Modified ......: guinness - Re-wrote the function entirely for improvements in readability. ; Remarks .......: ; Related .......: ; Link ..........: ; Example .......: Yes ; =============================================================================================================================== Func _ReplaceStringInFile($sFilePath, $sSearchString, $sReplaceString, $iCaseSensitive = Default, $iOccurance = Default) If StringInStr(FileGetAttrib($sFilePath), "R") Then Return SetError(1, 0, -1) ; Open the file for reading. Local $hFileOpen = FileOpen($sFilePath, $FO_READ) If $hFileOpen = -1 Then Return SetError(2, 0, -1) ; Read the contents of the file and store in a variable Local $sFileRead = FileRead($hFileOpen) FileClose($hFileOpen) ; Close the open file after reading ; Retrieve the file encoding Local $iFileEncoding = FileGetEncoding($sFilePath) ; Open the file for writing and set the overwrite flag. $hFileOpen = FileOpen($sFilePath, $iFileEncoding + $FO_OVERWRITE) If $hFileOpen = -1 Then Return SetError(3, 0, -1) ; Set the default parameters If $iCaseSensitive = Default Then $iCaseSensitive = $STR_NOCASESENSE If $iOccurance = Default Then $iOccurance = 1 ; Replace strings $sFileRead = StringReplace($sFileRead, $sSearchString, $sReplaceString, 1 - $iOccurance, $iCaseSensitive) Local $iReturn = @extended ; Write to the open file FileWrite($hFileOpen, $sFileRead) FileClose($hFileOpen) ; Close the open file after writing Return $iReturn EndFunc ;==>_ReplaceStringInFile 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 parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now