Précédent   Forum du club des développeurs et IT Pro > Autres langages > Pascal > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, FAQ, quizz et autres ressources
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 08/12/2007, 12h18   #1
JoseF
Membre habitué
 
Inscription : octobre 2004
Messages : 192
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 192
Points : 108
Points : 108
Par défaut Connaître le nombre d'enregistrements par un clic droit

Bonjour, un petit source

il y a sans doute mieux mais je laisse à votre appréciation ..

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
{
ce petit programme testé en FreePascal pour compter le nombre
d'enregistrements dans un fichier texte
 
principe le programme est stocké sur de disque dur
disons c:\pgmutil\nbrenr.exe
 
ensuite un raccourci est mis dans le dossier 
C:\Documents and Settings\utilisateur\SendTo\
 
pour utiliser clique droit sur un fichier texte
et envoyer vers le raccourci ...
 
Source libre de droits par JoseF sur http://www.developpez.com le 08/12/2007 
 
 
fonctionne si compilé avec FreePascal 
testé avec "Free Pascal Compiler version 1.0.6 [2002/04/23] for i386"
sous windows 32 bits
 
}
 
program nbrenr;
	var a,n	:string;
		i:integer;
		f:TextFile;
 
begin
	i:=0;
	assignfile(f,ParamStr(1));
	reset(f);
	while not eof(f) do
	begin
		readln(f,a);
		i:=i+1;
	end;
	closefile(f);
	str(i,n);
	Writeln('dans le fichier ',ParamStr(1));
	Writeln('il y a ',n,' enregistrements. ');
	Writeln;
	Write('Enter pour quitter ...');
	Readln;
end.
__________________
Un bon exemple vaut mieux qu'une longue explication confuse...
JoseF est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2007, 12h48   #2
droggo
Expert Confirmé
 
Inscription : août 2006
Messages : 3 418
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 3 418
Points : 3 773
Points : 3 773
Gio,

Pour un fichier texte, on appelle ça des lignes, pas des enregistrements.

Il faudrait sécuriser le code : que se passe-t-il si le fichier n'existe pas ? Si l'ouverture échoue ? etc.

Tu peux te passer de la chaine n (curieux nom pour une chaine ), en écrivant directement
Code :
1
2
3
4
5
6
7
	closefile(f);
	{ str(i,n); }
	Writeln('dans le fichier ',ParamStr(1));
	Writeln('il y a ',i,' enregistrements. ');
	Writeln;
	Write('Enter pour quitter ...');
	Readln;
__________________
Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir.
droggo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/12/2007, 14h14   #3
JoseF
Membre habitué
 
Inscription : octobre 2004
Messages : 192
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 192
Points : 108
Points : 108
bonjour,

Merci de tes remarques.

je vais essayer d'y répondre

Citation:
Pour un fichier texte, on appelle ça des lignes, pas des enregistrements.

Si j'ai mis "enregistrement" c'est que dans le cadre de mon travail, on appelle ça des enregistrements et non lignes (déformation professionnelle)
mais c'est une bonne remarque.

Citation:
Il faudrait sécuriser le code : que se passe-t-il si le fichier n'existe pas ? Si l'ouverture échoue ? etc.
Le principe est d'utiliser "envoyer vers" via le clic droit de la souris, or en principe le fichier existe... (sauf si entre temps il a disparu ou été renommé...)
j'avais mis ce code et puis ôté suite à ma réflexion
Code :
1
2
3
4
5
6
7
8
if Paramcount=0 then 
	begin
		writeln('pas de fichier selectionné... Ce progamme ne doit pas être lancé seul...');
		Writeln;
		Write('Enter pour quitter ...');
		readln;
		exit;
	end;
c'est vrai je ne teste pas si l'ouverture échoue...
je ne teste pas non plus s'il s'agit bien d'un fichier pur texte,
si on envoie plusieurs fichiers...
etc...

Citation:
Tu peux te passer de la chaine n (curieux nom pour une chaine ), en écrivant directement
[..]
Writeln('il y a ',i,' enregistrements. ');
oui j'aurai du mettre C comme chaine
mais j'ai mis n car comme nombre.. car c'est un nombre d'enregistrements (de lignes !) que je restitue. Mais c'est transparent pour l'utilisateur

pour ce qui est de du code c'est aussi un reflexe Lazarus/Delphi
exemple
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Button1Click(Sender: TObject);
 var i:integer;
     n:string;
begin
     i:=100;
     str(i,n);
  ShowMessage('il y a'  + n +' enreg.'); // bonne syntaxe
 
//ShowMessage('il y a ',i,' enreg.');
//Unit1.pas(35,39) Error: Wrong number of parameters specified for call to "ShowMessage"
 
// ou 
 
//ShowMessage('il y a'  + i +' enreg.');
//Unit1.pas(37,18) Error: Incompatible types: got "Constant String" expected "LongInt"
 
end;
mais j'aurais du écrire dans mon source
Code :
Writeln('il y a '+n+' enregistrements. ');
cela aurait été plus logique

merci pour ta contribution

marrant pour un petit truc, un mini utilitaire, que j'ai écris en 10 minutes env ...
__________________
Un bon exemple vaut mieux qu'une longue explication confuse...
JoseF est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 23h12.


 
 
 
 
Partenaires

Hébergement Web