programmeur-ecrans-code-bureau-moderne
Blog, Tutoriels

Créer un Fichier WinDev : Comment Faire ?

Vous voulez créer un fichier en WinDev ? Attention, l’expression peut vouloir dire trois choses très différentes.

Ce guide vous montre quelle fonction WLangage utiliser pour chaque cas, avec des exemples de code simples et directs.

Méthode 1 : Créer un fichier de données HFSQL (.FIC)

Un fichier de données HFSQL est la brique de base de votre base de données dans une application WinDev. Il ne s’agit pas d’un simple fichier texte, mais d’une structure organisée qui doit être décrite au préalable dans l’éditeur d’analyses de votre projet.

Pour créer ce type de fichier par programmation, la fonction principale est HCréation. Elle génère le fichier de données vide (.FIC) et tous ses fichiers associés, comme les index (.NDX) ou les mémos (.MMO), en se basant sur la description de l’analyse.

Attention : La fonction HCréation écrase et remplace le fichier de données s’il existe déjà sur le disque. Toutes les données qu’il contenait sont définitivement perdues. C’est aussi une méthode pour vider un fichier existant.

Si votre objectif est de créer le fichier uniquement s’il n’existe pas, sans risquer d’écraser des données, il faut utiliser une autre fonction.

  • HCréation(Fichier) : Crée le fichier. S’il existe, il est vidé.
  • HCréationSiInexistant(Fichier) : Crée le fichier uniquement s’il n’existe pas. S’il existe déjà, la fonction ne fait rien et évite la perte de données.

Une fois le fichier créé (ou vidé), son pointeur en mémoire est vide. Pour commencer à y ajouter des données, il faut initialiser un enregistrement en mémoire. C’est le rôle de la fonction HRAZ, à appeler juste après la création du fichier.

Exemple de code : Créer un fichier « Client »


// Tente de créer le fichier de données Client.FIC
// Le fichier doit exister dans l'analyse du projet.
SI HCréation(Client) ALORS
    // Le fichier a été créé avec succès
    Trace("Le fichier Client a été créé.")
    
    // Initialise un nouvel enregistrement en mémoire avant de le remplir
    HRAZ(Client)
SINON
    // Une erreur est survenue pendant la création
    Erreur("Impossible de créer le fichier Client.", HErreurInfo())
FIN

Méthode 2 : Créer un fichier externe (texte, binaire, log…)

Souvent, on a besoin de créer des fichiers qui ne sont pas des bases de données : un fichier de log pour tracer des actions, un fichier de configuration .INI, ou un simple fichier texte. Pour ces cas, on utilise les fonctions de gestion de fichiers externes, commençant par « f ».

La fonction la plus directe est fCrée. Elle permet de créer un nouveau fichier sur le disque et de l’ouvrir immédiatement en mode lecture/écriture. Vous pouvez ensuite utiliser d’autres fonctions comme fEcritLigne pour y ajouter du contenu.

Point crucial : Tout comme HCréation, la fonction fCrée détruit et recrée le fichier s’il existe déjà. C’est un comportement à connaître pour éviter de supprimer un fichier de log important par accident.

Pour éviter cet écrasement, la meilleure pratique est d’utiliser la fonction fOuvre avec une constante spécifique. C’est une méthode plus sûre pour la gestion de fichiers de log ou de configuration.

  • fCrée(Chemin) : Crée le fichier. S’il existe, son contenu est effacé.
  • fOuvre(Chemin, foCréationSiInexistant) : Ouvre le fichier. S’il n’existe pas, il est créé automatiquement. S’il existe, il est simplement ouvert sans être modifié.

Une fois le fichier ouvert, de nombreuses fonctions sont disponibles pour le manipuler. Les plus courantes pour les fichiers texte sont fSauveTexte pour écrire tout un bloc de texte d’un coup, et fLitLigne pour lire le contenu ligne par ligne.

Exemple de code : Créer et écrire dans un fichier « log.txt »


// Définit le chemin complet du fichier
sCheminFichier est une chaîne = fRepEnCours() + fSep + "log.txt"

// Crée le fichier. S'il existe, il sera écrasé.
nFichierID est un entier = fCrée(sCheminFichier)

// Vérifie si la création a fonctionné
SI nFichierID <> -1 ALORS
    // Le fichier est ouvert, on peut écrire dedans
    fEcritLigne(nFichierID, DateVersChaîne(DateSys()) + " : Lancement de l'application.")
    
    // Il faut toujours fermer un fichier après utilisation
    fFerme(nFichierID)
    
    Info("Le fichier log.txt a été créé.")
SINON
    // Affiche un message d'erreur
    Erreur("Impossible de créer le fichier : " + ErreurInfo(errMessage))
FIN

Méthode 3 : Cas spécifique – Créer un fichier Excel (.xls)

Générer un fichier Excel est un besoin très fréquent dans les applications de gestion. WinDev propose des fonctions natives très simples pour le faire, sans avoir besoin qu’Excel soit installé sur le poste.

La méthode la plus simple repose sur un type de variable spécifique : xlsDocument. On déclare une variable de ce type, on y ajoute des feuilles et des données, puis on sauvegarde le tout dans un fichier .xls ou .xlsx.

Les fonctions essentielles pour cette opération sont :

  • xlsDocument : Le type de variable qui représente votre fichier Excel en mémoire.
  • xlsAjouteFeuille : Pour ajouter un nouvel onglet à votre document.
  • ..Cellule[L, C] : Pour accéder à une cellule et lui assigner une valeur.
  • xlsSauve : Pour écrire le document en mémoire sur le disque dur.
  • xlsFerme : Pour libérer la mémoire utilisée par le document.

Il existe une autre méthode plus complexe, l’OLE Automation (via l’objet CExcel), qui permet de piloter une instance d’Excel. Elle est plus puissante mais nécessite qu’Excel soit installé et est généralement réservée à des manipulations très avancées.

Exemple de code : Créer un fichier Excel avec des données


// Déclare une variable de type document Excel
MonDocumentExcel est un xlsDocument

// Ajoute une feuille de calcul nommée "Clients"
xlsAjouteFeuille(MonDocumentExcel, "Clients")

// Écrit les en-têtes de colonnes
MonDocumentExcel..Feuille[1]..Cellule[1, 1] = "Nom"
MonDocumentExcel..Feuille[1]..Cellule[1, 2] = "Ville"

// Ajoute une ligne de données
MonDocumentExcel..Feuille[1]..Cellule[2, 1] = "Dupont"
MonDocumentExcel..Feuille[1]..Cellule[2, 2] = "Paris"

// Sauvegarde le fichier sur le bureau de l'utilisateur
sCheminExcel est une chaîne = fRepBureau() + fSep + "Export Clients.xlsx"
SI xlsSauve(MonDocumentExcel, sCheminExcel) ALORS
    Info("Le fichier Excel a été créé sur le bureau.")
SINON
    Erreur("Impossible de sauvegarder le fichier Excel.")
FIN

// Libère la mémoire
xlsFerme(MonDocumentExcel)

Syntaxe et Paramètres Détaillés des Fonctions Clés

Voici un résumé technique des paramètres pour les fonctions principales de création de fichier. Ces informations sont utiles pour comprendre toutes les possibilités offertes.

La fonction HCréation

Cette fonction crée un fichier de données HFSQL. Le résultat est un booléen : Vrai si la création a réussi, Faux sinon.

Syntaxe : <Résultat> = HCréation(<Fichier de données> [, <Mot de passe> [, ...]])

  • <Fichier de données> : Le nom du fichier tel que défini dans l’analyse (par exemple, Client). C’est le seul paramètre obligatoire.
  • <Mot de passe> (optionnel) : Une chaîne de caractères pour protéger le fichier.
  • <Options> (optionnel) : Des constantes pour modifier le comportement, par exemple :
    • hChangeAlphabet : Permet de changer l’ordre de tri du fichier.
    • hSansLiaison : Crée le fichier sans activer les contraintes d’intégrité définies dans l’analyse.

La fonction fCrée

Cette fonction crée un fichier externe (texte, binaire…). Elle retourne un entier qui est l’identifiant du fichier, ou -1 en cas d’erreur.

Syntaxe : <Résultat> = fCrée(<Chemin du fichier> [, <Options de création>])

  • <Chemin du fichier> : Une chaîne de caractères avec le chemin complet et le nom du fichier à créer (ex : « C:\Mes Documents\log.txt »).
  • <Options de création> (optionnel) : Des constantes pour définir l’encodage du fichier :
    • foAnsi : Le fichier est créé au format ANSI (par défaut).
    • foUnicode : Le fichier est créé au format Unicode.

Version minimum requise : Pour toutes ces fonctions, il est conseillé de consulter la documentation officielle de PC SOFT. La version minimum requise pour chaque fonction ou constante peut évoluer. Vous y trouverez aussi des commentaires et des exemples supplémentaires.

Bonnes pratiques et gestion des erreurs

Pour écrire du code robuste, la création d’un fichier doit toujours être accompagnée d’une gestion des erreurs. Voici quelques points à vérifier.

  • Gérez les erreurs systématiquement : Une création de fichier peut échouer pour de nombreuses raisons (disque plein, pas les droits…). Utilisez HErreurInfo() pour les fonctions HFSQL et ErreurInfo(errMessage) pour les autres. Le mieux est d’encadrer votre code dans un bloc QUAND EXCEPTION DANS... FAIRE... FIN pour intercepter les erreurs fatales.
  • Attention aux droits d’écriture (UAC) : Sur Windows (depuis Vista), un programme n’a pas le droit d’écrire dans les répertoires système comme « Program Files » ou « Windows ». Pour stocker des données d’application, utilisez les répertoires prévus pour cela avec la fonction SysRep(srAppDataCommun).
  • Pensez aux plateformes mobiles : Sur Android et iOS, une application est « sandboxée ». Elle ne peut écrire que dans son propre répertoire d’installation ou sur un espace de stockage externe (comme une carte SD), si l’utilisateur a donné la permission. N’essayez jamais d’écrire à la racine du système.

Conclusion

Pour résumer, « créer un fichier » en WinDev dépend de votre besoin. Vous avez maintenant trois approches claires.

Utilisez HCréation pour les données HFSQL de votre analyse, fCrée pour un fichier texte ou binaire simple, et les fonctions xls... pour générer un document Excel. En choisissant la bonne méthode dès le départ, vous gagnez du temps et évitez les erreurs courantes.

Vous pourriez également aimer...