IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Générer le nom d'un fichier pour l'enregistrer


Sujet :

Langage Delphi

  1. #1
    Expert éminent sénior

    Avatar de Siguillaume
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2007
    Messages
    6 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 6 180
    Points : 25 358
    Points
    25 358
    Par défaut Générer le nom d'un fichier pour l'enregistrer
    Bonjour à tous!
    Dans un code Delphi, je veux générer la nom du fichier de sauvegarde des données à partir de la date du système. Voici le code que j'ai écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ladate:=date;
    dateconvertit:=datetostr(ladate);
     AssignFile(fichier,'C:\Rapport Annuel'+ dateconvertit +'.txt');
    Rewrite (fichier);
    Une erreur qui me dit nom de fichier incorrect est généré au niveau du Rewrite(fichier). Quelqu'un a-t-il une idée?

    Merci.

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 949
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 949
    Points : 5 663
    Points
    5 663
    Par défaut
    Jea,

    Je n'utilise jamais les routines de formatage de Delphi pour les dates/heurs, mais je suppose qu'il y a des caractères : pour séparer les données pour l'heure (hh:mm:ss ?), et ce caractère est interdit dans le nom d'un fichier.

  3. #3
    Membre habitué Avatar de bs.box
    Inscrit en
    Mai 2008
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 174
    Points : 173
    Points
    173
    Par défaut
    Essaye Ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    var NomFichier:String;
    begin
    NomFichier:=DateToStr(Date);
    // Exemple de Date: 01/05/2008
    // il faut remplacer les CHARS '/' !! Car ce caractère est illégale pour un
    // nom de fichier!!; il y'ona d'autres comme: (? : \ ) ..
    NomFichier[3]:='_';
    NomFichier[6]:='_';
    AssingFile(F, 'C:\Rapport Annuel' + NomFichier + '.txt');
    ReWrite(F);
    //
    end;

  4. #4
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    338
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 338
    Points : 383
    Points
    383
    Par défaut
    bonsoir

    une chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            ChoixRepertoire := extractfilepath(SaveDialog1.FileName) +
              FormatDateTime('"Rapport Annuel du " yyyy-mm-dd " à " hhmmss' +'.txt', Now);
    doit fonctionner correctement!
    à+

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 949
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 949
    Points : 5 663
    Points
    5 663
    Par défaut
    Leo,
    Citation Envoyé par +bsdocuments+ Voir le message
    // il faut remplacer les CHARS '/'
    J'avais oublié celui-là, qu'on retrouve généralement dans les dates formatées.

  6. #6
    Expert éminent sénior

    Avatar de Siguillaume
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2007
    Messages
    6 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 6 180
    Points : 25 358
    Points
    25 358
    Par défaut
    Merci à vous tous pour vos réponses!
    J'ai essayé la solution de bsdocuments, et ça marche très bien!

    Je voudrais maintenant ajouter deux choses et là je coince:
    1->en plus de la date, je voudrais aussi ajouter l'heure, pour composer le même fichier;
    2->je veux faire l'enregistrement sur le bureau de l'utilisateur.

    Je m'inspire de la proposition de banban54, mais je n'y arrive toujours pas. Dans mes recherches, j'ai découvert que la fonction SHGetSpecialFolderLocation, permet de récupérer les dossiers spéciaux, et que la variable CSIDL_DESKTOPDIRECTORY, désigne le bureau de l'utilisateur. Mais comment les utiliser?

    Merci encore à tous!

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    En ce qui concerne l'utilisation de SHGetSpecialFolderLocation, tout est dans la

  8. #8
    Expert éminent sénior

    Avatar de Siguillaume
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2007
    Messages
    6 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 6 180
    Points : 25 358
    Points
    25 358
    Par défaut
    Citation Envoyé par Aka Guymelef Voir le message
    En ce qui concerne l'utilisation de SHGetSpecialFolderLocation, tout est dans la
    J'ai justement la FAQ, sous les yeux, c'est elle qui ma indiqué cette fonction.
    Seulement, je trouve que l'exemple d'utilisation qui est fournit, n'est pas vraiment adapté à ce que je veux faire.
    À moins que vous me guidiez un peu, dans la compréhension.
    Merci

  9. #9
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Je ne vois pas trop où est le problème, recopiez la fonction SpecialFolder dans votre (pensez au uses) puis appelez SpecialFolder comme dans l'exemple mais au lieu de passer la constante CSIDL_PERSONAL, passez CSIDL_DESKTOPDIRECTORY.

  10. #10
    Expert éminent sénior

    Avatar de Siguillaume
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2007
    Messages
    6 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 6 180
    Points : 25 358
    Points
    25 358
    Par défaut
    ok. J'essaie de voir ça. Voici ce que je comprends:
    1-> D'abord la fonction, qui permet de retourner le chemin des repertoires speciaux, en tant que chaînes de caractères;
    2->ensuite l'utilisation de la fonction.

    Est ce bien ça?

  11. #11
    Expert éminent sénior

    Avatar de Siguillaume
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2007
    Messages
    6 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 6 180
    Points : 25 358
    Points
    25 358
    Par défaut
    Je rencontre une erreur à ce niveau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHGetSpecialFolderLocation(Form.Handle, Folder, SFolder);
    De quelle form. S'agit-il? Celui en cours?
    Quand je le remplace par le nom de celui en cours, il me dit que .Handle n'est pas déclaré. Ce qui est vrai. Je sais plus.

    Il y a aussi le problème de l'heure.

  12. #12
    Expert éminent sénior

    Avatar de Siguillaume
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2007
    Messages
    6 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 6 180
    Points : 25 358
    Points
    25 358
    Par défaut
    J'ai pu résoudre le problème avec l'heure. Voici ce que j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure  sauvegarde_rapide;
    var dateconvertit:string;
        nomfichier,cheminbureau:string;
      begin
          dateconvertit:=datetostr(Date);
          dateconvertit[3]:='_';
          dateconvertit[6]:='_' ;
          //cheminbureau:= trouverbureau(CSIDL_DESKTOPDIRECTORY);
          nomfichier:='C:\Rapport Annuel_' + dateconvertit + '_' + FormatDateTime('hh-mm-ss',Time) +'.txt';
    end;
    Si quelqu'un a mieux, je suis preneur.

    POur l'heure, je m'arrache toujours les cheveux avec le repertoire du bureau.

    Merci

  13. #13
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Essaye de passer Application.Handle plutôt, même si d'après la MSDN la valeur du handle passé ne semble pas avoir grande importance...

    En ce qui concerne ton problème sur le formatage de l'heure, je pense que la solution de banban54 répond à ta question non ? Consulte l'aide sur la fonction FormatDateTime pour plus de renseignement.

  14. #14
    Expert éminent sénior

    Avatar de Siguillaume
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2007
    Messages
    6 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 6 180
    Points : 25 358
    Points
    25 358
    Par défaut
    Avec Application.Handle, je n'ai plus de bug.
    Tout semble bien fonctionner.
    Seulement, la variable CSIDL_DESKTOPDIRECTORY, fait enregistrer le fichier dans le repertoire:C:\Documents and Settings\Utilisateur et non sur le bureau. C'est dans ce même repertoire qu'il enregistre, même quand j'utilise la variable CSIDL_PERSONAL.
    Il y a t-il quelquechose qui manque?
    Voici le nouveau code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    function trouverbureau(Dossier:Integer):String;
      var
        SDossier:pItemIDList;
        lechemin:Array[0..Max_Path] of Char;
     
      begin
        SHGetSpecialFolderLocation(Application.Handle,Dossier, SDossier);
        SHGetPathFromIDList(SDossier, lechemin);
        Result:=StrPas(lechemin);
      end;  
     
    procedure  sauvegarde_rapide;
    var dateconvertit:string;
        nomfichier:string;
      begin
          dateconvertit:=datetostr(Date);
          dateconvertit[3]:='_';
          dateconvertit[6]:='_' ;
          nomfichier:=trouverbureau(CSIDL_PERSONAL)+'Rapport Annuel_' + dateconvertit + '_' + FormatDateTime('hh-mm-ss',Time) +'.txt';
      end;
    Le problème avec l'heure est résolu dans ce code.

  15. #15
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 115
    Points : 41 246
    Points
    41 246
    Billets dans le blog
    63
    Par défaut
    pourquoi faire simple quand on peut faire compliqué
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     nomfichier:=cheminbureau+'Rapport Annuel_' + dateconvertit + '_' + FormatDateTime('hh-mm-ss',Time) +'.txt';
      end;
    il me semble que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nomfichier:=cheminbureau+'Rapport Annuel_' + FormatDateTime('dd_mm_aaaa_hh-mm-ss',now) +'.txt';
    ferait la même chose sans avoir a convertir la date et encore là je n'utilise pas toutes les possibilité de FormatdateTime puisque l'on peut aussi mettre des constantes et pas simplement le formattage de la date

  16. #16
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Essaye alors avec la constante CSIDL_DESKTOP qui est censé faire la même chose que CSIDL_DESKTOPDIRECTORY. En tout cas moi j'ai testé sous XP et ça fonctionne très bien. Avec quel SE testes-tu ?

  17. #17
    Expert éminent sénior

    Avatar de Siguillaume
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2007
    Messages
    6 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 6 180
    Points : 25 358
    Points
    25 358
    Par défaut
    Pour le FormatDateTime:
    Eh oui. ça marche super bien, j'ai retouché:dd_mm_aaaa_hh-mm-ss', en dd_mm_yyyy_hh-mm-ss' ,et ça marche très bien Merci pour cette optimisation à banban et Sergiomaster.

    Pour le CSIDL_DESKTOP,
    j'ai remplacé par cette variable. Mais, le fichier n'est toujours pas sur le bureau.
    Je suis également sur XP. Bizarre quand même...
    Merci de ton assistance, qui me fait vraiment progresser.

  18. #18
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Essayes de rentrer en debuggage et regarde ce que te retourne trouverbureau et regarde si ça à l'air cohérent ou pas ?

    Autre chose, cette fonction ne retourne le répertoire sans '\' à la fin donc il faut le concaténer avant le nom sinon en fait tu es en train de créer un fichier de la forme :

    C:\Documents and Settings\Utilisateur\BureauNomDuFichier.txt

  19. #19
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 115
    Points : 41 246
    Points
    41 246
    Billets dans le blog
    63
    Par défaut
    Citation Envoyé par Danjos Voir le message
    j'ai retouché:dd_mm_aaaa_hh-mm-ss', en dd_mm_yyyy_hh-mm-ss'
    au temps pour moi mais tu es sur de toi pour les minutes
    donc je me permet de retoucher
    et comme je regarde la syntaxe de la routine j'en profite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    formatdatetime('"\Rapport Annuel_"dd_mm_yyyy_hh-nn-ss".txt"',now);
    pour ce qui est du(des) chemin moi j'ai pris l'habitude de passé par le composant inclus dans la JVCL jvComputerInfoEx qui fait tout le boulot à ma place

  20. #20
    Expert éminent sénior

    Avatar de Siguillaume
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2007
    Messages
    6 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2007
    Messages : 6 180
    Points : 25 358
    Points
    25 358
    Par défaut
    Citation Envoyé par Aka Guymelef Voir le message
    C:\Documents and Settings\Utilisateur\BureauNomDuFichier.txt
    C'est effectivement ce que j'avais comme nom.
    Et là, il a suffit que j'ajoute '\', comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nomfichier:=trouverbureau(CSIDL_DESKTOP)+'\Rapport Annuel_' + FormatDateTime('dd_mm_yyyy_hh-nn-ss',Now) +'.txt';
    et tout marche bien.
    Ah la programmation:un seul '/' pour que tout foire.

    Merci infiniment à toi!!!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2007] Utiliser le nom d'un fichier pour créer un répertoire
    Par 2befred dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/09/2010, 08h03
  2. Réponses: 3
    Dernier message: 14/04/2010, 15h57
  3. [C#] Comment choisir un fichier pour l'enregistrer ?
    Par AmineDev9 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 17/01/2009, 19h36
  4. Réponses: 4
    Dernier message: 27/09/2007, 15h05
  5. Réponses: 11
    Dernier message: 01/03/2006, 10h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo