Solved

REFind variables

Posted on 2008-06-25
12
273 Views
Last Modified: 2013-12-24
I have a comma delimited set of variables. For example (rone, gtwo, bthree). The variables are dynamic so the lengths can vary. The first value, rone is r=firstname and one=last name. How can I use REFIND to strip out this values?
0
Comment
Question by:usky1
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 6
  • 6
12 Comments
 
LVL 39

Expert Comment

by:gdemaria
ID: 21868004
Could you please clarify ..

 you have a list of strings "rone, gtwo, bthree" ?

 what do you mean "r" is firstname?

 <cfoutput>#r#</cfoutput>

Would display "John" ?


 <cfoutput>#one#</cfoutput>

Would display "Smith" ?

0
 

Author Comment

by:usky1
ID: 21868371
I have a URL that i am parsing. I strip out the individual names(sn#).
http://server.com/inds3.cfm?sn1=ronel&sn2=gtwo&sn3=bthreet
The structure is the first character is the first name (r) and all the rest are the last name (one). There can be one, two or three variables present. I am trying to find a way to identify all teh variables so I can update the database with the values.
I have created this loop to parse the information,
<cfset SNs = "">
<cfloop index="i" from="1" to="3">
      <cfif IsDefined("url.sn"&i)>
            <cfset intSN = Evaluate("url.sn"&i)>
            <!--- <cfset intSN = REReplace(intSN, "[^0-9]", "", "all")> --->
            <cfif intSN NEQ "">
                  <cfquery name="GetCSN" datasource="#request.dataSource#">
                        select * from ib_ChildReg where ID = #intID#
                  </cfquery>
                  <cfloop query="GetChildSN">
                        
                        <cfset SNs = ListAppend(SNs, intSN)>
                        <cfcookie name="sn_no" value="#SNs#">
                  </cfloop>
            </cfif>
      </cfif>
</cfloop>
And have stripped out the characters with the following,
<cfset fn1 = #Mid(sn1,1,1)#>
<cfset fn2 = #Mid(sn2,1,1)#>
<cfset fn3 = #Mid(sn3,1,1)#>
<cfset ln1 = #Mid(sn1,2,10)#>
<cfset ln2 = #Mid(sn2,2,10)#>
<cfset ln3 = #Mid(sn3,2,10)#>
I would like to see if I can do a loop for the full process and not worry if there one, two or three variables and set each one.
I hope this explains it. Please let me know if you need more information. thanks.
0
 
LVL 39

Expert Comment

by:gdemaria
ID: 21868522
Ok, it's getting a little clearer..  

For the first part, looping through your URL variables, you can loop through your query string like this.  

<cfset qstring = cgi.query_string>  <!--- the query string --->
<cfloop index="aPair" list="#cgi.query_string#" delimiters="&">
  <cfset v_name  = listFirst(aPair,"=")>
  <cfset v_value = listRest(aPair,"=")>
  <!---- verify that the name/value pair is like sn1, sn2, sn3 ---->
  <cfif left(v_name,2) is "sn" and isnumeric(trim(replace(v_name,"sn","")))>
       <!---- now you have v_name and v_value to work with ---->
       <cfset firstLetter = left(v_value,1)>
       <cfset lastName  = mid(v_value,2,len(v_value))>

  </cfif>
</cfloop>

The <CFIF > statement ensures that you are only working with sn# variables rather than anything else that may be on the URL at that time.

Now that we have the name/value pairs broken out, you want to split them into first lettter and rest of characters?

<cfset firstLetter = left(v_value,1)>
<cfset lastName  = mid(v_value,2,len(v_value))>

next?
0
Get proactive database performance tuning online

At Percona’s web store you can order full Percona Database Performance Audit in minutes. Find out the health of your database, and how to improve it. Pay online with a credit card. Improve your database performance now!

 

Author Comment

by:usky1
ID: 21874852
Thank you for the loop statment.
I've updated it to,
<cfset fns = "">
<cfset qstring = cgi.query_string>  <!--- the query string --->
<cfloop index="aPair" list="#cgi.query_string#" delimiters="&">
  <cfset v_name  = listFirst(aPair,"=")>
  <cfset v_value = listRest(aPair,"=")>
  <!---- verify that the name/value pair is like sn1, sn2, sn3 ---->
  <cfif left(v_name,2) is "sn" and isnumeric(trim(replace(v_name,"sn","")))>
       <!---- now you have v_name and v_value to work with ---->
       <cfset firstLetter = left(v_value,1)>
       <cfset lastName  = mid(v_value,2,len(v_value))>
         <cfset fns = ListAppend(fns, firstLetter)>
  </cfif>
</cfloop>

Should I be able to look at each individual vale from the listappend? For example,
<cfoutput>#fns2#</cfoutput>
Shouldn't I see the second value?
0
 
LVL 39

Expert Comment

by:gdemaria
ID: 21875069
In the example you provided, if the URL contained
 sn1=rone&sn2=gtwosn3=bthree

Then your variables "fns" would end up with a value of  r,g,b
which is a list of the first letters, created by this line...

<cfset fns = ListAppend(fns, firstLetter)>

So far we have not set any values to a variable :  fns2

Here's where I am still a little lost.   Now that we have the firstletter and last name available to us in a loop, what is your objective with them?

I am wondering if you really need to create separate variables for each or do we just process each one inside the loop and at the end of the loop, we're done?

I've commented the attached code to show some questions, but rather than answering those, you could just try and give me the big picture of where you want to go.  For example,  I need a cookie to hold a list of last names,  I need to fetch from the database based on xxxxx and take this ID and....

I'm sure we'll get where you need to go, just a little foggy right now :)


Trying to translate what this does..
 
<cfif intSN NEQ "">
  <cfquery name="GetCSN" datasource="#request.dataSource#">
    select * from ib_ChildReg where ID = #intID# <=== where does intID come from?
  </cfquery>
  <cfloop query="GetChildSN"> <!==== where does GetChildSN come from?
    <cfset SNs = ListAppend(SNs, intSN)> <!=== is one of these from the query?
    <cfcookie name="sn_no" value="#SNs#"> <!=== SNs seems to hold the original values unparsed?
  </cfloop>
</CFIF>

Open in new window

0
 

Author Comment

by:usky1
ID: 21877105
This is the cycle I need to accomplish,
1. Parse the URL for id's and sn's
2. Parse each id and sn listed and then assign a variable number to them (for later use)
3. Parse the sn's to take out the firstname and lastname, for query exists or updates.
4. Verify through a query if the id does not exist then add it to the table.
5. Each row includes,
      cno(the same cno is used for all the variables)
      id, sn1(firstname) sn1(lastname). (this would loop through each id/sn)


<!==== where does GetChildSN come from?=========
<cfset SNs = "">
<cfloop index="i" from="1" to="3">
      <cfif IsDefined("url.sn"&i)>
            <cfset intSN = Evaluate("url.sn"&i)>
            <!--- <cfset intSN = REReplace(intSN, "[^0-9]", "", "all")> --->
            <cfif intSN NEQ "">
                  <cfquery name="GetChildSN" datasource="#request.dataSource#">
                        select * from ib_ChildReg where ID = #intID#
                  </cfquery>
                  <cfloop query="GetChildSN">
                        
                        <cfset SNs = ListAppend(SNs, intSN)>
                        <cfcookie name="sn_no" value="#SNs#">
                  </cfloop>
            </cfif>
      </cfif>
</cfloop>

<!=== is one of these from the query? Yes
<!=== SNs seems to hold the original values unparsed? Yes

Please let me know if you ahve any other questions.
0
 
LVL 39

Expert Comment

by:gdemaria
ID: 21877443
If you're ok with using an array, this code will populate an array of the values..

The array will be 1 to (the number of items on the URL)  regardless of the sn numbers...


<cfset fnsArray = arrayNew(1)>
<cfset qstring = cgi.query_string>  <!--- the query string --->
<cfloop index="aPair" list="#cgi.query_string#" delimiters="&">
  <cfset v_name  = listFirst(aPair,"=")>
  <cfset v_value = listRest(aPair,"=")>
  <!---- verify that the name/value pair is like sn1, sn2, sn3 ---->
  <cfif left(v_name,2) is "sn" and isnumeric(trim(replace(v_name,"sn","")))>
       <!---- now you have v_name and v_value to work with ---->
       <cfset firstLetter = left(v_value,1)>
       <cfset lastName  = mid(v_value,2,len(v_value))>
       <cfset fnsArray(arrayLen(fnsArray)) = v_value>
  </cfif>
</cfloop>
 
<cfdump var=#fnsArray#">

Open in new window

0
 
LVL 39

Expert Comment

by:gdemaria
ID: 21877507
more comments on your version so to pin down where to go with my version...
<cfset SNs = "">
<cfloop index="i" from="1" to="3">
  <cfif IsDefined("url.sn"&i)>
    <cfset intSN = Evaluate("url.sn"&i)>
    <cfif intSN NEQ "">
       <cfquery name="GetChildSN" datasource="#request.dataSource#">
        select intSN from ib_ChildReg where ID = #intID# <=== don't you mean intSN ?  intID is not defined. Don't select * 
       </cfquery>
       --- this is faster than the CFLOOP --- 
       <cfset SNs = ListAppend(SNs, valueList(GetChildSN.intSN))> <=== is this the query's column name?  If so add query name as scope
    </cfif> 
  </cfif>
</cfloop>
-- if you want this to be ALL children of all SNs then it must be outof the loops
<cfcookie name="sn_no" value="#SNs#">

Open in new window

0
 

Author Comment

by:usky1
ID: 21878272
I am getting the following error,

Can not assign a value to a function.
Unable to assign a value to the function "fnsArray" on line 10, column 14

Line 10 is <cfset fnsArray(arrayLen(fnsArray)) = v_value>
0
 
LVL 39

Accepted Solution

by:
gdemaria earned 500 total points
ID: 21878356
sorry an array should have [ ]  not ( )

<cfset fnsArray[arrayLen(fnsArray)] = v_value>

0
 

Author Comment

by:usky1
ID: 21883911
I still ran into errors with the above so i was trying to figure out how to get all the variables I needed and came up up with the following,
<!--- group all id's for cookie --->
<cfset IDs = "">
<cfloop index="i" from="1" to="3">
      <cfif IsDefined("url.id"&i)>
            <cfset intID = Evaluate("url.id"&i)>
            <cfset intID = REReplace(intID, "[^0-9]", "", "all")>
            <cfif intID NEQ "">
                  <cfquery name="GetChild" datasource="#request.dataSource#">
                        select * from ib_ChildReg where ID = #intID#
                  </cfquery>
                  <cfloop query="GetChild">
                        <cfcookie name="customer_no" value="#GetChild.customer_no#">
                        <cfset IDs = ListAppend(IDs, intID)>
                  </cfloop>
            </cfif>
      </cfif>
</cfloop>
<cfif IDs NEQ "">
      <cfcookie name="ChildIDs" value="#IDs#">
</cfif>

<!--- group all sn's for cookie --->
<cfset SNs = "">
<cfloop index="i" from="1" to="3">
      <cfif IsDefined("url.sn"&i)>
            <cfset intSN = Evaluate("url.sn"&i)>
            <cfif intSN NEQ "">
                  <cfquery name="GetChildSN" datasource="#request.dataSource#">
                        select * from ib_ChildReg where ID = #intID#
                  </cfquery>
                  <cfloop query="GetChildSN">
                        <cfset SNs = ListAppend(SNs, intSN)>
                        <cfcookie name="ChildSNs" value="#SNs#">
                  </cfloop>
            </cfif>
      </cfif>
</cfloop>

<!--- set all id/sn to individual variables  --->
<cfset myarray=ListToArray(#CGI.QUERY_STRING#, "&")>
<!--- Dumb for testing purposes --->
<cfdump var="#myarray#" expand="yes">

<cfloop index="ax" from="1" to="#ArrayLen(myarray)#">
      <!--- <cfoutput>#myarray[ax]#</cfoutput> --->
    <cfset variable=#ListToArray(#myarray[ax]#,"=")#>
    <!--- <cfdump var="#variable#" expand="yes"> --->
</cfloop>
<cfset fn1 = left(sn1,1)>
<cfset ln1  = mid(sn1,2,len(sn1))>
<cfset fn2 = left(sn2,1)>
<cfset ln2  = mid(sn2,2,len(sn2))>
<cfset fn3 = left(sn3,1)>
<cfset ln3  = mid(sn3,2,len(sn3))>

<!--- I have all the first and last names identified --->
<cfoutput>
ids=#ids#<p>
sns=#sns#<p>
fn1=#fn1#<p>
ln2=#ln1#<p>
fn2=#fn2#<p>
ln2=#ln2#<p>
fn3=#fn3#<p>
ln3=#ln3#<p>
</cfoutput>

<!--- 1. How do I loop through all the firstnames(fn's) and lastnames(ln's) to see
if already exists in the database?
2. If no exists then how do I loop through all the firstnames(fn's) and lastnames(ln's) to insert into
the database? --->

<cfset qArray = listToArray(ids) />
<cfloop from="1" to="#arraylen(qArray)#" index="i">
     <cfquery name="AddUser" datasource="#request.dataSource#">
          INSERT INTO CReg (cusno,IID,sn1)
          VALUES ( '#cno#','#qArray[i]#');
     </cfquery>
</cfloop>
0
 

Author Closing Comment

by:usky1
ID: 31470570
Thank you for your help. I have learned something new, always a good thing. Can you recommend and books, beside the Adobe documentation, that will help me understand the functions i was trying to do?
0

Featured Post

Optimize your web performance

What's in the eBook?
- Full list of reasons for poor performance
- Ultimate measures to speed things up
- Primary web monitoring types
- KPIs you should be monitoring in order to increase your ROI

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I spent nearly three days trying to figure out how incorporate OAuth in Coldfusion for the Eventful API. Hopefully, this article will allow Coldfusion Programmers to buzz through the API when they need to. Basically, what this script does is authori…
Periodically we have to update or add SSL certificates for customers. Depending upon your hosting plan you may be responsible for the installation and/or key generation. In the wake of Heartbleed many sites were forced to re-key. We will concen…
Michael from AdRem Software explains how to view the most utilized and worst performing nodes in your network, by accessing the Top Charts view in NetCrunch network monitor (https://www.adremsoft.com/). Top Charts is a view in which you can set seve…
This is my first video review of Microsoft Bookings, I will be doing a part two with a bit more information, but wanted to get this out to you folks.

615 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question