Solved

Displaying Session variables with multiple levels of indirection

Posted on 2007-11-15
6
132 Views
Last Modified: 2013-12-24
I am trying to provide macro-like substitutions for strings from an input file. The input file might have the string "The user is: !user!."

Suppose Session.user = "Steve"

I want to output the string with !user! replaced with the value of "Session.user".

If I use:
       <cfset line = REreplaceNoCase(#line#, '!(.*)!', '#Session.user#')>
       <cfset line = "#line#">

I get "The user is: Steve." That is, this works, but "!xxxxxx!" would be replace with the value of Session.user.

If I use:
       <cfset replaceString = "Session.\1">
       <cfset line = REreplaceNoCase(#line#, '!(.*)!', '#replaceString#')>
       <cfset line = "#line#">
                      <cfoutput>#line#</cfoutput>

I get "The user is: Session.user."

If I use:
       <cfset replaceString = "Session.\1">
       <cfset testReplace = "#replaceString#">
       <cfset line = REreplaceNoCase(#line#, '!(.*)!', '#testReplace#')>
       <cfset line = "#line#">
                      <cfoutput>#line#</cfoutput>

I get "The user is: Session.user."

If I use:
       <cfset replaceString = "Session.\1">
       <cfset testReplace = "###replaceString###">
       <cfset line = REreplaceNoCase(#line#, '!(.*)!', '#testReplace#')>
       <cfset line = "#line#">
                      <cfoutput>#line#</cfoutput>

I get "The user is: #Session.user#."

I need to have two evaluations. Thanks much for any help.
0
Comment
Question by:stevenschulman
  • 3
  • 2
6 Comments
 
LVL 52

Expert Comment

by:_agx_
ID: 20293013
Perhaps I'm missing something but is there a reason a straight replace wouldn't work?


<cfset theNewLine = replace(line, '!user!', Session.user, "all")>

Open in new window

0
 
LVL 25

Expert Comment

by:James Rodgers
ID: 20298513
>>I want to output the string with !user! replaced with the value of "Session.user".

If I use:
       <cfset line = REreplaceNoCase(#line#, '!(.*)!', '#Session.user#')>
       <cfset line = "#line#">

I get "The user is: Steve." That is, this works, but "!xxxxxx!" would be replace with the value of Session.user.

isn't that what you want? or am i not reading the first line right?
what output are you looking to achieve?
0
 

Author Comment

by:stevenschulman
ID: 20300110
!user! is only an example. If the text were "Hello !firstName! !lastName!" then !firstName! would be substituted with the value of Session.firstName and !lastName! would be substituted with the value of Session.lastName.
0
Portable, direct connect server access

The ATEN CV211 connects a laptop directly to any server allowing you instant access to perform data maintenance and local operations, for quick troubleshooting, updating, service and repair.

 
LVL 25

Expert Comment

by:James Rodgers
ID: 20300235
then you should not use a regex but a specific replace
<cfset temp=#replace(line,"!somestring!", #session.somestring#,'all')>
reg ex is for pattern matching you need exact matching

the pattern you are using, !(.*)!',  will match !user!  and !xxxxxx! but it would also match
this sentence ending an an exclamation! and the next sentence ending in an exclamation!
would look like this
this sentence ending an an exclamationSteve
so use exact match replacement
0
 

Author Comment

by:stevenschulman
ID: 20300332
I understand that, but with regular expressions whatever is enclosed in parenthesis is returned and reusable as \n. Thus, in this case, "!(.*)!" matches all characters between two exclamaition points and provides the specific values matched in "\1|. That is why I use "Session.\1". This does, in fact, work. I get the value "Session.user" or "Session.firstName" or "Session.lastName". The problem is that I have the string, but can not seem to go the next step to have it evaluated.

I tried using Evaluate() function. I suspect that the answer lies there somewhere, but I still can not get it to work.
0
 
LVL 25

Accepted Solution

by:
James Rodgers earned 500 total points
ID: 20300405
of then set the replace as #session.\1*

and tehn before pout[utting try this

#de(line)#
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
cloud web Service looking for a home... 3 111
Two nodes for updates and forwarding 8 51
http to https 3 70
Help with a redirect in web.config file 8 56
If you don't have the right permissions set for your WordPress location in IIS, you won't be able to perform automatic updates. Here's how to fix the problem.
Meet the world's only “Transparent Cloud™” from Superb Internet Corporation. Now, you can experience firsthand a cloud platform that consistently outperforms Amazon Web Services (AWS), IBM’s Softlayer, and Microsoft’s Azure when it comes to CPU and …
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…
I've attached the XLSM Excel spreadsheet I used in the video and also text files containing the macros used below. https://filedb.experts-exchange.com/incoming/2017/03_w12/1151775/Permutations.txt https://filedb.experts-exchange.com/incoming/201…

860 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