# String quotes elimination

I'm trying to import a .csv file that contains some points which are geo-positions, but the import gives me the points wrapped in quotes. Is there any method to get them as pairs of real numbers?

I'm getting "{26.2417,-98.432},{26.2407,-98.4247}" but I want {26.2417,-98.432},{26.2407,-98.4247}.

Update

Here is an example that produces output with the problem:

csvstring = "\"{26.2417,-98.432},{26.2407,-98.4247}\",2\n\"{26.2417,-98.432},{26.2407,-98.4247}\",3";
ImportString[csvstring, "CSV"]

{{"{26.2417,-98.432},{26.2407,-98.4247}", 2},
{"{26.2417,-98.432},{26.2407,-98.4247}", 3}}

• You could use ToExpression on your lists. Otherwise, without the CSV file and the code used to Import, it will be difficult to provide a solution. – Yves Klett Jul 20 '15 at 9:41
• ToExpression::sntx: Invalid syntax in or before "{26.2417,-98.43201},{26.2407,-98.42469000000001}". I got this error – Alberto Jul 20 '15 at 10:02
• Okay, can you please provide the *.csv file you have, or a sample of it if it's too large? – J. M. is away Jul 20 '15 at 10:06
• ... because your pasted expression structure is invalid (lacks enclosing {}). Without more details from your side anything more detailed will be a waste of time. – Yves Klett Jul 20 '15 at 10:07
• I-2,"{26.2417,-98.43201},{26.2407,-98.42469000000001}" that's the csv file, but you're right i miss lacks enclosing thanks – Alberto Jul 20 '15 at 10:10

Here are two ways. SemanticInterpretation is sort of fun but extremely slow:

SemanticInterpretation["{26.2417,-98.432},{26.2407,-98.4247}", List[_, _] ..]


Fixing up your data to fit Yves Klett's suggestion is much faster:

ToExpression["{" <> "{26.2417,-98.432},{26.2407,-98.4247}" <> "}"]


Both yield

(*  {{26.2417, -98.432}, {26.2407, -98.4247}}  *)


If there were a bunch of them with the same format, then this will replace all of them:

import = {"{26.2417,-98.432},{26.2407,-98.4247}"};
import /. s_String /;
StringMatchQ[s, RegularExpression["{[0-9.-]*,[0-9.-]*},{[0-9.-]*,[0-9.-]*}"]] :>
ToExpression["{" <> s <> "}"]


Depending on what's in the CSV file, one might alter the RegularExpression. Conceivably, this might work:

RegularExpression["{.*}"]


Note: A problem with the data are the commas separating the coordinates, which appear to be stored as a single item in the CSV file. Hence the commas are "escaped" by being contained by quotes in the CSV file, and the CSV interpreter returns a string. I don't know of a way to influence the CSV interpreter in the way one can SemanticInterpretation, so I think some sort of post-processing is probably necessary.

• You always make me feel bad coming up with these interesting and helpful answers after I voted to close (mind you, the blame is all mine!). – Yves Klett Jul 20 '15 at 15:35

Without having the .csv file to work on, as guess who it is said, this should get you where your going.

cord=Import["mydrive/file.csv","Data"]//ToExpression


Again Please give a sample of what the data is in the .csv file.