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

marin1617 42 Messages postés samedi 3 août 2013Date d'inscription 15 août 2014 Dernière intervention - 3 août 2013 à 11:09 - Dernière réponse : f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscriptionModérateurStatut 9 mars 2018 Dernière intervention
- 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 

9 réponses

Répondre au sujet
korgis 411 Messages postés samedi 17 mai 2003Date d'inscription 16 mars 2018 Dernière intervention - 3 août 2013 à 15:26
+1
Utile
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...
--
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de korgis
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscriptionModérateurStatut 9 mars 2018 Dernière intervention - Modifié par f0xi le 5/08/2013 à 13:13
+1
Utile
4
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 ?]
Cette réponse vous a-t-elle aidé ?  
korgis 411 Messages postés samedi 17 mai 2003Date d'inscription 16 mars 2018 Dernière intervention - 4 août 2013 à 13:19
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 411 Messages postés samedi 17 mai 2003Date d'inscription 16 mars 2018 Dernière intervention - 4 août 2013 à 13:21
P-S: où est passé f0xi dans le "Top contributeurs" ?
Ainsi que d'autre d'ailleurs...
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscriptionModérateurStatut 9 mars 2018 Dernière intervention - 5 août 2013 à 12:43
oui codé à la volé sans debug bien sur :) juste pour le principe.

corrigé :)

le Top ... rien a faire du Top :)
korgis 411 Messages postés samedi 17 mai 2003Date d'inscription 16 mars 2018 Dernière intervention - 5 août 2013 à 13:44
"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
korgis 411 Messages postés samedi 17 mai 2003Date d'inscription 16 mars 2018 Dernière intervention - 3 août 2013 à 13:38
0
Utile
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
marin1617 42 Messages postés samedi 3 août 2013Date d'inscription 15 août 2014 Dernière intervention - 3 août 2013 à 14:12
0
Utile
1
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 4304 Messages postés samedi 16 octobre 2004Date d'inscriptionModérateurStatut 9 mars 2018 Dernière intervention - 5 août 2013 à 21:12
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.