Find Replace in Script Editor with cr
Alex Tweedly
alex at tweedly.net
Wed Apr 7 10:07:08 EDT 2021
Hi Sean,
I'm struggling a bit to understand how you intend to use this.
You give an example of
> *if* field "Level" begins with "Director" and field "UserDisplay" is not
> empty and field "UserDisplay" is not "All Agents" and the label of button
> "Status" is "All Sales"*then*
> *put* pidbQueryDatabase( "SELECT * FROM QGNew where UserID = '" & (fld
> "UserID" of card 17 stack "QGv3") \
> & "' AND DealerID = '" & (fld "DealerID" of card 1 stack "QGv3") \
> & "' AND Status LIKE '%" & ("Sale") \
> & "%' OR UserID = '" & (fld "UserID" of card 17 stack "QGv3") \
> & "' AND DealerID = '" & (fld "DealerID" of card 1 stack "QGv3") \
> & "' AND Status LIKE '%" & ("Connect") \
> & "%'") into tMsg
BUT - that's no longer correct code; you need to add the "end if" after it.
I don't see how any find/replace is going to do that successfully.
You could tweak the script editor to allow some token to imply inserting
a linefeed - but you'd still need to find the relevant end of statement
and insert the 'end if' that you need.
So (unless I'm missing something) you will finish up doing a scripted
solution. Also, I do believe you will want to have the ease of use of
using the find/replace panel to select only those lines which are to be
modified (otherwise you are likely to pull in a number of cases you
don't want).
If it were me, I'd follow a process like :
1. identify the lines to be changed (parentheses for readability)
find/replace (put then) ---> (put /*change*/ then)
2. use a plugin / frontscript to allow some weird key to trigger the
changes.
Sample plugin (with thanks to Jacque for the outline)
> on preOpenStack
> if the long name of this stack is among the lines of the
> frontscripts then
> put "---> passing" after msg
> pass preOpenStack
> else
> insert the script of this stack onto front
> end if
> end preOpenStack
>
> on commandKeyDown whichKey ---- from Jacqueline Landman Gay
> if ("editor field" is not in the name of the target and "script" is
> not in the name of the target) \
> or the shiftkey is not down
> then pass commandKeyDown
>
> local tSel, tNewSel
> if whichKey = "+" then
> select text of the target
> put the selection into tSel
> repeat for each line L in tSel
> if L contains "then /*change*/ put" then
> replace "then /*change*/ put" with "then " & CR & "put" in L
> replace ("& " & quote) with ("\" & CR & " & " & quote) in L
> put CR & "end if" after L
> end if
> put L &CR after tNewSel
> end repeat
> set the text of the target to tNewSel
> select empty
> else
> pass commandKeyDown
> end if
> setEditorDirty
> end commandKeyDown
>
> private command setEditorDirty
> type space
> delete char (word 4 of the selectedchunk) of the target
> end setEditorDirty
>
3. ??? the srcipt editor has lost the "coloization" of the script. There
is (or used to be) some way to restore that for the entire script - but
I can't remember it. Hitting 'TAB' does it for the current handler but
not for the whole script.
So, I apologize - I've got carried away and provided a "creative"
solution that is outside the remit of your question. So sue me :-)
But since I had just finished reading Andre's book on plugins and
development tools, this seemed like a good opportunity to try out
creating a plugin.
Alex.
On 07/04/2021 06:16, Sean Cole (Pi) via use-livecode wrote:
> Hi all,
> So, the semicolon example was only given as an oversimplification because
> most of you didn't read the original post properly, jumped to the
> wrong conclusion and then offered irrelevant answers. But then, the
> oversimplification gathered the same results of people jumping to the wrong
> conclusion by not reading the posts correctly. (It wasn't helped by my /n
> \n typo that was jumped on and assumed to be where I was going wrong. It is
> the paradox of this forum. Make it comprehensive, people get lost and lose
> the point and give the wrong answer. Make it simple and they read more into
> it and then equally get it wrong.
>
> The code I deal with on a daily basis is infinitely more complex than a
> simple - put the script of someThing into tscript; replace “;” with “;” &
> cr in script; Set the script of someThing to tscript - and can do that kind
> of thing in my sleep (as I often do, but infinitely more complex).
>
> So, I KNOW all of these SCRIPTING techniques. I'm not interested! I can do
> that. NOT A PROBLEM :)
>
> BUT IN THE FIND/REPLACE PANEL !!!??
>
> Can I use a return character (or a wildcard, escaped, coded form) in the
> REPLACE field OF THE PANEL. - A simple question.
>
> You CAN use RegEx in the FIND Field. In there you can SEARCH for \n ((I got
> it right this time)) which refers to a line feed (or new line). BUT, you
> CANNOT, it seems, as best I can find or from the comments made, use \n to
> replace or insert a line feed.
>
> In my scripts (the several thousands of them) there are NO (zero, none)
> semicolons used to separate commands. It was used ONLY to help give you a
> simpler idea of what I was trying to achieve without having to use too much
> detail. But this kind of dialogue on a forum filled with 'clever' people
> trying to demonstrate how clever they are means they often miss the point
> and give answers that do not fulfil the remit! Or just answer a simple
> ruddy question.
>
> Here, then, is a 'Real World' example of what I am facing. There are many
> variants and not my only issue, but a useful example, sample, demonstration.
>
>
> *[code]if* field "Level" begins with "Director" and field "UserDisplay" is
> not empty and field "UserDisplay" is not "All Agents" and the label of
> button "Status" is "All Sales" *then* *put* pidbQueryDatabase( "SELECT *
> FROM QGNew where UserID = '" & (fld "UserID" of card 17 stack "QGv3") & "'
> AND DealerID = '" & (fld "DealerID" of card 1 stack "QGv3") & "' AND Status
> LIKE '%" & ("Sale") & "%' OR UserID = '" & (fld "UserID" of card 17 stack
> "QGv3") & "' AND DealerID = '" & (fld "DealerID" of card 1 stack "QGv3") & "'
> AND Status LIKE '%" & ("Connect") & "%'") into tMsg
> [/code]
> That is all on a single line of a script in one of many thousand buttons.
> In and of itself is not so much a problem as it is just difficult for me to
> plough through when working out what the script is doing. In this button
> alone there are 32 lines similar in nature to this.
>
> To make it easier for me to go through, as I arrive at each button to
> simplify and correlate and combine into much more elegant code in the card
> script, I would like to be able, IN THE FIND REPLACE PANEL, not by code or
> porting or anything else, just to search and replace (& ") with (\ cr & ")
> (parenthesis used here just to wrap the strings), and (then put) with (then
> cr put). Hence, it will look a bit more like this:
>
> [code]
> *if* field "Level" begins with "Director" and field "UserDisplay" is not
> empty and field "UserDisplay" is not "All Agents" and the label of button
> "Status" is "All Sales" *then*
> *put* pidbQueryDatabase( "SELECT * FROM QGNew where UserID = '" & (fld
> "UserID" of card 17 stack "QGv3") \
> & "' AND DealerID = '" & (fld "DealerID" of card 1 stack "QGv3") \
> & "' AND Status LIKE '%" & ("Sale") \
> & "%' OR UserID = '" & (fld "UserID" of card 17 stack "QGv3") \
> & "' AND DealerID = '" & (fld "DealerID" of card 1 stack "QGv3") \
> & "' AND Status LIKE '%" & ("Connect") \
> & "%'") into tMsg
> [/code]
>
> Ideally I'd want it even better than this eventually. But key to doing just
> this for now was being able to use a return character in the replace field
> of the find/replace panel.
>
> My original question was 'Just wondering if there is a way of replacing
> using cr in the find/replace panel of the script editor.'
>
> A simple Yes or No would have been sufficient. Even better, a yes with a
> 'just use this form : x,y,z' as a sample. I just hoped someone had found a
> simple method, especially as the guides and documentation are so woefully
> out of date and incomplete. Something more than 'the meaning of life = 42'
> and less than 'measuring gravity = the complete works of Sir Isaac Newton',
> as long as it actually answers the question asked :)
>
> (And please don't go into the simplification of the SQL requests, the 'if'
> condition or any other poop. I'm FULLY aware of this to the nth degree and
> is why I'm going through this poop-show of a stack. Over 10 years of
> poor/bad/dirty coding that now needs cleaning and refactoring without
> rebuilding from the ground up. I'm just working my way through and have
> managed 6 of the 801 cards)
>
> Stats for this behemoth:
> Number of stacks = 109
> Total number of cards = 801
> Total number of controls = 82579
> Total number of buttons = 19124
> Total Number of fields = 33484
> Total number of groups = 12152
> Total number of graphics = 14359
> Total number of images = 3282
> Total Lines of code = 360036
>
> :-)
> Sean
>
> On Tue, 6 Apr 2021 at 23:42, doc hawk via use-livecode <
> use-livecode at lists.runrev.com> wrote:
>
>> sean slipped
>>
>>> For instance, suppose I have multiple commands on one line separated by ;
>>> and I want to search for semicolon and replace with semicolon followed by
>>> return character to drop the remaining script onto a new line.
>> put the script of someThing into tscript
>> replace “;” with “;” & cr in script
>> Set the script of someTHing to tscript
>> _______________________________________________
>> use-livecode mailing list
>> use-livecode at lists.runrev.com
>> Please visit this url to subscribe, unsubscribe and manage your
>> subscription preferences:
>> http://lists.runrev.com/mailman/listinfo/use-livecode
>>
> _______________________________________________
> use-livecode mailing list
> use-livecode at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode
More information about the use-livecode
mailing list