Cela a probablement une réponse simple, mais je ne devais pas avoir assez de café pour le comprendre moi-même:
Si j'avais une chaîne délimitée par des virgules telle que:
string list = "Fred,Sam,Mike,Sarah";
Comment obtenir chaque élément, ajouter des guillemets et le coller dans une chaîne comme celle-ci:
string newList = "'Fred','Sam','Mike','Sarah'";
J'imagine que commencer par chacune d'elles serait un début, mais je suis resté perplexe par la suite.
Une solution qui est laide:
int number = 0;
string newList = "";
foreach (string item in list.Split(new char[] {','}))
{
if (number > 0)
{
newList = newList + "," + "'" + item + "'";
}
else
{
newList = "'" + item + "'";
}
number++;
}
string s = "A,B,C";
string replaced = "'"+s.Replace(",", "','")+"'";
Merci pour les commentaires, j'avais manqué les citations externes.
Bien sûr .. si la source était une chaîne vide, voudriez-vous que les guillemets supplémentaires soient autour ou non? Et si l’entrée était un groupe d’espaces blancs ...? Je veux dire, pour donner une solution complète à 100%, je demanderais probablement une liste de tests unitaires, mais j'espère que mon instinct a répondu à votre question fondamentale.
Mise à jour : Une alternative basée sur LINQ a également été suggérée (avec l'avantage supplémentaire d'utiliser String.Format et donc de ne pas avoir à se soucier des guillemets)
string list = "Fred,Sam,Mike,Sarah";
string newList = string.Join(",", list.Split(',').Select(x => string.Format("'{0}'", x)).ToList());
string[] bits = list.Split(','); // Param arrays are your friend
for (int i=0; i < bits.Length; i++)
{
bits[i] = "'" + bits[i] + "'";
}
return string.Join(",", bits);
Vous pouvez également utiliser LINQ, en particulier avec une version de String.Join qui prend en charge IEnumerable<string>
...
return list.Split(',').Select(x => "'" + x + "'").JoinStrings(",");
Il y a une implémentation de JoinStrings ailleurs sur SO ... Je vais jeter un coup d'oeil.
EDIT: Eh bien, il n’ya pas tout à fait les JoinStrings auxquelles je pensais, alors voici:
public static string JoinStrings<T>(this IEnumerable<T> source,
string separator)
{
StringBuilder builder = new StringBuilder();
bool first = true;
foreach (T element in source)
{
if (first)
{
first = false;
}
else
{
builder.Append(separator);
}
builder.Append(element);
}
return builder.ToString();
}
De nos jours, string.Join
a une surcharge générique à la place, vous pouvez donc simplement utiliser:
return string.Join(",", list.Split(',').Select(x => $"'{x}'"));
Suivant l'exemple de Jon Skeet ci-dessus, voici ce qui a fonctionné pour moi. J'avais déjà une variable List<String>
appelée __messages alors voici ce que j'ai fait:
string sep = String.Join(", ", __messages.Select(x => "'" + x + "'"));
string[] splitList = list.Split(',');
string newList = "'" + string.Join("','", splitList) + "'";
Je ne peux pas écrire de code C #, mais ce code JavaScript simple est probablement facile à adapter:
var s = "Fred,Sam,Mike,Sarah";
alert(s.replace(/\b/g, "'"));
Il ne fait que remplacer les bornes (début/fin de chaîne, transition de la ponctuation des caractères Word) par des guillemets simples.
Mes exigences:
Terminer avec retour chariot et saut de ligne.
string.Join (",", lCol.Select (s => s == null? null: ("\" "+ s.Replace ("\"", "\"\"") + "\" " )) + "\ r\n";
string list = "Fred,Sam,Mike,Sarah";
string[] splitList = list.Split(',');
for (int i = 0; i < splitList.Length; i++)
splitList[i] = String.Format("'{0}'", splitList[i]);
string newList = String.Join(",", splitList);
Si vous utilisez JSON, la fonction suivante vous aidera
var string[] keys = list.Split(',');
console.log(JSON.stringify(keys));
J'ai trouvé une nouvelle solution à ce problème
Je lie une liste en sélectionnant des valeurs d'éléments de la grille à l'aide de linq, après l'ajout d'une chaîne séparée par des virgules pour chaque collection de chaînes à l'aide des propriétés String.Join ().
String str1 = String.Empty;
String str2 = String.Empty;
//str1 = String.Join(",", values); if you use this method,result "X,Y,Z"
str1 =String.Join("'" + "," + "'", values);
//The result of str1 is "X','Y','Z"
str2 = str1.Insert(0, "'").Insert(str1.Length+1, "'");
//The result of str2 is 'X','Y','Z'
J'espère que cela vous sera utile !!!!!!
Voici une solution C # 6 utilisant l’interpolation de chaînes.
string newList = string.Join(",", list.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(x => $"'{x}'")
.ToList());
Ou, si vous préférez l'option C # 5 avec String.Format:
string newList = string.Join(",", list.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(x => String.Format("'{0}'", x))
.ToList());
L'utilisation de StringSplitOptions supprimera toutes les valeurs vides afin d'éviter toute citation vide, si vous essayez d'éviter cela.
Allez-vous traiter beaucoup de CSV? Si c'est le cas, vous devriez également envisager d'utiliser une bibliothèque pour le faire. Ne réinventez pas la roue. Malheureusement, je n'ai pas trouvé de bibliothèque aussi simple que la bibliothèque CSV de Python, mais j'ai déjà vu FileHelpers (gratuit) publié sur MSDN Magazine et ça a l'air bien. Il existe probablement aussi d'autres bibliothèques gratuites. Tout dépend du nombre de traitements que vous ferez. Souvent, il grandit et grandit jusqu'à ce que vous réalisiez que vous feriez mieux d'utiliser une bibliothèque.
Pour les personnes qui aiment les méthodes d'extension comme moi, la voici:
public static string MethodA(this string[] array, string seperatedCharecter = "|")
{
return array.Any() ? string.Join(seperatedCharecter, array) : string.Empty;
}
public static string MethodB(this string[] array, string seperatedChar = "|")
{
return array.Any() ? MethodA(array.Select(x => $"'{x}'").ToArray(), seperatedChar) : string.Empty;
}
L'implémentation C # de la solution d'expression régulière JavaScript de @ PhiLho est très similaire à celle-ci:
Regex regex = new Regex(
@"\b",
RegexOptions.ECMAScript
| RegexOptions.Compiled
);
string list = "Fred,Sam,Mike,Sarah";
string newList = regex.Replace(list,"'");
Mon approche "moins sophistiquée" .... Je suppose que c'est toujours une bonne pratique d'utiliser StringBuilder car la liste peut être très longue.
string list = "Fred,Sam,Mike,Sarah";
StringBuilder sb = new StringBuilder();
string[] listArray = list.Split(new char[] { ',' });
for (int i = 0; i < listArray.Length; i++)
{
sb.Append("'").Append(listArray[i]).Append("'");
if (i != (listArray.Length - 1))
sb.Append(",");
}
string newList = sb.ToString();
Console.WriteLine(newList);