2017-01-19 3 views
-3

i besoin d'écrire un fichier avec le nom du fichier contenant la date actuelle .. tout fonctionne en plus la date, il donne une exception de classe « erreur d'exécution (3) »lazarus/pascals nom de fichier d'écriture avec la date actuelle

(la importo.text est le texte d'une TEdit .. mais je suppose qu'il est hors de propos)

uses 
    Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; 

... 

var 
    contributo:real; 
    f:textfile; 
... 
    datee: string; 

... 

contributo:= (StrToInt(importo.text)/ 100)*4; 

    datee:= DateToStr(Date); 

    assignfile(f,'fattura minimi n.'+n.text+' '+datee+'.txt'); 
    rewrite(f); 

    writeln(f,'Giovanna Migliore'); 
    ... 

    closefile(f); 
+4

Effectuez un débogage. Quelle est la valeur de la chaîne que vous utilisez comme nom de fichier. –

+0

RTE 3 est le chemin introuvable. Les barres obliques inverses dans n.text ou datee? Comme David le suggère, vérifiez que le nom de fichier éventuel est correct. –

Répondre

6

DateToStr() renvoie la date formatée selon les paramètres régionaux. Dans votre cas, cela renvoie presque certainement un caractère délimiteur de dossier/chemin (/ ou \) qui cause le problème (chemin introuvable).

Même si vous modifiez vos paramètres régionaux pour éviter d'utiliser de tels caractères, le code échouera toujours sur les autres systèmes si ces paramètres régionaux ne sont pas "compatibles". Pour éviter cela, vous devez vous assurer que votre encodage de la date dans le nom de fichier n'est pas sensible à de tels problèmes potentiels.

Vous pouvez supprimer/remplacer tous ces caractères après la formation du nom de fichier, ou vous pouvez coder explicitement la date d'une manière qui ne sera pas introduire de tels caractères pour commencer, semblable à:

var 
    y, m, d: Word; 

.. 

    DecodeDate(Date, y, m, d); 
    dateStr := Format('%4d-%2d-%2d', [y, m, d]); 

    // e.g. dateStr value for 31st Dec 2016 would be: '2016-12-31' 

Vous pouvez ensuite incorporez les valeurs des composants de date dans votre nom de fichier, soit par concaténation si nécessaire, soit directement dans une instruction à format unique:

filename := Format('fattura minimi n.%s %4d-%2d-%2d.txt [n.text, y, m, d]); 
assignfile(f, filename); 
+1

Ce genre de question et de réponse me laisse découragé par ce site. Je pense que nous avons tous vu tant de fois et reconnaître immédiatement le problème. Mis à part le demandeur. Ce dont le demandeur a vraiment besoin, c'est de compétences de débogage. Poser des questions ici, qui ont été posées tant de fois auparavant, est un piètre substitut pour apprendre à déboguer. Comment pouvons-nous apprendre à ces gens à pêcher? –

+2

Vous pouvez utiliser 'FormatDateTime()' au lieu d'utiliser 'DecodeDate()' et 'Format()' séparément: 'dateStr: = FormatDateTime ('aaaa' -" mm "-" dd ', Date); 'et même quelque chose comme ceci: 'filename: = FormatDateTime ('" fattura minimi n.' + n.text + '"aaaa" - "mm" - "dd" .txt "', Date);' –

+2

@David - vous ne pouvez pas enseigner * n'importe qui * * n'importe quoi * s'ils ne veulent pas apprendre et que vous perdez votre temps à essayer. Notez que cette réponse ne donne pas seulement une solution au problème en question. Cela explique pourquoi il y a un problème et le raisonnement derrière l'arrivée de la solution. Un site ** Q + A ** consiste à fournir des * réponses * utiles qui aident les gens à apprendre, pas à envoyer des gens faire leurs valises juste parce qu'ils n'ont pas encore les compétences dont nous profitons. Aider quelqu'un à apprendre à pêcher ne doit pas impliquer de refuser d'aider à sa faim immédiate entre-temps. – Deltics