wow sean! this is wild man! Exactly what I needed to be learning! and you've set things out so logically and helpfully! thank you so much for this! I'll go away and study it a bit, I'm slow at grasping these things eh, and hopefully now I'll be able to do it. I'll let you know how I go with it tomorrow. Thanks again for all the great code examples and explanations! Geoff c. ----- Original Message ----- From: "Sean Randall" <seanr@xxxxxxxxxxxxxxx> To: <jawsscripts@xxxxxxxxxxxxx> Sent: Monday, April 06, 2009 4:57 PM Subject: [jawsscripts] Re: inserting a comma after first word in a string? > Geoff, > > String manipulation is an important topic to get your head around, and > given > what you've been doing previously, you should quite easily be able to > grasp > the concepts. > > You can use the return value of any function either in a variable, or as > part of another function call. > > For instance, to return the position in a string where the first space > appears in a variable you might have: > ;-- > Var > String address, > Int position > let address = "58 tarrigal road," > let position = stringContains(address," ") > ;-- > The variable Position now holds the number 3 - because in "58 tarrigal > road," the first space is the third character (the 5 being the first, 8 > the > second, and so on). > By using this variable approach you can check if your position is 0 > (indicating no spaces) and act accordingly. > > How would you insert a comma before this space, then? Something like: > ;-- > Let address = stringLeft(address,position -1) +", > "+StringChopLeft(address,position) > ;-- > And address now equals "58, tarrigal road," > To explain this code: > The first function we call, stringLeft, returns any leftmost number of > characters from a string. We want the number, in this case. Our > position > includes the space, so we want the leftmost characters up to but not > including the space - so we use "position -1" to tell the script that. > The stringChopLeft function takes away any leftmost characters and returns > whatever's left, so after we've added our comma, we chop off everything up > to and including our space, and tack it back on to the end of our address > which now includes a comma. > > > As you can see from the above example, we've used the returning strings > from > the functions as well as our counter variable. Suppose you wanted to put > the > number of the address into a variable without having to keep a position? > You could call the stringContains function as part of the stringLeft > function. The second parameter to stringLeft is the number of characters > to > return, and stringContains returns the position of a character, so your > code > might look like: > ;-- > Var > String addressNumber > Let addressNumber = stringLeft(address,stringContains(address," ")-1) > ;-- > Remembering we add the -1 because we don't want the space. > > If the layout of what to put where confuses you, you might want to think > about using the "insert function" button in the parameter box of the > insert > function dialog box. > > I.e. > 1. press ctrl+I for insert function, and choose stringLeft. > 2. For parameter 1, type address. > 3. For parameter 2 ("The number of leftmost characters that will be > extracted."), click Insert Function and choose "stringContains". > 4. For parameter 1 here, provide "address" > 5. For parameter 2, you want a space in quotes " ". > 6. You're returned to your stringLeft function with code already present > and > can add your -1 to the end before hitting enter to insert the code. > > So hopefully you see that's how you use a return value of the function > inside another function. It's just a matter of using data in exactly the > same way as usual, but rather than storing the information in a variable > or > passing it directly to your function as a string, you're generating the > information on-the-fly from other functions. > > This can really build up and you have to watch your nesting of brackets, > quotation marks and commas - just remember that all functions need open > and > closing parentheses and that each parameter must be separated by a comma. > > Righty ho - must dash, early morning start and I'm off into the sunshine > to > do some voluntary computer work. I hope this made vague sense - if you > can > grasp this one then you're well on your way! > All code untested, and I'm hardly awake - so good luck. > > Sean. > "Never interrupt your enemy when he is making a mistake." Napoleon > Bonaparte > -----Original Message----- > From: jawsscripts-bounce@xxxxxxxxxxxxx > [mailto:jawsscripts-bounce@xxxxxxxxxxxxx] On Behalf Of Geoff personal > Sent: Monday, April 06, 2009 7:26 AM > To: jawsscripts@xxxxxxxxxxxxx > Subject: [jawsscripts] inserting a comma after first word in a string? > > > Hey Firstly Mr Paul Magill from Aus,, and Mr Don , > > man I sure owe you guys a lot! and a reply and acknowledgement for the > last > incredibly detailed and helpful post you sent on my \9 tab splitting up > info. > absolutely fabulous that was! Thank you for that eh. > > the reason I haven't replied yet, is that I got busy with other parts of > the > > code, and to be honest haven't yet had/made time to really sit down and > get > down and dirty with either yours or don's last great examples. > > But, I will, for at the moment my GetLine functions, which are the only > ones, as you seemed to confirm, that will retain Tabs in order to do the > delineation > for inserting pauses, is doing it ok, but I haven't put in intelligent > enough stuff to stop getting lines when the next line text isn't the > CornFlowerBlue > on black color. which I must work out how to do properly before that will > be > > a seemless function. > > But I'm incredibly greatful for the \n and \9 ideas, that backSlash n is > proving absolutely invaluable for my HotKey help stuff I'm wanting to > formulate > right now into virtual viewer. I never knew about those gems before! > > Now On to today's sinario though if I might. > > I've got a couple of issues I'm desirous of, ... yep just a little more > > assistance with, <sigh,> regarding what can be done with strings, as > against doing things directly OnScreen? > > 1. I have a situation where I need to try and insert a comma between a > street Number and streetName, in a string picked up in a GetTextInRect > string, to > assist firstPass immediate comprehension by the user,of situations like > the > following addresses: > > 50A warrigal road, > > 58 tarrigal road, > > 45C seaforth avenue, > > such that they speak like: > > 50A, Warrigal road, > > 58, terrigal road, > > 45C, seaforth avenue, > > etc. > > I'm wondering what people think might be the bestest way to do this? > > e.g. these often appear in a whole table-like matrix, so I've grabbed all > the strings with GetTextInRects, so I don't really at all wanna have to do > direct > Onscreen things like mess with Cursors, like SaveCursor, InvisibleCursor, > > go to certain point on the screen, GetWord, addItToString, +"," > add a comma, > NextWord () GetWord (), add that to string, ... etc. > > That'd be just sooooo horribly messy and inelegant! > > Especially given that I'm calling this via an OnFocus frame event, which > triggers the script to check the FrameName at Cursor, and if it's x, go to > Y > > rectangle > and grab and speak text in there etc, and I think the above way would > prove > waay to slow surely, to be useable? > > Plus I'm not even sure I'd know how to reliably build my String that way > anywayz! So, I'm wanting to know, how one could move to certain points in > a > pregatehred string > like that? > > Like I'm pretty horribly green in script land, so this'll be painfully > obvious to you pros out there, > but, well like Although I've been Told that the > > "StringContains" > > funcion, somehow, returns, the first position of the beginning character, > of the string being looked for, > Such that I half dimly thought I might be able to do something like, > > if StringContains (MyStringToLookIn, "\0") then > > ; i.e. I'm asking it if my string has any spaces in it, > > How exactly might I utilize any ability of this function, to perhaps stop > at > > the first space it sees, possibly enabling me to somehow then extract how > many > characters in from the left that was? In order to insert my comma? > > or how else do people think I might exactly code this up such that I > could > then insert a comma at that point, > in, "MyStringToLookIn," variable? > > And then put the whole thing back together such that it inserted the pause > at the right spot? > > Like really, I reckon I still just soooo don't get this idea of how to > utilize what a function, "Returns", > and subsequently utilizing those as fodda/data for other functions to work > on? > > I'ts logic I just haven't gotten my head properly around yet. > > Like I can sorta use functions, like straight, but I don't really yet get > how one begins to use, the data any given function, "returns," in any kind > of > useful way in another function I don't think. > > Like I believe I mostly understand the, If then ElIf, else, Endif cycle, > But this utilizing returns from other functions business, and how to make > another function readily be able to accept such data, presumably by their > parameters > at the top, ... that's kind of all a closed book to me at present. > > Like I dimly thought that if I knew how many characters to the right, the > first space was, I could maybe somehow then do a StringChopLeft type deal, > for > which you've seemingly gotta specify a character count, > which I thought then might've allowed me to save that chopped off section, > hopefully my streetNumber word as the first Word of the string, (which of > course I guess > might actually end up being two numbers separated by a slash as well just > to > > make things more complicated, > as in apartments like 12/106 xx ?Street, blah. > into a temporary variable, > then Save the chopped string into another temporary variable, > then do a string concatination with a comma in the mniddle of the two etc. > > could that be done though? would it work? would there be some easier way? > > it all sounds a rather hotchPotch method though? > > But, would anyone care to suggest anything or provide me with any > exemplery > code as to how I might get around this one? > Like I mean can one do, NextWord type functions on Strings, like you can > OnScreen? > > I was sure one would have to be able to utilize them as flexibly as the > OnScreen stuff, but, ... well my knowledge of the String functions is at > present > just too limited to work out exactly how I might do it? > > Thanks heaps for any help on this one. I think I'll do these situations > one > post at a time, it'll be simpler for replies. > > Thanks again. > > Geoff Chapman. > > __________ > Visit and contribute to The JAWS Script Repository http://jawsscripts.com > > View the list's information and change your settings at > http://www.freelists.org/list/jawsscripts > > __________ > Visit and contribute to The JAWS Script Repository http://jawsscripts.com > > View the list's information and change your settings at > http://www.freelists.org/list/jawsscripts > > __________ Visit and contribute to The JAWS Script Repository http://jawsscripts.com View the list's information and change your settings at http://www.freelists.org/list/jawsscripts