IO_Dork
asked on
Extracting text from long string after certain word
I am trying to only display certain text from a field with a long string.
If field is:
"Some Investor With a Long Title Acct#:123456789"
I want to create a formula field that looks for the "Acct#:" and returns all string data from the word "Acct#:" all the way to the end of the string. i.e. "Acct#: 123456789". The "Acct#:" will always be at the end but the account number will vary in length, so a Right() function will not suffice. I tried playing around with the Instr() function but did not get very far with it.
Thanks
Brian
If field is:
"Some Investor With a Long Title Acct#:123456789"
I want to create a formula field that looks for the "Acct#:" and returns all string data from the word "Acct#:" all the way to the end of the string. i.e. "Acct#: 123456789". The "Acct#:" will always be at the end but the account number will vary in length, so a Right() function will not suffice. I tried playing around with the Instr() function but did not get very far with it.
Thanks
Brian
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Probably going to need to use a MID or SUBSTR to do what you are looking for.
HTH,
Kent
HTH,
Kent
ASKER
The problem with the Mid({YourField},InStr({You rField},'A cct#')+5) formula is that although it works, the +5 cuts out the "Acct#" string....I want to include the Acct# along with everything that follows it. Putting in a 0 does not work as the formula wants a starting position integer greater than 0. any suggestions to get around this?
Try
Mid({YourField},InStr({You rField},'A cct'))
Mid({YourField},InStr({You
ASKER
Although, a crude solution is to add a space infront of the "Acct#" in the formula then just use +1 as the starting position so that it starts returning text at the "A" of the string "Acct#"....I'd rather find a cleaner and more correct way to accomplish this, but if this is the only way then I can settle for it. Let me know what you all think.
ASKER
Mid({YourField},InStr({You rField},'A cct')) does not work, CR still wants a starting position integer of 1 or greater.
ASKER
the mid also does not work properly if there is a difference in case...is there a way to address this in the formula to be case insensitive?
ASKER
think i just figured out the case sensitive issue. I added ",1" after the 'Acct' part of the formula. let me know if this is correct.
Mid({investor.i_letter1},I nStr({inve stor.i_let ter1},' Acct',1)+1)
Mid({investor.i_letter1},I
Does it always have Acct in it?
Are any of the fields NULL?
Try
Mid({YourField},InStr(UCas e({YourFie ld}),'ACCT '))
mlmcc
Are any of the fields NULL?
Try
Mid({YourField},InStr(UCas
mlmcc
sounds like a job for a plumber is this Php? can you use pipes in Php? you can PIPE in strings and drop then drop literals out of the pipe.
PIPE > var1,1 | drop ......| > var1
sorry if I am way off I am an old mainframe Plummer (cms pipes) and it has been a long time.
I thought the concept of pluming has been ported to other platforms.
PIPE > var1,1 | drop ......| > var1
sorry if I am way off I am an old mainframe Plummer (cms pipes) and it has been a long time.
I thought the concept of pluming has been ported to other platforms.
Yes, adding the 1 argument to InStr should handle the case issue.
FWIW, if the field does not always include "Acct#", you could handle that by checking the result from InStr first. Then you don't have to rely on there being a space in front of "Acct#".
if InStr({investor.i_letter1} ,'Acct',1) > 0 then
Mid({investor.i_letter1},I nStr({inve stor.i_let ter1},'Acc t',1))
else
{investor.i_letter1}
Put the result that you want to see when the field does not include "Acct#" after the "else" (eg. the field, or "" to get an empty string).
If there will always be a space in front of "Acct#", then what you have in that last post seems fine, and would probably be a bit more efficient, since it only uses InStr once.
FWIW, if the field could be null, that may be something that you need/want to handle as well.
James
FWIW, if the field does not always include "Acct#", you could handle that by checking the result from InStr first. Then you don't have to rely on there being a space in front of "Acct#".
if InStr({investor.i_letter1}
Mid({investor.i_letter1},I
else
{investor.i_letter1}
Put the result that you want to see when the field does not include "Acct#" after the "else" (eg. the field, or "" to get an empty string).
If there will always be a space in front of "Acct#", then what you have in that last post seems fine, and would probably be a bit more efficient, since it only uses InStr once.
FWIW, if the field could be null, that may be something that you need/want to handle as well.
James
ASKER
Field will never be null, it's an account name field.
Have you tried the suggestions?
If so what are the results?
How do the results differ from the expected or desired result?
mlmcc
If so what are the results?
How do the results differ from the expected or desired result?
mlmcc
ASKER
The only solution that works is the one I mentioned...putting space I front of the word Acct and a +1 for the starting point, won't work without a starting int > 0
ASKER
But I can always rely on there being a space before Acct in the field
Well, like I said, you could test the result from InStr first to make sure that it's not 0. That will work too (unless there's some other factor involved that I'm not aware of). But if the space will always be there, then your way is fine.
James
James
ASKER
Close and works, but not a fool proof solution that I needed.
ASKER
my formula field:
Split({investor.i_letter1}
Some have a space between "Acct" and "#" and some don't, so I just left out the "#".
i.e. - Split({investor.i_letter1}
However, I noticed that some account titles contain "ACCT", or "Acct"....is this formula Case Sensitive?