Passer au contenu du pied de page
Iron Academy Logo
Application C#
Application C#

Autres catégories

Un examen approfondi de la connexion texte C#

Tim Corey
1h 15m 23s

Dans la leçon 11 de la série " C# App Start to Finish " de Tim Corey, Tim explique comment enregistrer des données dans des fichiers texte en utilisant une connexion de données basée sur le texte. Tim commence par rappeler aux spectateurs que, dans la leçon précédente, ils ont configuré la connexion SQL et effectué des tâches de maintenance clés. Maintenant, l'accent est mis sur la connexion texte, et l'objectif est clair : faire fonctionner la connexion texte comme la connexion SQL, où le système peut prendre un PrizeModel et le renvoyer avec son ID correctement rempli. Tim souligne que la vidéo montrera un flux de travail complet pour stocker, lire et mettre à jour des données en utilisant des fichiers texte simple.

La solution — Mise en place de la connexion texte

Tim commence par ouvrir le connecteur texte à l'intérieur du dossier DataAccess. Il supprime le code d'exemple et commence à zéro. Il explique qu'à la différence de SQL, les fichiers texte ne fournissent pas de fonctionnalités de base de données avancées comme les ID auto-incrémentés. Donc, la première tâche est de décider où stocker les fichiers texte.

Tim propose un design clair : stocker chaque modèle dans son propre fichier texte. Par exemple, PrizeModel aura son propre fichier appelé PrizeModels.csv, tandis que d'autres modèles comme MatchupModel auront chacun des fichiers distincts. Tim compare cette structure aux tables SQL — chaque fichier devient une " table " contenant une liste de ce modèle. Cela facilite la gestion des données et empêche de mélanger différents types de modèles ensemble.

La chaîne de connexion — Stockage du chemin du fichier

Tim explique qu'au lieu de stocker un seul nom de fichier, vous stockez un chemin vers le dossier où tous les fichiers seront sauvegardés. Ce chemin est placé dans l'app.config sous appSettings. Tim ajoute une nouvelle paire clé-valeur :

  • Clé : filePath

  • Valeur : le chemin du dossier où les fichiers seront stockés

Il insiste sur l'utilisation de la syntaxe Windows correcte et évite de terminer le chemin par une barre oblique, car il préfère ajouter la barre oblique uniquement lors de la construction du chemin complet du fichier. Cette configuration est cruciale car elle rend l'application flexible — si l'emplacement de stockage change, vous devez seulement mettre à jour l'app.config.

Le plan — Comment fonctionne la connexion texte

Tim dresse un plan clair pour sauvegarder un prix :

  1. Charger le fichier texte contenant tous les prix.

  2. Convertir les lignes de texte en une liste de PrizeModel.

  3. Trouver le plus haut ID dans la liste et définir le nouvel ID = ID le plus haut + 1.

  4. Ajouter le nouveau modèle de prix à la liste.

  5. Convertir la liste de prix à nouveau en lignes de texte.

  6. Sauvegarder la liste dans le fichier texte, en écrasant les anciennes données.

Tim explique que les fichiers texte sont "stupides" comparés aux bases de données SQL. SQL peut gérer les IDs automatiquement, mais les fichiers texte nécessitent que le développeur implémente la logique manuellement. C'est pourquoi Tim divise le processus en méthodes plus petites pour garder le code propre et réutilisable.

Création d'une nouvelle classe — Text Connector Processor

Tim crée une nouvelle classe appelée TextConnectorProcessor. Il la place à l'intérieur du dossier DataAccess mais dans un espace de nom différent pour éviter d'encombrer l'espace de nom principal. Tim explique que les espaces de noms sont flexibles et peuvent être personnalisés, mais il recommande de les garder simples et clairs.

Il rend la classe public static et commence à créer des méthodes d'assistance.

Méthode d'extension — Chemin complet du fichier

Tim crée une méthode d'extension :

public static string FullFilePath(this string fileName)

Cette méthode combine le filePath de app.config avec le nom du fichier pour générer le chemin complet du fichier. Tim montre comment utiliser ConfigurationManager.AppSettings["filePath"] et explique la nécessité d'échapper les barres obliques dans les chaînes C# (en utilisant \).

Il transforme ensuite la méthode en méthode d'extension pour qu'elle puisse être utilisée de cette manière :

"PrizeModels.csv".FullFilePath()

Tim explique que cette méthode d'extension est uniquement nécessaire dans le connecteur de texte, il la conserve donc dans un espace de noms distinct pour éviter de l'afficher partout dans la solution.

Méthode de chargement de fichier — Lecture des données textuelles

Ensuite, Tim crée une autre méthode d'extension :

public static List<string> LoadFile(this string file)

Cette méthode vérifie si le fichier existe en utilisant File.Exists(). Si le fichier n'existe pas, elle retourne une liste vide. S'il existe, elle lit toutes les lignes en utilisant File.ReadAllLines() et les convertit en liste.

Tim souligne l'importance de gérer correctement les fichiers manquants car c'est fréquent lors de la première exécution de l'application.

Convertir le texte en modèles Prize

Tim crée une méthode pour convertir les lignes de texte chargées en liste de PrizeModel :

public static List<PrizeModel> ConvertToPrizeModels(this List<string> lines)

Il explique l'utilisation des valeurs séparées par des virgules (CSV) où chaque ligne contient des champs séparés par des virgules. Tim divise chaque ligne en colonnes et les analyse dans les types de données appropriés :

  • ID → int.Parse()

  • PlaceNumber → int.Parse()

  • PlaceName → string

  • PrizeAmount → decimal.Parse()

  • PrizePercentage → double.Parse()

Tim explique également qu'il permet intentionnellement à l'application de planter si les données sont invalides. Cela permet de révéler les problèmes tôt plutôt que de continuer avec des données corrompues.

Trouver l'ID max

Tim revient au TextConnector et explique comment trouver l'ID le plus élevé :

int currentID = prizes.OrderByDescending(x => x.ID).First().ID + 1;

Il note que cela plantera si le fichier est vide, il ajoute donc une vérification :

si(prizes.Count > 0)
{
    currentID = prizes.OrderByDescending(x => x.ID).First().ID + 1;
}

Cela garantit que le premier enregistrement obtient un ID de 1.

Ajout de modèle et sauvegarde

Tim ajoute le nouveau prix à la liste puis convertit la liste en lignes de texte :

public static void SaveToPrizeFile(this List<PrizeModel> models, string fileName)

Il utilise l'interpolation de chaînes pour créer chaque ligne CSV et l'ajoute à une liste de chaînes. Enfin, il utilise :

File.WriteAllLines(fileName.FullFilePath(), lines);

Tim explique que WriteAllLines écrase le fichier, ce qui est le comportement souhaité car cela rafraîchit les données avec le contenu mis à jour.

Retourner le modèle

Tim conclut la méthode en retournant le PrizeModel avec l'ID attribué. Cela rend le nouveau prix utilisable dans le reste de l'application, tout comme SQL.

Tester la connexion texte

Tim passe à Program.cs et modifie la connexion de données de SQL à texte. Quand il exécute l'application et crée des prix, le système plante initialement en raison de l'absence d'enregistrements. Tim corrige rapidement le bug avec la vérification si(prizes.Count > 0), puis exécute à nouveau.

Il démontre que les données sont correctement enregistrées dans le fichier PrizeModels.csv et montre comment le fichier peut être ouvert dans le Bloc-notes ou Excel.

Dernières réflexions — Méthodes d'extension et espaces de noms

Tim termine la leçon en rappelant aux spectateurs que les méthodes d'extension n'apparaissent que lorsque l'espace de noms correct est inclus. Cela évite l'encombrement et les conflits de noms potentiels. Il note que ces deux leçons créent une base solide pour le reste de l'application et préparent le terrain pour le développement futur.

Hero Worlddot related to Un examen approfondi de la connexion texte C#
Hero Affiliate related to Un examen approfondi de la connexion texte C#

Gagnez plus en partageant ce que vous aimez

Vous créez du contenu pour les développeurs travaillant avec .NET, C#, Java, Python ou Node.js ? Transformez votre expertise en revenu supplémentaire !

Équipe de soutien Iron

Nous sommes en ligne 24 heures sur 24, 5 jours sur 7.
Chat
Email
Appelez-moi