Navigation

Types de données en DI#

Le langage DI# implémente plusieurs méthodes qui permettent de manipuler facilement les types de bases (string, int, etc.).

En DI#, chaque valeur manipulée possède un type de données qui détermine :

  • les opérations possibles

  • les méthodes disponibles

  • la manière dont la valeur peut être affichée ou comparée

Bien comprendre les types permet d’éviter les erreurs courantes et d’écrire du code DI# plus robuste et maintenable.

DéclarationType
stringChaîne de caractères
intNombre entier
decimalNombre décimal
datetimeDate et heure
boolBooléen
timespanDate et heure
datasourceSource de données

Par souci de compatibilité avec les champs nullable du projet ou des tables relationnelles, certains de ces types supportent d’être assignés à Null. Toutefois, il est fortement déconseillé d’instancier ou d’utiliser des types nullable dans le code, afin de limiter les risques d’échecs d’exécution.

Note : Pour certains types (int, decimal, datetime), le langage DI# supporte des limites souvent plus grandes que celles des bases de données, il serait donc possible de créer une variable avec une valeur qui ne pourra pas être enregistrée dans la base de données par la suite. Consultez la documentation des projets / tables relationnelle pour connaître les limites de la base de données.

// Exemple pour chaque type  
string a = "texte";
int b = 1;
decimal c = 1.234;
datetime d1 = 2016.01.01 12:34:56;
datetime d2 = 2016.01.01;
bool e = true; // ou false ou null
timespan g = 2.25; // 2 jours 6 heures
datasource h = {1, 2, 3};

Texte (string)

Chaîne de caractères Unicode, où un caractère est stocké sur 2 octets. La chaîne de caractères est délimitée par des guillemets ("). À l’intérieur d’une chaîne de caractère, le symbole \ agit comme caractère d’échappement pour symboliser des caractères spéciaux comme le retour de chariot (\r), le saut de ligne (\n) et autres.

string
Propriétés ou méthodesType de retourDescription
LengthintObtient le nombre de caractères de l'objet String actuel.
Capitalize(...)stringPermet de mettre la première lettre de la chaîne de caractères en majuscule. En passant True en paramètre, cela met en majuscule la première lettre de tous les mots de la chaîne de caractères.
IndexOf(...)intRetourne la position à laquelle la première occurrence de la chaîne de caractères passée en paramètre existe.
LastIndexOf(...)intRetourne la position à laquelle la dernière occurrence de la chaîne de caractères passée en paramètre existe.
Left(n)stringRetourne autant de caractères depuis le début de l’objet string cible que le nombre entier passé en paramètre.
MonTexte.Left(3) ;
équivaut à
MonTexte.Substring(0, 3) ;
Right(n)stringRetourne autant de caractère depuis la fin de l’objet string cible que le nombre entier passé en paramètre.
MonTexte.Left(3) ;
équivaut à
MonTexte.Substring(MonTexte.Length - 3, 3) ;
Replace(...)stringRetourne un nouvel objet string dont toutes les occurrences de la chaîne de caractères passés en premier paramètre sont remplacées par la chaîne de caractères passée en second paramètre.
Substring(...)stringRécupère une sous-chaîne de l’objet string ciblé. La sous-chaîne commence à une position de caractère spécifiée (si non spécifié, commence au début) et sa longueur est définie.
ToString(...)stringRetourne la valeur de l’objet en chaîne de caractères.
ToLower()stringRetourne la chaîne de caractères ciblée ou tous les caractères sont en minuscule.
ToUpper()stringRetourne la chaîne de caractères ciblée ou tous les caractères sont en majuscule.
Trim()stringRetourne la chaîne de caractères ciblée sans aucun espace avant le premier et après le dernier caractère.
// Exemples
[[
string MonTexte = "ceci EST une chaîne de caractères ";
MonTexte.Length; // Retourne le nombre 34
MonTexte.Capitalize (true); // Retourne "Ceci EST Une Chaîne De Caractères "
MonTexte.Capitalize(); // ou MonTexte.Capitalize(false); // Retourne la
chaîne : "Ceci EST une chaîne de caractères "

MonTexte.IndexOf("a"); // Retourne le nombre 15
MonTexte.LastIndexOf("a"); // Retourne le nombre 26
MonTexte.Left(12); // Retourne la chaîne : "ceci EST une"
MonTexte.Right(12); // Retourne la chaîne : " caractères "
MonTexte.Replace("une chaîne", "un test");
// Retourne la chaîne : "ceci EST un test de caractères "
MonTexte.Substring(12); // Retourne la chaîne : " chaîne de caractères "
MonTexte.Substring(12, 3); // Retourne la chaîne : " ch"
MonTexte.ToLower();
// Retourne la chaîne : "ceci est une chaîne de caractères "
MonTexte.ToUpper();
// Retourne la chaîne : "CECI EST UNE CHAÎNE DE CARACTÈRES "
MonTexte.Trim(); // Retourne "ceci EST une chaîne de caractères"
]]

Notez que les valeurs retournées par ces méthodes et propriétés sont des valeurs du type approprié et que vous pouvez donc enchaîner des appels de méthodes ou accès aux propriétés du type retourné.

[[  
string MonTexte = "ceci EST une chaîne de caractère";
MonTexte.Trim() .Replace ("une chaîne", "un test") .Capitalize(); // Retourne « Ceci EST un test de caractère »
]]

Nombre entier (int)

Nombre entier 32 bits situé entre -2 147 483 648 et 2 147 483 647.

int
Propriétés ou méthodesType de retourDescription
ToString()stringRetourne la valeur de l’objet en chaîne de caractères.

Nombre décimal (decimal)

Désigne tous les nombres à virgule flottante d’une très grande précision (28-29 chiffres significatifs). Le range se décrit techniquement comme suit : (-7.9x1028)/(10028) to (7.9x1028)/(10028)

decimal
Propriétés ou méthodesType de retourDescription
ToString()stringRetourne la valeur de l’objet en chaîne de caractères.

Date et heure (datetime)

Représente la date et l’heure au format suivant :
• aaaa.MM.jj HH:mm:ss
• aaaa.MM.jj HH:mm
• aaaa.MM.jj

Notez qu’il ne s’agit pas d’une chaîne de caractères : une date ne doit pas être mise entre guillemets. Pour l’heure, si elle est omise complètement, l’heure attribuée est 00:00:00. Il en va de même pour les secondes : si les heures et minutes sont fournies sans les secondes, 0 secondes sera attribué.

datetime
Propriétés ou méthodesType de retourDescription
AddYears(n)DateTimeAjoute aux années de la date ciblée le nombre passé en paramètre. 
AddMonths(n)DateTimeAjoute aux mois de la date ciblée le nombre passé en paramètre. 
AddDays(n)DateTime Ajoute aux jours de la date ciblée le nombre passé en paramètre. 
AddHours(n)DateTime Ajoute aux heures de la date ciblée le nombre passé en paramètre. 
AddMinutes(n)DateTime Ajoute aux minutes de la date ciblée le nombre passé en paramètre. 
AddSeconds(n)DateTimeAjoute aux secondes de la date ciblée le nombre passé en paramètre. 
DateDiff(d)TimeSpanSoustrait la date passée en paramètre à la date ciblée et retourne le résultat au format timespan.
isDST()boolRetourne vrai si la date ciblée est dans l’heure avancée d'été, basé sur la culture du contexte local.
ToString(...)StringRetourne la valeur de la date ciblée sous forme d’une chaîne de caractères. Ce résultat peut être formaté dans un format précis en passant un modèle de date en paramètre. Voir : https://msdn.microsoft.com/fr-fr/library/az4se3k1(v=vs.110).aspx
DateDateTimeRetourne une nouvelle date à partir de l’année, le mois et le jour de la date ciblé. Toutes les autres propriétés comme les heures, minutes, secondes, etc., sont ignorées.
YearIntRetourne l’année de la date ciblée sous forme d’un nombre entier.
Month IntRetourne le mois de la date ciblée sous forme d’un nombre entier de 1 à 12.
DayIntRetourne le jour du mois de la date ciblée sous forme d’un nombre entier de 1 à 31.
DayOfYearIntRetourne le jour de l’année à laquelle correspond la date ciblée sous forme d’un nombre entier de 1 à 365.
DayOfWeekIntRetourne le jour de la semaine à laquelle correspond la date ciblée sous forme d’un nombre entier de 1 à 7.
HourIntRetourne le nombre d’heures de la date ciblée sous forme d’un nombre entier de 0 à 23.
MinuteIntRetourne le nombre de minutes de la date ciblée sous forme d’un nombre entier de 0 à 59.
SecondIntRetourne le nombre de secondes de la date ciblée sous forme d’un nombre entier de 0 à 59.
TicksIntRetourne le nombre de graduations représentant la date et l'heure de cette instance. Une graduation représente 100 nanosecondes, ou un dix millionième de seconde. Il existe 10 000 graduations dans une milliseconde, ou les cycles de 10 millions en une seconde.
[[  
datetime MyDate = 2016.01.01 12:34:56;
MyDate.AddYears (3); // Résultat : 2019-01-01 12:34:56
MyDate.AddMonths (3); // Résultat : 2016-04-01 12:34:56
MyDate.AddDays (3); // Résultat : 2016-01-04 12:34:56
MyDate.AddHours (3); // Résultat : 2016-01-01 15:34:56
MyDate.AddMinutes (3); // Résultat : 2016-01-01 12:37:56
MyDate.AddSeconds (3); // Résultat : 2016-01-01 12:34:59
MyDate.DateDiff ("2014.03.03").Days; // Affiche 669
MyDate.isDST (); // Affiche False
MyDate.ToString (); // Affiche : 2016.01.01 12:34:56
MyDate.ToString ("d/M/yyyy HH:mm:ss"); // Résultat : "1-1-2016 12:34:56"
MyDate.ToString ("F"); // Résultat : "1 janvier 2016 12:34:56"
MyDate.ToString ("ddd, dd MMM yyyy HH':'mm':'ss 'GMT' ");
// Résultat : "ven., 01 janv. 2016 12:34:56 GMT"
MyDate.Date; // Résultat : 2016-01-01 00:00:00
MyDate.Day; // Résultat : 1
MyDate.DayOfWeek; // Résultat : 5
MyDate.DayOfYear; // Résultat : 1
MyDate.Hour; // Résultat : 12
MyDate.Minute; // Résultat : 34
MyDate.Month; // Résultat : 1
MyDate.Second; // Résultat : 56
MyDate.Ticks; // Résultat : 635872484960000000
MyDate.Year; // Résultat : 2016
]]

Booléen (bool)

Un booléen représente une valeur de vérité. Il peut valoir TRUE ou FALSE.

bool
Propriétés ou méthodesType de retourDescription
ToString()stringRetourne la valeur de l’objet en chaîne de caractères « True » ou « False ».

Date et heure (timespan)

Contrairement à d'autres langages, timespan, en DI#, représente une durée de temps, soit un nombre de Jours, Heures, Minutes et Secondes. Ce type existe principalement pour faire des opérations sur le type « datetime ». Exemple : timespan t = date1 – date2 ; Note : pour assigner directement une valeur, il faut noter qu’on doit fournir une valeur décimale qui représente un nombre de jours (par exemple 2.25 = 2 jours 6 heures).

timespan
Propriétés ou méthodesType de retourDescription
ToString()stringRetourne la valeur de l’objet en chaîne de caractères.

Source de données (datasource)

Datasource représente n’importe quel type de données « complexes », tel que les tableaux, les collections, les listes, les dictionnaires, etc. (équivalent à var en C# par exemple).

Un tableau en DI# est en fait une carte ordonnée. Une carte est un type qui associe des valeurs à des clés. Ce type est optimisé pour différentes utilisations ; il peut être considéré comme un tableau, une liste, une table de hashage, un dictionnaire, une collection, une pile, une file d'attente et probablement plus. On peut avoir, comme valeur d'un tableau, d'autres tableaux, multidimensionnels ou non. Autrement dit, on peut instancier un tableau de n’importe quel datatype qui serait soit fixe (voir les types listés ci-dessus), soit dynamique (équivalent à List<datatype> en .NET).

Déclaration d'un tableau

On peut définir un tableau en DI# comme ceci :
{ value1, value2, value3 }

datasource myArray = { 1, 2, 3, "abc", "def" };

On peut définir une collection d’éléments ainsi :
{ fieldName1 : value1, fieldName2 : value2, fieldName3 : value3 }

datasource myDictionary = { Prenom : "John", Nom : "Smith", Age : 30 };
// Les valeurs listées sont des Expressions, dont la valeur peut elle-même contenir une expression. On peut combiner les deux comme dans cet exemple :
datasource myArray =
{
{ Prenom : "Jean", Nom : "Tremblay", Age : 40 },
{ Prenom : "John", Nom : "Smith", Age : 30 }
};
Instanciation d'un tableau

Il existe 2 façons d’instancier un tableau en DI# :

  1. Créer un tableau de long fixe : int a[10];
  2. Créer un tableau de longueur variable : string b[] ;
string a[] = {"texte1", "texte2", "texte3"};  
int b[] = {1, 2, 3};
decimal c[] = {1.111, 2.222, 3.333};
datetime d[] = {2016.01.01 01:01:01, 2016.02.02 02:02:02, 2016.03.03
03:03:03
};
bool e[] = {true, false, null};
timespan g[] = {1472500, 1472500};
datasource h[] = {123, "texte1", 1.111, 2016.01.01 01:01:01, true};
// On peut assigner des valeurs initiales en déclarant l'array
int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
string b[] = { "texte 1", "test", "abc" };

Lorsqu’une variable est déclarée de type tableau, cette dernière ne peut accepter que des valeurs du type de données du tableau. Exemple : int a[10] n’acceptera que des int.

Expressions de requête

Les expressions de requête peuvent être utilisées pour interroger et transformer des données à partir de n'importe quelle source de données complexe. Ces requêtes servent à manipuler, trier ou filtrer un tableau (ou dictionnaire, liste, etc.).   L’objectif est, à partir d’un tableau, de créer une nouvelle source de données qui :  

  • Filtre optionnellement le tableau original (clauses “Where”)   
  • Trie optionnellement le tableau original (clauses “Order by”)
  • Extrait une propriété spécifique des items du tableau original 
  • Dédoublonne optionnellement les résultats  
Notes importantes

Bien que ces fonctionnalités de requête et recherche de données dans les sources disponibles, bien que très puissantes, imposent des pénalités de performance importantes.

Si utilisées de manière incorrecte dans un message, par exemple, ces requêtes peuvent avoir un impact important sur la vitesse de production des messages – considérez par exemple que toute requête faite dans un message transmis à un million de contacts devra être traitée un million de fois. 

N’hésitez pas à communiquer avec notre équipe de support ou nos analystes pour des conseils lors de la création de messages nécessitant ce degré de complexité.

Enquête de requêtesDescription
SelectSélectionner les valeurs parmi la source de données. Il est possible d’utiliser l’option distinct afin de ne sélectionner que les valeurs distinctes parmi la source de données.
FromChoisir sur quelle source de données la requête sera appliquée.
WhereRestreindre les données sélectionnées avec une clause d’inclusion ou d’exclusion.
Order byTrier les données selon un ou plusieurs champs par ordre ascendant ou descendant. Mots-clés supportés :   
  • asc
  • ascending 
  • desc   
  • descending   

Concrètement, les expressions de requêtes s’utilisent comme ceci :
select identifier.propriete3
from identifier in expression
where identifier.propriete1 = valeur
order by (identifier.propriete2 asc)

Avec :

  • Expression : la structure dans laquelle on veut récupérer un élément (un tableau, une collection, etc.).
  • Identifier : le nom de la variable qui va récupérer l’élément du tableau sélectionné par la clause Where. 
// Supposons la source de données suivante :
[[
datasource Vehicules =
{
{ Marque: "Toyota", Modele: "Sienna", Annee: 2015},
{ Marque: "Ford", Modele: "Fusion", Annee: 2013},
{ Marque: "Chevrolet", Modele: "Equinox", Annee: 2005 },
{ Marque: "Hyundai", Modele: "Accent", Annee: 2016 },
{ Marque: "Mazda", Modele: "CX-5", Annee: 2015 },
{ Marque: "Hyundai", Modele: "Accent", Annee: 2010 },
}; ]]

// Pour sélectionner toutes les marques de tous les véhicules :
[[
datasource Marques = select voiture.Marque
from voiture in Vehicules;
/* le tableau Marques contient :
Toyota
Ford
Chevrolet
Hyundai
Mazda
Hyundai
*/

]]

// Pour sélectionner toutes les marques uniques (sans doublon) de tous les véhicules :
[[
datasource Marques = select distinct voiture.Marque
from voiture in Vehicules;
/*
le tableau Marques contient :
Toyota
Ford
Chevrolet
Hyundai
Mazda
*/
]]

/* Pour sélectionner toutes les marques uniques (sans doublon) de tous les véhicules ordonnés du modèle le plus récent au plus ancien : */
[[
datasource Marques = select distinct voiture.Marque
from voiture in Vehicules
order by (voiture.Annee desc);
/*
le tableau Marques contient :
Hyundai
Mazda
Toyota
Ford
Chevrolet
*/
]] /* Pour sélectionner toutes les marques uniques (sans doublon) de tous les véhicules ordonnés du modèle le plus récent au plus ancien, en excluant les modèles avant 2014 : */ [[ datasource Marques = select distinct voiture.Marque from voiture in Vehicules where (voiture.Annee > 2014) order by (voiture.Annee desc); /* le tableau Marques contient : Hyundai Mazda Toyota */ ]

// Note : il est possible de cloner un tableau en sélectionnant tous items de ce dernier :
[[
datasource VehiculesCopie = select voiture from voiture in Vehicules;
]]

Cette réponse a-t-elle été utile ? Oui Non

Envoyer vos commentaires
Désolés de n'avoir pu vous être utile. Aidez-nous à améliorer cet article en nous faisant part de vos commentaires.