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