Jump to content

Replace text in a file


Recommended Posts

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 by MyEarth
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 by MyEarth
Link to comment
Share on other sites

SRER has more flexibility, though one thing for sure is _ReplaceStringInFile is designed poorly.

An improved version I submitted to the beta...

; #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 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

×
×
  • Create New...