Inclure la date et l'heure au nom de fichier [Résolu]

Messages postés
42
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
15 août 2014
- - Dernière réponse : f0xi
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
- 5 août 2013 à 21:12
Bonjour,
Comment puis-je avec ce code :
NomFich:='E:\Journal alarmes CMR\alarmes CMR.doc ';
memo.Lines.SaveToFile(NomFich);
inclure dans le nom de fichier la date et l'heure d'enregistrement ?
Sachant que dans mon programme j'ai :
Edit1.Text := DateToStr(Date);
Edit2.Text := TimeToStr(Time);
Merci d'avance
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
15
1
Merci
Tu peux par exemple insérer la date et l'heure sous la forme :
[yyyymmddhhmmss] juste avant l'extension du fichier.
Voici un code simple qui permettra de le faire.
// Retourne un string sous la forme "yyyymmddhhmmss" :
function AllowedStrDateTime(const sDate, sTime: string): string;
var
  AllowedStrDate, AllowedStrTime: string;
begin
  AllowedStrDate := Copy(sDate, 7, 4) + Copy(sDate, 4, 2) + Copy(sDate, 1, 2);
  AllowedStrTime := Copy(sTime, 1, 2) + Copy(sTime, 4, 2) + Copy(sTime, 7, 2);
  Result := AllowedStrDate + AllowedStrTime;
end;

// et le timer déclenche ce code :
var
  NomFich: string;
  Ext: string;
  AllowedDateTime: string;
begin
  NomFich := 'E:\Journal alarmes CMR\alarmes CMR.doc ';
  Ext := ExtractFileExt(NomFich);
  Delete(NomFich, Pos(Ext, NomFich), Length(Ext));
  AllowedDateTime := AllowedStrDateTime(Edit1.Text, Edit2.Text);
  NomFich := Format('%s [%s]%s', [NomFich, LegalDateTime, Ext]);
  Memo.Lines.SaveToFile(NomFich);
end;


Si tu débutes avec Delphi, je te conseille d'aller voir l'aide (F1) concernant les fonctions de traitement des strings :
Delete, Copy, Pos, Length, ExtractFilePath, ExtractFileExt, Format, etc...
--

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 201 internautes nous ont dit merci ce mois-ci

Commenter la réponse de korgis
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26
1
Merci
Tu peux t'amuser à recréer une structure de dossier avec les dates :

var Y, M, D,H,N,S,Z : word;
   Path,FileName : string;
begin
  DecodeDate( Now, Y, M , D);
  DecodeTime( Now, H, N, S, Z);

  Path := format('E:\Journaux Alarmes CMR\%.4d\%.2d\%.2d\',[Y,M,D]);
  if Not directoryExists(Path) then
    forceDirectories(Path);

  FileName := format('%s\journal-%.2d-%.2d-%2d-%.4d.txt',[Path,H,N,S,Z]);
  (*Objet*).saveToFile(FileName);
end;

________________________________________________________
[ besoin de câbles audio, vidèo, informatique pas cher ?]

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 201 internautes nous ont dit merci ce mois-ci

korgis
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
15 -
Oui, bien vu.
Et "codé à la volée"...
Sans remettre en question le principe du code, je signale qu'il vaudra mieux remplacer CreateDirectory ou CreateDir par ForceDirectories.
korgis
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
15 -
P-S: où est passé f0xi dans le "Top contributeurs" ?
Ainsi que d'autre d'ailleurs...
f0xi
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26 -
oui codé à la volé sans debug bien sur :) juste pour le principe.

corrigé :)

le Top ... rien a faire du Top :)
korgis
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
15 -
"le Top ... rien a faire du Top :)"
Ouais... c'était plus flatteur quand ça s'appelait le Top des Membres... ;-P
Commenter la réponse de f0xi
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
15
0
Merci
Sous quelle forme veux-tu écrire les dates et heures (sachant que les caractères ":" et "/" ne sont pas autorisés pour les noms de fichiers ?
Je te conseille d'utiliser les méthodes "ExtractFileExt" et "Format".
Commenter la réponse de korgis
Messages postés
42
Date d'inscription
samedi 3 août 2013
Statut
Membre
Dernière intervention
15 août 2014
0
Merci
Merci Korgis pour ta réponse,
Peut importe le format du moment que l'on puisse comprendre la date et l'heure d'enregistrement du fichier.
En fait, je souhaite réaliser un programme qui enregistre le contenu d'un memo automatiquement toutes les 24H et egalement qui propose un enregistrement immediat par l'appui sur un bouton.
lorsque je tape ce code,
NomFich:='E:\Journal alarmes CMR\alarmes CMR.doc ';
memo.Lines.SaveToFile(NomFich);
l'enregistrement s'effectue bien, mais à chaque appui, le précédent est écrasé. C'est pour cela qu'avec l'info date et heure je pense que cela réglerai mon Pb.
De plus pour l'enregistrement toutes les 24H, je pense avec un Timer surveiller le passage à 0h00minOOs.
Qu'en pense tu?
f0xi
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26 -
pour sauver à une heure bien précise :

function getTimeCodeStr: string;
begin
  DateTimeToString(result, 'yyyy-mm-dd-hhnnss', now);
end;

function TForm1.SyncTimer: word; { créée dans le public de TForm1 }
var H,N,S,Z: word;
begin
  decodeTime(now, H, N, S, Z);
  { synchro du timer, 
    dans 1 heure - le temps (M,S) déjà écoulé 
  }
  Timer1.Interval := 3600000 - (N*60000 + S*1000);
  { si on démarre le programme à 12h45 et 34secondes,
    3600000 - (2700000 + 34000) = 866000 = 
    test dans 14.43 minutes
  }
  result := H;
end;

procedure TForm1.Form1Create(Sender: TObject);
begin
  SyncTimer;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if SyncTimer in [4,8,12,16,20,0] then { sauve toute les 4 heures }
    Journalisation.SaveToFile('E:\Journaux\Journal-'+getTimeCode+'.txt');
end;

procedure TForm1.ButtonSaveClick(Sender: TObject);
begin
  Journalisation.SaveToFile('E:\Journaux\Journal-manualsave-'+getTimeCode+'.txt');
end;
Commenter la réponse de marin1617