CFLib.org – Common Function Library Project

StringSplice(string, p)

Last updated March 17, 2010

author

Eric Twilegar

Version: 0 | Requires: CF5 | Library: StrLib

Description:
Easy short hand for grabbing chunks of a string or cutting of sections without using regular expresions or Mid,Left,Right

Return Values:
Returns a string.

Example:

<cfoutput>
#StringSplice("Good day sir", "1:-2")#<br>
#StringSplice("Good day sir", "2:")#
#StringSplice("Good day sir", "2:4")#<br>
#StringSplice("Good day sir", "4")#<br>
#StringSplice("Good day sir", "-2")#
</cfoutput>

Parameters:

Name Description Required
string String to splice Yes
p pattern to splice Yes

Full UDF Source:

/**
 * Python Style String Splicing
 * See http://docs.python.org/3.1/tutorial/introduction.html#strings for basics.
 * 
 * @param string 	 String to splice (Required)
 * @param p 	 pattern to splice (Required)
 * @return Returns a string. 
 * @author Eric Twilegar (eric.twilegar@gmail.com) 
 * @version 0, March 17, 2010 
 */
function StringSplice(string, p)
{
// used later for length to cut out.
var c = 0;
var p1="";
var p2="";
// likely going to use length.
var l = len(string);


// TODO: Add better check for properly formatted Pattern P

// if no : then a single number.
if ( not FindNoCase(":",p) ) 
{
c = val(p);
	if ( c GTE 0 ) 
	{
		return Mid(string,c,1);
	}
	else  
	{
		return Mid(string,l+c+1,1);
	}

}


// If the user omits this pads the left or write of the string so that GetToken functions. 
//Faster parse probably better. 
if ( Left(p, 1) IS ":") p = " " & p;
if ( Right(p, 1) IS ":") p = p & " ";

// P1 is token on left of : if any 
// p2 is token on right of : if any.
p1 = GetToken(p,1,":");
p2 = GetToken(p,2,":");


// if not length of p1 it is 1. CF is one based.
if ( val(p1) IS 0 ) p1 = 1;
// if not length then p2 is the length of the string + 1...since CF is 1 based.
if ( val(p2) IS 0 ) p2 = l + 1;

// if less then 0 then p2 actually should be set to l - abs(p2)
if ( p2 LT 0 ) p2 = l + p2 + 1;

if ( p1 LT 0 ) return ""; // Error condition.
if ( p1 GT p2 ) return ""; // Error condition.

// since mid takes a start count not start and end like a proper language...convert.
c = p2 - p1;

return Mid(string,p1,c);
}
blog comments powered by Disqus

Search CFLib.org


Latest Additions

Kevin Cotton added
date2ExcelDate
May 5, 2016

Raymond Camden added
CapFirst
April 25, 2016

Chris Wigginton added
loremIpsum
January 18, 2016

Gary Stanton added
calculateArrival...
November 19, 2015

Sebastiaan Naafs - van Dijk added
getDaysInQuarter
November 13, 2015

Created by Raymond Camden / Design by Justin Johnson