JScript Posted October 31, 2012 Share Posted October 31, 2012 (edited) Hello guys! I have a doubt that for many can be quite simple to solve, but unfortunately I do not understand almost nothing of regex! I wanted to know how to identify only the character _ at the end of the line indicating that it continues in the next line... Example: MsgBox(4096, "Title _ v1", "This program is free software: you can redistribute it and/or modify" & _ 'it under the terms of the GNU General Public License " _"' & _ ; Only comment! "as published by the Free Software Foundation, either version 3" & _ "of the License, or (at your option) any later version.") If anyone can help me I'll be very grateful! Edit: Another example: $aRtl = DllCall("ntdll.dll", "int", "RtlCompressBuffer", _ "ushort", 2, _ ;------> CompressFormat "ptr", $pInput, _ ;---> ptrSrceBuffer "dword", $iSize, _ ;--> SrceBufferSize "ptr", $pBuffer, _ ;--> ptrDestBuffer "dword", $iBufLen, _ ;> DestBufferSize "dword", 4096, _ ;----> ChunkSize "dword*", 0, _ ;------> CompressedSize "ptr", $pWrkSp) ;-----> WorkspaceBuffer thankful, JS Edited October 31, 2012 by JScript FireFox 1 http://forum.autoitbrasil.com/ (AutoIt v3 Brazil!!!) Somewhere Out ThereJames Ingram Download Dropbox - Simplify your life!Your virtual HD wherever you go, anywhere! Link to comment Share on other sites More sharing options...
BrewManNH Posted October 31, 2012 Share Posted October 31, 2012 Look for a "_" followed by a CRLF. If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator Link to comment Share on other sites More sharing options...
JScript Posted October 31, 2012 Author Share Posted October 31, 2012 And in this case: _ ; Only comment! ?? JS http://forum.autoitbrasil.com/ (AutoIt v3 Brazil!!!) Somewhere Out ThereJames Ingram Download Dropbox - Simplify your life!Your virtual HD wherever you go, anywhere! Link to comment Share on other sites More sharing options...
BrewManNH Posted October 31, 2012 Share Posted October 31, 2012 Two vastly different questions, if you have alternate requirements, then you should have stated them up front. You can use the pipe as an OR statement to see if the underscore is followed by a space and either a CRLF or a semi-colon. If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator Link to comment Share on other sites More sharing options...
iamtheky Posted October 31, 2012 Share Posted October 31, 2012 why not just regexp for "& _" $Aunderscores = StringRegExp ($string , "& _", 3) ,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-. |(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/ (_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_) | | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) ( | | | | |)| | \ / | | | | | |)| | `--. | |) \ | | `-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_| '-' '-' (__) (__) (_) (__) Link to comment Share on other sites More sharing options...
czardas Posted October 31, 2012 Share Posted October 31, 2012 (edited) This isn't quite working and I don't know why. I decided to post my attemps anyway, in case it turns out to be useful and that I might also learn something.#include <Array.au3> $sString = "This program is free software: you can redistribute it and/or modify & _" & @CRLF & _ 'it under the terms of the GNU General Public License " _" & _ ; Only comment!' & @CRLF & _ ; Only comment! "as published by the Free Software Foundation, either version 3 & _" & @CRLF & _ "of the License, or (at your option) any later version." $regExp = "(&h+_h*(;.*)?)" $aArray = StringRegExp($sString, $regExp, 3) _ArrayDisplay($aArray)Anyway I believe it is customary to strip away all comments before parsing. I would just concatenate strings ending with underscore using StringReplace.EditI believe the above RegExp approach is not suitable in most circumstances. It is inefficient and my example (besides being broken) does not cater for matches found within strings. There may be simpler ways than using RegExp, depending on what you want to achieve. Edited October 31, 2012 by czardas JScript 1 operator64 ArrayWorkshop Link to comment Share on other sites More sharing options...
Bert Posted October 31, 2012 Share Posted October 31, 2012 have you thought of trying the RegEx tool that is part of the help file? Look for the Tutorial - Regular Expression in the help file and at the bottom is the script button for the tool. czardas 1 The Vollatran project My blog: http://www.vollysinterestingshit.com/ Link to comment Share on other sites More sharing options...
JScript Posted October 31, 2012 Author Share Posted October 31, 2012 (edited) Two vastly different questions, if you have alternate requirements, then you should have stated them up front. I guess you did not pay attention to the example I posted! MsgBox(4096, "Title _ v1", "This program is free software: you can redistribute it and/or modify" & _ 'it under the terms of the GNU General Public License " _"' & _ ; Only comment! "as published by the Free Software Foundation, either version 3" & _ "of the License, or (at your option) any later version.") You would have seen this sequence: " _"' & _ ; Only comment! And would not have given this answer: Look for a "_" followed by a CRLF. @boththose Sorry, but sometimes can be as follows: , _ @czardas Excellent, but as I said above, sometimes can be as follows: , _ @scullion That phrase / advice was for me? If yes, thank you! JS Edited October 31, 2012 by JScript http://forum.autoitbrasil.com/ (AutoIt v3 Brazil!!!) Somewhere Out ThereJames Ingram Download Dropbox - Simplify your life!Your virtual HD wherever you go, anywhere! Link to comment Share on other sites More sharing options...
PhoenixXL Posted October 31, 2012 Share Posted October 31, 2012 (edited) This might helpFunc MatchSingleScores($nString) Local $nPattern = "['" & '"]' & ".*" & "['" & '"]' ;~ ConsoleWrite($nPattern & @CR) ;Remove String enclosed in Quotes Local $nRegEx = StringRegExpReplace($nString, $nPattern, '') If @error Then Exit @extended ;Remove Comments $nPattern = ";.*" $nRegEx = StringRegExpReplace($nRegEx, $nPattern, '') ;Return Match Return StringRegExp($nRegEx,' _') EndFunc ;==>ReplaceScores If MatchSingleScores(' "Hello there" _ ;This is a comment' & @CRLF _ & ' "This is the Second Line"') Then Exit ConsoleWrite('Underscore is There!'&@CR)=0 Exit ConsoleWrite('No Match Found')=0 Edited October 31, 2012 by PhoenixXL JScript 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. Link to comment Share on other sites More sharing options...
Varian Posted October 31, 2012 Share Posted October 31, 2012 (edited) This captures each line that ends with an underscore or ends with an underscore & a comment; This returns the entire matched line up to the underscore #include <Array.au3> Local $iString $iString &= 'MsgBox(4096, "Title _ v1", "This program is free software: you can redistribute it and/or modify" & _' & @LF $iString &= ' "it under the terms of the GNU General Public License " _" & _ ; Only comment!' & @LF $iString &= ' "as published by the Free Software Foundation, either version 3" & _' & @LF $iString &= ' "of the License, or (at your option) any later version.")' & @LF $iString &= '$aRtl = DllCall("ntdll.dll", "int", "RtlCompressBuffer", _' & @LF $iString &= ' "ushort", 2, _ ;------> CompressFormat' & @LF $iString &= ' "ptr", $pInput, _ ;---> ptrSrceBuffer' & @LF $iString &= ' "dword", $iSize, _ ;--> SrceBufferSize' & @LF $iString &= ' "ptr", $pBuffer, _ ;--> ptrDestBuffer' & @LF $iString &= ' "dword", $iBufLen, _ ;> DestBufferSize' & @LF $iString &= ' "dword", 4096, _ ;----> ChunkSize' & @LF $iString &= ' "dword*", 0, _ ;------> CompressedSize' & @LF $iString &= ' "ptr", $pWrkSp) ;-----> WorkspaceBuffer' & @LF $iString &= '_ ; Only comment!' MsgBox(262208, 'Original String', $iString) RegEx($iString) Func RegEx($nString) Local $nPattern = "(?m)(^.*_)(?:s*$|s*;.*s*$)" ConsoleWrite($nPattern & @CR) Local $nRegex = StringRegExp($nString, $nPattern, 3) If @error Then Exit @extended _ArrayDisplay($nRegex) EndFunc ;==>RegEx Edited October 31, 2012 by Varian JScript 1 Link to comment Share on other sites More sharing options...
jchd Posted October 31, 2012 Share Posted October 31, 2012 Detecting AutoIt statement continuation requires parsing from the left hand and implies actual parsing of the syntax. Ad hoc patterns can do it in a restricted number of cases, but certainly not in all cases. I don't believe a simple regexp can be produced to this effect and, should one ever pop up, it would be fairly complex and unmaintainable. This is a job for a lexer. JScript 1 This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt) Link to comment Share on other sites More sharing options...
JScript Posted October 31, 2012 Author Share Posted October 31, 2012 (edited) @PhoenixXL Very nice, thank you!!! @Varian Of all the tests I did was his example was what went right but as was said in the post above, I believe that may fail in some cases, although it has not failed with me! @jchd You hit the point... I thank everyone for their efforts in helping me! JS Edited October 31, 2012 by JScript czardas 1 http://forum.autoitbrasil.com/ (AutoIt v3 Brazil!!!) Somewhere Out ThereJames Ingram Download Dropbox - Simplify your life!Your virtual HD wherever you go, anywhere! Link to comment Share on other sites More sharing options...
BrewManNH Posted October 31, 2012 Share Posted October 31, 2012 identify only the character _ at the end of the lineFrom your description of what you were looking for in the first post, and me not looking at the whole string, you were asking how to identify the underscore at the end of the line. Having a further requirement to identify a comment at the end of the line with an underscore before it isn't in the description of what you were looking for. As I said, explain the full objective upfront and it won't require you having to refine it as the thread continues. A line with an underscore at the end IS vastly different from a continued line with a comment at the end.Just my 2 cents. If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator Link to comment Share on other sites More sharing options...
JScript Posted October 31, 2012 Author Share Posted October 31, 2012 No problem, I'm sorry if I have not explained well! JS http://forum.autoitbrasil.com/ (AutoIt v3 Brazil!!!) Somewhere Out ThereJames Ingram Download Dropbox - Simplify your life!Your virtual HD wherever you go, anywhere! Link to comment Share on other sites More sharing options...
PhoenixXL Posted November 1, 2012 Share Posted November 1, 2012 modified a bit varian's code-->Now Replaces the Underscores with the Next LineLocal $iString $iString = 'DllCall("ntdll.dll", "int", "RtlCompressBuffer", _' & @LF & _ '"ushort", 2, _ ;------> CompressFormat' & @LF & _ '"ptr", $pInput, _ ;---> ptrSrceBuffer' & @LF & _ '"dword", $iSize, _ ;--> SrceBufferSize' & @LF & _ '"ptr", $pBuffer, _ ;--> ptrDestBuffer' & @LF & _ '"dword", $iBufLen, _ ;> DestBufferSize' & @LF & _ '"dword", 4096, _ ;----> ChunkSize' & @LF & _ '"dword*", 0, _ ;------> CompressedSize' & @LF & _ '"ptr", $pWrkSp) ;-----> WorkspaceBuffer' ConsoleWrite('Returned: ' & RegEx($iString) & @CR) ;Replaces the Underscores with the NextLine Func RegEx($sString) Local $sPattern = "(?m)(^.*)( _)(?:s*$|s*;.*s*$)" ;Remove the Comments Local $sRegex = StringRegExpReplace($sString, $sPattern, '1') ;Now Lets Join them Return StringRegExpReplace($sRegex, '(?m)([rn])', '') EndFunc ;==>RegEx 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. Link to comment Share on other sites More sharing options...
jchd Posted November 1, 2012 Share Posted November 1, 2012 As I said, that simple-minded approach fails if the substring ' _' is present in either a literal string in the active statement part or in a mono-line comment. The general case needs a lexer. Period. This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt) Link to comment Share on other sites More sharing options...
PhoenixXL Posted November 1, 2012 Share Posted November 1, 2012 As I said, that simple-minded approach fails if the substring ' _' is present in either a literal string in the active statement part or in a mono-line comment.Can you please give a correct Autoit Syntax where this failsThanks for your time 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. Link to comment Share on other sites More sharing options...
jchd Posted November 1, 2012 Share Posted November 1, 2012 Here you are: Local $sString $sString = '$s = "This a short example."' & @CRLF & _ 'ConsoleWrite($s & @LF)' ConsoleWrite('Returned: ' & RegEx($sString) & @CR) $sString = '$s = "Another example." ; with a short comment _' & @CRLF & _ 'ConsoleWrite($s & @LF)' ConsoleWrite('Returned: ' & RegEx($sString) & @CR) $sString = '$s = "Yet another example _ ; tada."' & @CRLF & _ 'ConsoleWrite($s & @LF)' ConsoleWrite('Returned: ' & RegEx($sString) & @CR) ;Replaces the Underscores with the NextLine Func RegEx($sString) Local $sPattern = "(?m)(^.*)( _)(?:s*$|s*;.*s*$)" ;Remove the Comments Local $sRegex = StringRegExpReplace($sString, $sPattern, '1') ;Now Lets Join them Return StringRegExpReplace($sRegex, '(?m)([rn])', '') EndFunc ;==>RegEx This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt) Link to comment Share on other sites More sharing options...
PhoenixXL Posted November 1, 2012 Share Posted November 1, 2012 right its very complex 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. Link to comment Share on other sites More sharing options...
jchd Posted November 1, 2012 Share Posted November 1, 2012 Please don't take it bad. The issue here is that we can have a number of cases, the most delicate being that we need to decide if we're in a string literal, a true continuation operator or inside a comment. We may encounter the ' _' sequence everywhere, or not at all. To make things harder, a string can use single- or double-quotes delimiters ('abc' = "abc"), yet include double- or single-quotes respectively, or escaped (doubled) quote delimiter, non exclusively ("Mac'Do" = 'Mac''Do', 'Hi "folks"' = "Hi ""folks"""). That only by itself is far from completely trivial. But realize that what looks like a valid string literal with any quoting might in fact be inside a comment, as a line by itself or after a partial or final statement. The only way out is to parse the syntax from the left hand and that requires a gross-grain parser. I fully acknowledge this _can_ in theory be done in a single PCRE regexp (after all PCRE is as close to a Turing machine as one can dream). BUT --and this is a big but-- doing so is very far from elementary and would be both ugly, very large and unmaintainable. Robjong 1 This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt) Link to comment Share on other sites More sharing options...
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