Sign in to follow this  
Followers 0
icadea

Need help to Insert CRLF[Stringregexp]

5 posts in this topic

Hi all,

I would need help to insert @CRLF in between a cluster of data form a log files using regex. The log files are 60MB to 80MB

Data_before

rabbit_1-01

rabbit_1-02

rabbit

parrot_2

parrot_2

After using the script below by randallc

rabbit_1-01

rabbit_1-02

rabbit

parrot_2

I would like the final data to be

rabbit_1-01

rabbit_1-02

------------- @CRLF inserted before new data

rabbit_1

------------- @CRLF inserted before new data

rabbit

------------- @CRLF inserted before new data

parrot_2

The current code I am using from the forum is shown below

Local $esSrcFile2, $esSrcFile = @TempDir & "\all.txt"
$esResultFile = @DesktopDir & "\Sum23.txt"
FileDelete($esResultFile)
$esFileData = FileRead($esSrcFile)
$esFileData1 = StringRegExpReplace($esFileData, "(?m)^(.*+)\r?\n(?=(?:.*+\r?\n)*?\1$)", "")

FileWrite($esResultFile, $esFileData1)
FileDelete(@TempDir & "\all.txt")

I did manage to find that /r/n are equivalent for CRLF but am having problem not knowing where to insert them.

Please help. thanks

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

You can't use quantifiers in lookaround parentheses, PCRE limitation...

Dim $sStr = 'rabbit_1-01' & @LF & _
            'rabbit_1-02' & @CRLF & _
            'rabbit_1' & @CRLF & _
            'rabbit' & @LF & _
            'parrot_2' 

Dim $sPattern = '(?m)^((\w+-?)(?:(?:\d+)?\r?\n)(?:\2(?:\d+)?\r?\n)*)'
$sStr = StringRegExpReplace($sStr, $sPattern, '\1' & @CRLF)
$sStr = StringRegExpReplace($sStr, '(?=\n)(?<!\r)', @CR)
ConsoleWrite($sStr & @LF)
Edited by Authenticity

Share this post


Link to post
Share on other sites

Authenticity. Thank you but after running my log files and example given here i am still getting the same result as shown below

rabbit_1-01

rabbit_1-02

rabbit

parrot_2

This is the modified script

Local $esSrcFile2, $esSrcFile = @TempDir & "\all.txt"
$esResultFile = @DesktopDir & "\Sum23.txt"
FileDelete($esResultFile)
$esFileData = FileRead($esSrcFile)

Dim $sPattern = '(?m)^((\w+-?)(?:(?:\d+)?\r?\n)(?:\2(?:\d+)?\r?\n)*)'
$esFileData1  = StringRegExpReplace($esFileData, $sPattern, '\1' & @CRLF)
$esFileData1  = StringRegExpReplace($esFileData, '(?=\n)(?<!\r)', @CR)
;ConsoleWrite($sStr & @LF)

FileWrite($esResultFile, $esFileData1)
FileDelete(@TempDir & "\all.txt")

Could someone help.. I am using Autoit 3.2.10 thanks.

Share this post


Link to post
Share on other sites

Hehe, a tiny mistake but anyway:

$esFileData1  = StringRegExpReplace($esFileData, $sPattern, '\1' & @CRLF)
$esFileData1  = StringRegExpReplace($esFileData, '(?=\n)(?<!\r)', @CR) ;?oÝ÷ ÙhZ¶+]¡ë"²Úç$¢{azz-b~'²Úⶫz+)Þ}çÂ+a¢ëZqªë¨­ën®{(Ê°¢}ý¶Çj|©àzƭ欶Øh±ç±¥ç-yÖ®¶­sbb33c¶W4fÆTFFÒ7G&æu&VtW&WÆ6Rb33c¶W4fÆTFFÂb33c·5GFW&âÂb33²b3#³b33²fײ5$Äb¢b33c¶W4fÆTFFÒ7G&æu&VtW&WÆ6Rb33c¶W4fÆTFFÂb33²óÒb3#¶âòfÇC²b333²b3#·"b33²Â5"³µoÝ÷ Øfmlº+^u©e¶jǬnë_¢¶­æ¬·Z·*.ßÛÞ²0+wöË.}øéí"Ýýu·¦¢·¦zj+ÊƯzÚ'¢Ù槢Ø^¯­ì¡»}êۺا²×vjü·¶­é{-®)àjëh×6Local $esSrcFile2, $esSrcFile = @TempDir & "\all.txt"
$esResultFile = @DesktopDir & "\Sum23.txt"
FileDelete($esResultFile)
$esFileData = FileRead($esSrcFile)

Dim $sPattern = '(?m)^((\w+-?)(?:(?:\d+)?\r?\n)(?:\2(?:\d+)?\r?\n)*)'
$esFileData  = StringRegExpReplace($esFileData, $sPattern, '\1' & @CRLF)
$esFileData  = StringRegExpReplace($esFileData, '(?=\n)(?<!\r)', @CR)
;ConsoleWrite($sStr & @LF)

FileWrite($esResultFile, $esFileData)
FileDelete(@TempDir & "\all.txt")

Share this post


Link to post
Share on other sites

Thanks. works a little but you have given me an idea. I'll insert the CR at the time it produces the log so i can use this script.

thanks again.

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  
Followers 0