asiawatcher Posted January 17, 2016 Posted January 17, 2016 (edited) test.au3 How can we read a whole text file and compare the last 3 lines with each other ? cheers Edited January 17, 2016 by Melba23 Fixed post
InunoTaishou Posted January 17, 2016 Posted January 17, 2016 I don't really know what exactly you're trying to accomplish, a little more info would help, but you just stated you want to compare the last three lines in a file. You can use StringCompare to do that #include <File.au3> Example() Func Example() Local $aFile Local $iLastIndex Local $iCompare1 Local $iCompare2 Local $iCompare3 _FileReadToArray(@ScriptDir & "\Test File.txt", $aFile, $FRTA_NOCOUNT) If (@Error) Then MsgBox("", "_FRTA Error", "Failed to read file to array") Return EndIf If (UBound($aFile) >= 3) Then $iLastIndex = UBound($aFile) - 1 $iCompare1 = StringCompare($aFile[$iLastIndex], $aFile[$iLastIndex - 1]) $iCompare2 = StringCompare($aFile[$iLastIndex - 1], $aFile[$iLastIndex - 2]) $iCompare3 = StringCompare($aFile[$iLastIndex - 2], $aFile[$iLastIndex]) MsgBox("", "Compare", "Last line and one line before last: " & ($iCompare1 = 0 ? "Equal" : $iCompare1 > 0 ? "Last line is greater" : "Line before last is greater") & @CRLF & _ "One line before last and two lines before last: " & ($iCompare2 = 0 ? "Equal" : $iCompare2 > 0 ? "Line before last is greater" : "Two lines before last is greater") & @CRLF & _ "Two lines before last and Last line: " & ($iCompare3 = 0 ? "Equal" : $iCompare3 > 0 ? "Two lines before last is greater" : "Last line is greater")) Else MsgBox("", "Array Size", "Array is too small to compare") EndIf EndFunc
asiawatcher Posted January 17, 2016 Author Posted January 17, 2016 hi thanks for your reply i got a text file filled with numbers in one column like 2 3 4 5 5 5 I want when i find 3 instances like 5,5,5 to throw an error but always the last line compared to the x2 above ones thanks
asiawatcher Posted January 17, 2016 Author Posted January 17, 2016 i guess this will do the trick thank you so much
InunoTaishou Posted January 17, 2016 Posted January 17, 2016 If they're just numbers then you don't need to do StringCompare. Sounds like you're just trying to make sure that there isn't three consecutive lines with 5s on them? #include <File.au3> Example() Func Example() Local $aFile Local $bError = False _FileReadToArray(@ScriptDir & "\Test File.txt", $aFile, $FRTA_NOCOUNT) If (@Error) Then MsgBox("", "_FRTA Error", "Failed to read file to array") Return EndIf For $i = UBound($aFile) - 1 To 2 Step -1 If ($aFile[$i] = 5 and $aFile[$i - 1] = 5 and $aFile[$i - 2] = 5) Then $bError = True ConsoleWrite("Detected three 5s on lines " & ($i - 1) & " to " & ($i + 1) & @LF) EndIf Next If ($bError) Then MsgBox("", "555", "Error detected in file") Else MsgBox("", "No Errors", "No errors detected in file") EndIf EndFunc Idk why I did it backwards through the file but that's how I did it.... lol
asiawatcher Posted January 17, 2016 Author Posted January 17, 2016 it can be 555 or 333 or 222 i just want to make sure i dont have 3 lines with same numbers not just 5's any number
InunoTaishou Posted January 17, 2016 Posted January 17, 2016 Then replace 5 with the other corresponding lines
mikell Posted January 17, 2016 Posted January 17, 2016 You can try this $txt = StringStripWS(FileRead("1.txt"), 8) If StringRegExp($txt, '(.)\1\1$') Then Msgbox(0,"", "the 3 last ones are the same") asiawatcher 1
guinness Posted January 17, 2016 Posted January 17, 2016 (edited) 8 => $STR_STRIPALL and 0 => $MB_OK Edited January 17, 2016 by guinness 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
mikell Posted January 17, 2016 Posted January 17, 2016 5 minutes ago, guinness said: 8 => $STRIP_ALL and 0 => $MB_OK Sorry ... 8 => $STRIP_ALL $STR_STRIPALL #include <MsgBoxConstants.au3> #include <StringConstants.au3> $last3 = StringRegExpReplace(StringStripWS(FileRead("1.txt"), $STR_STRIPALL), '.*(.{3})$', "$1") Msgbox($MB_OK ,"", $last3 & @crlf & "the 3 last ones are " & ((StringRegExp($last3, '(.)\1\1')=1) ? "" : "not") & " the same")
guinness Posted January 17, 2016 Posted January 17, 2016 Thanks 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
asiawatcher Posted January 18, 2016 Author Posted January 18, 2016 15 hours ago, mikell said: You can try this $txt = StringStripWS(FileRead("1.txt"), 8) If StringRegExp($txt, '(.)\1\1$') Then Msgbox(0,"", "the 3 last ones are the same") thank you so much everybody for your replies the above example is very nice and small 2 lines only any way on top of that to also detect if there is the number 4 present before the 3 that we are already comparing ? cheers
mikell Posted January 18, 2016 Posted January 18, 2016 Here it is #include <MsgBoxConstants.au3> #include <StringConstants.au3> $txt = StringStripWS(FileRead("1.txt"), $STR_STRIPALL) ; If StringRegExp($txt, '(.)\1\1$') Then Msgbox($MB_OK,"", "the 3 last ones are the same") If StringRegExp($txt, '4...$') Then Msgbox($MB_OK,"", 'there is a "4" before the 3 last ones') asiawatcher 1
asiawatcher Posted January 18, 2016 Author Posted January 18, 2016 17 hours ago, mikell said: You can try this $txt = StringStripWS(FileRead("1.txt"), 8) If StringRegExp($txt, '(.)\1\1$') Then Msgbox(0,"", "the 3 last ones are the same") amazing thanks works as a charm
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