using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
namespace Developpez.Dotnet.Collections
{
///
/// Fournit des méthodes d'extension pour les types enumérables
///
public static partial class EnumerableExtensions
{
#region FormatAll
///
/// Renvoie une chaine contenant chaque élément de l'énumération formaté avec
/// le format spécifié
///
/// L'énumération à formater
/// Le format à appliquer à chaque élément, par exemple "x2" ou "{0:x2}"
/// Le séparateur à insérer entre chaque élément
/// La chaine contenant tous les éléments formatés
public static string FormatAll(this IEnumerable enumerable, string format, string separator)
{
if (format.IsNullOrEmpty())
{
format = "{0}";
}
else if (!(format.StartsWith("{0") && format.EndsWith("}")))
{
format = "{0:" + format + "}";
}
separator = separator ?? String.Empty;
StringBuilder sb = new StringBuilder();
foreach (var item in enumerable)
{
sb.AppendFormat(format, item);
sb.Append(separator);
}
sb.Remove(sb.Length - separator.Length, separator.Length);
return sb.ToString();
}
///
/// Renvoie une chaine contenant chaque élément de l'énumération formaté avec
/// le delegate spécifié
///
/// Type des éléments de la séquence
/// L'énumération à formater
/// Le delegate à appliquer à chaque élément pour le convertir en chaine de caractères
/// Le séparateur à insérer entre chaque élément
/// La chaine contenant tous les éléments formatés
public static string FormatAll(this IEnumerable enumerable, Func formatter, string separator)
{
if (formatter == null)
return enumerable.FormatAll((string)null, separator);
separator = separator ?? String.Empty;
StringBuilder sb = new StringBuilder();
foreach (var item in enumerable)
{
sb.Append(formatter(item));
sb.Append(separator);
}
sb.Remove(sb.Length - separator.Length, separator.Length);
return sb.ToString();
}
#endregion
#region Conversion from/to CSV strings
///
/// Convertit une liste en une chaîne CSV avec le séparateur spécifié
///
/// Liste à convertir
/// Séparateur à utiliser
/// Une chaine CSV représentant les éléments de la liste
public static string ToCsvString(this IEnumerable list, string separator)
{
StringBuilder sb = new StringBuilder();
foreach (object o in list)
{
if (sb.Length > 0)
sb.Append(separator);
sb.Append(o);
}
return sb.ToString();
}
///
/// Convertit une chaine CSV en une liste d'objets du type spécifié
///
/// Type des éléments de la liste
/// Chaîne CSV à convertir
/// Séparateur à utiliser
/// Une liste contenant les éléments de la chaîne CSV
public static IEnumerable ListFromCsv(this string source, string separator)
{
List lst = new List();
string[] sItems = source.Split(new[] { separator }, StringSplitOptions.None);
foreach (string sItem in sItems)
{
T item;
if (string.IsNullOrEmpty(sItem))
{
item = default(T);
}
else
{
item = (T)Convert.ChangeType(sItem, typeof(T));
}
lst.Add(item);
}
return lst;
}
#endregion
}
}