Inclure la date et l'heure au nom de fichier

Résolu
marin1617 Messages postés 42 Date d'inscription samedi 3 août 2013 Statut Membre Dernière intervention 17 décembre 2019 - 3 août 2013 à 11:09
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 - 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

4 réponses

korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
3 août 2013 à 15:26
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...
--
1
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
Modifié par f0xi le 5/08/2013 à 13:13
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 ?]
1
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
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.
0
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
4 août 2013 à 13:21
P-S: où est passé f0xi dans le "Top contributeurs" ?
Ainsi que d'autre d'ailleurs...
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
Modifié par f0xi le 5/08/2013 à 13:13
oui codé à la volé sans debug bien sur :) juste pour le principe.

corrigé :)

le Top ... rien a faire du Top :)
0
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
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
0
korgis Messages postés 420 Date d'inscription samedi 17 mai 2003 Statut Membre Dernière intervention 6 mai 2019 17
3 août 2013 à 13:38
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".
0
marin1617 Messages postés 42 Date d'inscription samedi 3 août 2013 Statut Membre Dernière intervention 17 décembre 2019
3 août 2013 à 14:12
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?
0
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
Modifié par f0xi le 5/08/2013 à 21:31
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;
0
Rejoignez-nous