Solved

Finding and replacing characters between ""

Posted on 2006-07-12
5
193 Views
Last Modified: 2013-12-24
Hello,

I have written a script that exports the content of a DB Table to a CSV file.

This has been done so that a user can edit the information externally and then import once they are done.

One of the fields of this table is a description and the description therefore, in places, requires the use of commas.

The use of commas obviously screws up the format of the document, but I think that if I surround the description field in "" before I export it, I can search for commas between those i.e. "This is a description, it also contains commas".

Upon import I can convert any commas between the "" into , (the ascii HTML symbol for a comma) and then swap them round again when the file is exported.

Could someone please show me how I can do a find replace in a string between 2 set characters i.e. " "
(I have been trying for hours but have given up and come here).

Thanks in advance.

Chris

0
Comment
Question by:chrissp26
[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
  • 2
5 Comments
 
LVL 2

Author Comment

by:chrissp26
ID: 17089408
This is an example I have been "working on" but I can't get it to work :(

<cfset fileContentsArray = 'This is a long line of text that contains several commas, but only the ones surrounded by "speech marks, will be changed"'>
<cfset reg = '"([*a-z][*0-9])(,)([*a-z][*0-9])"'>
<cfset fileContentsArray = reReplace(fileContentsArray, reg , "#chr(44)#" , "ALL")>

<cfoutput>
#fileContentsArray#
</cfoutput>
0
 
LVL 13

Expert Comment

by:usachrisk1983
ID: 17090185
If you surround a field in quotes, you don't need to worry about the commas for a CSV file.  This should be perfectly valid:

Column 1,Column 2,Column 3,Column 4
This will be in Column 1,This will be in column 2,"This, Will, Be, In, Column, 3",Column 4 here!

What you want to make sure you do is escape your quotes, so if there is a " in the column, double it up before you put it in the CSV file.  Example:

Column 1,Column 2,Description,Other Field
7,8,"This field has a ""quote"" in it",OK!

Let us know how it goes.
0
 
LVL 2

Author Comment

by:chrissp26
ID: 17091245
The only way I can seem to get this to work is like this:

<cfset menuList = arrayNew(1)>

<cfset fileContentsArray =
'Menu Type,Dish Name,Dish Description,Serves,Price,Disabled,Chefs Special,Vegetarian,#Chr(13)#
Snacks,10oz Rump Steak,"From the chargrill, served with chips and a choice of sauce",1,11.95,No,No,No,#Chr(13)#
Snacks,Wild Mushroom Risotto,"with parmesan, wafer and truffle oil",1,8.25,No,No,Yes,#Chr(13)#'
>
<cfset reg = '"([^"]*)(,)([^"]*)"'>
<cfset fileContentsArray = ReReplace(fileContentsArray,reg,'"\1&##44;\3"',"all")>
<cfset fileContentsArray = replace(fileContentsArray, Chr(13), "~", "ALL")>
<cfset fileContentsArray = listToArray(fileContentsArray, "~")>
<cfset fileContentsArrayDelete = arrayDeleteAt(fileContentsArray, 1)>
<cfset fileContentsArrayLength = arrayLen(fileContentsArray)>
<cfloop from="1" to="#fileContentsArrayLength#" index="idx">

      <cfset fileContentsArray[idx] = listToArray(fileContentsArray[idx], ",")>
      
      <cfset menuList[idx] = structNew()>
      <cfset menuList[idx].menuTypeID = fileContentsArray[idx][1]>
      <cfset menuList[idx].dishName = replace(fileContentsArray[idx][2], "&##44;", ",", "ALL")>
      <cfset menuList[idx].dishDescription = replace(fileContentsArray[idx][3], "&##44;", ",", "ALL")>
      <cfset menuList[idx].dishDescription = replace(fileContentsArray[idx][3], "<br>", Chr(13), "ALL")>
      <cfset menuList[idx].dishDescription = replace(fileContentsArray[idx][3], '"', "", "ALL")>
      <cfset menuList[idx].serves = fileContentsArray[idx][4]>
      <cfset menuList[idx].price = fileContentsArray[idx][5]>
      <cfset menuList[idx].disabled = fileContentsArray[idx][6]>
      <cfset menuList[idx].chefsSpecial = fileContentsArray[idx][7]>
      <cfset menuList[idx].vegetarian = fileContentsArray[idx][8]>

</cfloop>
<cfdump var="#menuList#">

-----------
This is a stand alone script so it should work with a minimum of hassle. I can't get it to work by simply surrounding it with "". So I have had to use another resolution which is a regular expression. Which seems to be working so far.
0
 

Accepted Solution

by:
CetusMOD earned 0 total points
ID: 17269572
PAQed with points refunded (500)

CetusMOD
Community Support Moderator
0

Featured Post

Webinar: Aligning, Automating, Winning

Join Dan Russo, Senior Manager of Operations Intelligence, for an in-depth discussion on how Dealertrack, leading provider of integrated digital solutions for the automotive industry, transformed their DevOps processes to increase collaboration and move with greater velocity.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Asp.net Hosting Plan security, reliable, stable 1 85
ColdFusion Rereplace 3 97
exchange 2010 turning off 3des ciphers 2 561
SSL Certificate for IIS7 Site 2 116
This is a guide to setting up a new WHM/cPanel Server to be used for web hosting accounts. It is intended for web hosting company administrators and dedicated server owners. For under $99 per month (considering normal rate of Big Data Cetnters like …
What You Need to Know when Searching for a Webhost Provider
In a recent question (https://www.experts-exchange.com/questions/29004105/Run-AutoHotkey-script-directly-from-Notepad.html) here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…
In an interesting question (https://www.experts-exchange.com/questions/29008360/) here at Experts Exchange, a member asked how to split a single image into multiple images. The primary usage for this is to place many photographs on a flatbed scanner…
Suggested Courses

751 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