Page 1 of 2
search
Posted: Sun Aug 24, 2014 8:27 am
by robm80
How to search for a word and after it is found to mark it in some way.
like
underlining or
coloring
Part of the script:
Code: Select all
put number of cards into tNum
repeat with i=2 to tNum
if tSearchString is in fld "comment" of cd i then
put tSearchString &&"on card"&& word 2 of name of cd i& CR&\
after tResult
end if
end repeat
Re: search
Posted: Sun Aug 24, 2014 9:30 am
by jmburnod
Hi Rob,
One way to do that with offset function
Something like that:
Code: Select all
on setStyleFoundWord pFld,pString
put the length of pString into nbc
set the textstyle of char 1 to -1 of fld pFld to plain
put offset(pString,fld pFld) into tOffset
set the textstyle of char tOffset to (tOffset + nbc-1) of fld pFld to underline
end setStyleFoundWord
Best regards
Jean-Marc
Re: search
Posted: Sun Aug 24, 2014 10:14 am
by robm80
Thanks J-M, I'll try.
Rob
Re: search
Posted: Sun Aug 24, 2014 11:01 am
by robm80
This how your script is implemented, but no Underlinig, but an errormessage:
button "zoek": execution error at line 13 (Handler: can't find handler) near "info", char 38Code: Select all
on mouseUp tFld,tZoekstring
if visible of btn "foundbox" is false then
set visible of btn "foundbox" to true
ask "put string or lettercombination"
put it into tZoekstring
if tZoekstring is empty then
break
end if
put number of cards into tNum
repeat with i=2 to tNum
if tZoekstring is in fld "comment" of cd i then
put fld "comment" of cd i info tFld --<<---------errormessage
put tZoekstring &&"op card"&& word 2 of name of cd i&\
CR after tResult
end if
end repeat
delete char -1 of tResult
sort tResult
put tResult into btn "foundbox"
else
set visible of btn "foundbox" to false
end if
end mouseUp
on setStyleFoundWord tFld,tZoekstring
put the length of tZoekstring into nbc
set the textstyle of char 1 to -1 of fld tFld to plain
put offset(tZoekstring,fld tFld) into tOffset
set the textstyle of char tOffset to&\
(tOffset + nbc-1) of fld tFld to underline
end setStyleFoundWord
What's wrong?
Rob
Re: search
Posted: Sun Aug 24, 2014 11:45 am
by Klaus
Replace the F with a T!

Re: search
Posted: Sun Aug 24, 2014 2:51 pm
by robm80
Replace the F with a T
To see it or to see it or to see it not
Yes, no errormessage anymore, but the script gives no underlining at all

More ideas

Thanks, Rob
Re: search
Posted: Sun Aug 24, 2014 3:11 pm
by Klaus
Rob,
you are not calling "setStyleFoundWord" anywhere in your "mouseup" handler, but you should
Best
Klaus
Re: search
Posted: Sun Aug 24, 2014 5:43 pm
by robm80
Still I get an errormessage.
Stead "on setStyleFoundWord, tFld,tZoekstring, I introduced the Global tFld,tZoekstring
because "on mouseUp tFld,tZoekstring" did nothing.
Code: Select all
on mouseUp
global tFld,tZoekstring
put empty into tZoekstring
if visible of btn "foundbox" is false then
set visible of btn "foundbox" to true
ask "Vul zoekstring of lettercombinatie in"
put it into tZoekstring
if tZoekstring is empty then
break
end if
put number of cards into tNum
repeat with i=2 to tNum
if tZoekstring is in fld "comment" of cd i then
put fld "comment" of cd i into tFld
put tZoekstring &&"op card"&& word 2 of name of cd i &\
CR after tResult
end if
end repeat
delete char -1 of tResult
sort tResult
put tResult into btn "foundbox"
else
set visible of btn "foundbox" to false
end if
send setStyleFoundWord----------, tFld,tZoekstring (right or wrong ?)
end mouseUp
on setStyleFoundWord
global tFld,tZoekstring
put the length of tZoekstring into nbc
set the textstyle of char 1 to -1 of tFld to plain --<<-----errormessage
put offset(tZoekstring,fld tFld) into tOffset
set the textstyle of char tOffset to (tOffset + nbc-1) of fld tFld to underline
end setStyleFoundWord
The errormessage contains the whole fld "comment" and is far too long to get copied, but here a part of it:
(Chunk: error in object expression)
Hope you get it!
Rob
Re: search
Posted: Sun Aug 24, 2014 6:39 pm
by Klaus
Hi Rob,
1. instead fo putting the NAME of your field into the global variable tFld
you put the CONTENT of that field into variable:
Code: Select all
...
if tZoekstring is in fld "comment" of cd i then
## put fld "comment" of cd i into tFld
put "comment" into tFld
...
2.Do not use "send" here, this is not neccessary, just call the handler:
Code: Select all
...
end if
setStyleFoundWord
## tFld,tZoekstring (right or wrong ?)
## No, you changed the script to use GLOBAL VARIABLES, didn't you?
end mouseUp
3. you forgot the object descriptor:
Code: Select all
...
## set the textstyle of char 1 to -1 of tFld to plain --<<-----errormessage
set the textstyle of char 1 to -1 of FLD tFld to plain
...
Hope you get it!
Hope YOU get it!
Best
Klaus
Re: search
Posted: Sun Aug 24, 2014 9:28 pm
by robm80
No, I don't get it
I have to say that the second part of the script (by J-M) is academic stuff for me, iow too complicated.
There are no errormessages anymore, but the script does nothing al all: no underlining of the searchstring.
Accidently, by hitting <Enter> the whole text is underlined, totally unexpected.
Rob
Re: search
Posted: Sun Aug 24, 2014 11:16 pm
by jmburnod
hi Rob,
Klaus is definitively right

, tfld must contain only the field name
Please try this (no tested):
Code: Select all
on mouseUp
--jmb mod. Using param instead global variable
-- global tFld,tZoekstring
put empty into tZoekstring
if visible of btn "foundbox" is false then
set visible of btn "foundbox" to true
ask "Vul zoekstring of lettercombinatie in"
put it into tZoekstring
if tZoekstring is empty then
break
end if
put number of cards into tNum
repeat with i=2 to tNum
if tZoekstring is in fld "comment" of cd i then
--jmb mod
-- put fld "comment" of cd i into tFld
put "comment" into tFld -- that was the tick as Klaus said
put tZoekstring &&"op card"&& word 2 of name of cd i &\
CR after tResult
end if
end repeat
delete char -1 of tResult
sort tResult
put tResult into btn "foundbox"
else
set visible of btn "foundbox" to false
end if
--jmb mod
--setStyleFoundWord ----------, tFld,tZoekstring (right or wrong ?)
setStyleFoundWord tFld,tZoekstring
end mouseUp
on setStyleFoundWord pFld,pZoekstring
--jmb mod. Using param instead global variable
-- global tFld,tZoekstring
set the textstyle of char 1 to -1 of pFld to plain --<<-----errormessage.
put the length of pZoekstring into nbc
put offset(tZoekstring,fld pFld) into tOffset
set the textstyle of char tOffset to (tOffset + nbc-1) of fld pFld to underline
end setStyleFoundWord
Best regards
Jean-Marc
Re: search
Posted: Mon Aug 25, 2014 2:07 am
by robm80
Thanks J-M, but there still is an errormessage in the second line of your part:
Code: Select all
on setStyleFoundWord tFld,tZoekstring
set the textstyle of char 1 to -1 of tFld to plain --<<-------errormessage
put the length of tZoekstring into nbc
put offset(tZoekstring,fld tFld) into tOffset
set the textstyle of char tOffset to (tOffset + nbc-1) of fld tFld to underline
end setStyleFoundWord
Errormessage: button "zoek": execution error at line n/a (Chunk: error in object expression) near "comment", char 1.
Hope you see why.
Rob
Re: search
Posted: Mon Aug 25, 2014 4:01 am
by jacque
I'd do this:
Code: Select all
on doFind pString
repeat
find pString in fld "comment"
if the result <> "" or the shiftkey is down then exit repeat
set the backcolor of the foundchunk to "yellow"
put the short name of this cd && the foundchunk into tRef
if tRef is among the lines of tList then
exit repeat
else
put tRef & cr after tList
end if
end repeat
end doFind
Look at the "find" command in the dictionary, there are many variations. This example finds matches at the beginnings of words in a field named "comments" and sets the backcolor of each match to yellow. I've put in a safety stop if you want to prematurely abort the loop; hold down the shift key to stop it.
The Find command isn't very fast for huge stacks, but for anything under a few hundred cards it's fast enough.
Re: search
Posted: Mon Aug 25, 2014 8:51 am
by jmburnod
Rob,
Hope you see why.
Yes. I forgot "fld" before pFld.
Code: Select all
set the textstyle of char 1 to -1 of fld pFld to plain --<<-----errormessage.
Jean-Marc
Re: search
Posted: Mon Aug 25, 2014 11:34 am
by robm80
Jacque:
I implemented your script in the mine:
Code: Select all
on mouseUp
put empty into tZoekstring
lock screen
put empty into btn "foundbox"
show btn "foundbox"
ask "What word"
put it into tZoekstring
if tZoekstring is empty then
break
end if
doFind tZoekstring
unlock screen
end mouseUp
on doFind tZoekstring
repeat
find word tZoekstring in fld "comment"
if the result <> "" or the shiftkey is down then exit repeat
put the short name of this cd into tRef
if tRef is among the lines of tList then
exit repeat
else
put tRef & cr after tList
end if
end repeat
put tList into btn "foundbox"
end doFind
1. The drawn box around the word is sufficient
2. This box is created around the word in the fld "comment"of the first card only.
The names of the other cards are correct, but the word is not marked.
3. In the first try the matched words were colored yellow and a box was drawn.
These marks seem to be there forever. How can I get rid of them the next time
I go to that card.
4. Sometimes all flelds "comment" are totally underlined. This is not allowed! I had to correct it manually!
Please get me rid of the marks, even where I had caused an underlining that does not disappear...
Thanks
Rob