string EncodeString (string val)
{
if (val.Length == 0)
return val;
int i = val.IndexOfAny (new char[] {'\n','\r','\t'});
if (i != -1 || val [0] == '@') {
StringBuilder sb = new StringBuilder ();
if (i != -1) {
int fi = val.IndexOf ('\\');
if (fi != -1 && fi < i) i = fi;
sb.Append (val.Substring (0,i));
} else
i = 0;
for (int n = i; n < val.Length; n++) {
char c = val [n];
if (c == '\r')
sb.Append (@"\r");
else if (c == '\n')
sb.Append (@"\n");
else if (c == '\t')
sb.Append (@"\t");
else if (c == '\\')
sb.Append (@"\\");
else
sb.Append (c);
}
val = "@" + sb.ToString ();
}
char fc = val [0];
char lc = val [val.Length - 1];
if (fc == ' ' || fc == '"' || fc == '$' || lc == ' ')
val = "\"" + val + "\"";
return val;
}