• Global community
    • Language:
      • Deutsch
      • English
      • Español
      • Français
      • Português
  • 日本語コミュニティ
    Dedicated community for Japanese speakers
  • 한국 커뮤니티
    Dedicated community for Korean speakers
Exit
0

Splitting up a variable into two parts

Enthusiast ,
Aug 03, 2009 Aug 03, 2009

Copy link to clipboard

Copied

I've done this before but seem to be drawing a blank.

I have a variable that has two values in it, I need to split it up so I get both values

example

code=123,456

I need to extra the 123, and the 456

Can anybody remind me of the easy way to do this in CF

Thanks

Mark

TOPICS
Advanced techniques

Views

1.9K

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Guru ,
Aug 03, 2009 Aug 03, 2009

Copy link to clipboard

Copied

This is one way.

<cfloop list="#yourstring var#" index="i" delimiters=","> <cfoutput>#x#<br></cfoutput>

</cfloop

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Enthusiast ,
Aug 03, 2009 Aug 03, 2009

Copy link to clipboard

Copied

your code broke up to just CFLOOP, but I remember there was a command, I think it was one of the list commands?

Just found it.. I knew it was simple! LISTFIRST and LISTLAST.. perfect when there are only two values in the string!

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Guru ,
Aug 03, 2009 Aug 03, 2009

Copy link to clipboard

Copied

You can use the function ListGetAt(var, position) also.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Aug 04, 2009 Aug 04, 2009

Copy link to clipboard

Copied

Usually, I advocate the use of regular expressions.  Yeah, it's a bit esoteric the first time you encounter it, but it's actually pretty straightforward and extremely powerful.

Let me first refer you to the very-excellent description that will be found in Using Regular Expressions in Functions, in the ColdFusion Developer's Guide which of course can be found here:  http://livedocs.adobe.com/coldfusion/8/htmldocs/.

Now let me try to briefly "set the stage ..."

A regular-expression, briefly, is a string-matching pattern.  Let's say that you want to get "123," (with the comma), and "456") given the string "123,456."

First, the (caution: extemporaneous coding!) answer: 

parts = REMatchNoCase("([0-9]+\,)([0-9]+)", myString);

Let's look at this string-literal, which is the pattern to be matched.  First of all, you observe that it contains two parenthesized parts, back-to-back.  (I used bold-face to make it obvious.)  The parentheses mean, in each case, that we want to extract the substring that is found to match the enclosed pattern.  We want to know where they start in the string and how long they are.  So this will give us, on a silver platter as it were, the two strings we're looking for...  or a reliable indication that they're not there.

  • Within each string you will observe "[0-9]+".  This pattern means:  "one or more" (that is, "+") "digits" (that is, "[0-9]").
  • The first group also contains "\,"  The backslash means that the next character, the comma, is to be taken as a literal character.  So the first group is matching "one-or-more digits immediately followed by a literal comma."

The regular-expression engine is a highly optimized built-in piece of code that uses a pattern as a non-procedural declaration of what you are looking for in a character string, and it will very quickly and very reliably find it.

There are considerable other features that we need not discuss here.  Suffice it to say that "this Swiss Army(R) Knife" is full of blades.  And bottle-openers and corkscrews and a little tool that I have no idea what it's for but it's making a peculiar buzzing noise..."

Although you might be scared-off by "chicken scratches" at first, you will find yourself using it constantly once you understand how it works.  Just include liberal comments into your code so that you'll remember how it works, and of course, test it well.  The overwhelming advantage here is that "there is no code."  Nary a <CFIF> or a substring-search in sight.  Once you master the art of "sight-reading" a regular expression pattern, you can by inspection know that the string will work properly for anything that you might throw at it.

Note:  The regular-expression syntax used by CF is fairly standard.  There are web-sites which will allow you to test your patterns on-line.  There are also on-line libraries of patterns, free for the taking.  This is a very fundamental skill that is well worth mastering.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Enthusiast ,
Aug 04, 2009 Aug 04, 2009

Copy link to clipboard

Copied

Wow, I could program the lunar module with that command! LOL

I think I'll stick with the listfirst, listlast for this particular case.

However, thanks for that very in-depth answer and tutorial, I will go back and read it several times until I get it because I know that the REGEX can be vaery powerful and useful, I've had help putting them together in the past, but never really 'got them'

Thanks

Mark

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Engaged ,
Aug 04, 2009 Aug 04, 2009

Copy link to clipboard

Copied

Herein lies the subtle difference between "what works now" and "what works in the general case."

For example:  does this requirements-change make you sweat?

"Well, the pieces could actually be separated by a comma or a semicolon or a vertical bar.  Hope that's not a problem ..."

"Uh.  No... no it isn't... not a problem..." 

Sweat equals:  the approach that you had been taken happened to work, but now the requirements changed as they always do.

No-Sweat equals:  the approach that you took is one that applies to the general case, and that therefore can be modified as-needed without breaking.

For instance, had you used regexes from the start:

parts = REMatchNoCase("([0-9]+[,;])([0-9]+)", myString);

The addition is the bold-faced clause:  "[,;]" which matches any one of a set-of characters."  Now, either a comma or a semicolon in that position will be accepted.  No other changes are necessary.  You're ready to quickly handle almost every formatting-change the "garbage-in producers" might have to throw at you.  Your code is not only "more reliable now," but it is much more well-prepared to stay that way.

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Enthusiast ,
Aug 04, 2009 Aug 04, 2009

Copy link to clipboard

Copied

LATEST

understood .. I WILL learn how to do this, I am sure once it's understood that it won't be too difficult.

For this particular case *I* control the creation of the string that it's receiving from another page, so I'm always guaranteed to get what I need

Thanks again for all your time take to explain, truely apppreciated... I hope to pass the quiz , but give me a few weeks! 😉

Mark

Votes

Translate

Translate

Report

Report
Community guidelines
Be kind and respectful, give credit to the original source of content, and search for duplicates before posting. Learn more
community guidelines
Resources
Documentation