Pb pascal

Fermé
Dodie - 6 déc. 2002 à 11:12
 dodie - 22 janv. 2003 à 12:23
Voilà, j'essaie d'écrire un programme en pascal qui doit pouvoir extraire les différents mots d'un fichier pour les rediriger par ordre alphabétique dans un deuxième fichier.
Le problème c'est que je ne sais même pas comment récupérer les différents mots sans avoir toute la chaîne de caractère à partir du type string.
J'ai déjà réussi à faire compter les mots en faisant rechercher ' ' dans le texte, mais après je suis bloquée.
Si vous avez ne serai-ce qu'un début de solution, n'hésitez pas!!!!
A voir également:

11 réponses

troy06 Messages postés 57 Date d'inscription mardi 19 février 2002 Statut Membre Dernière intervention 16 mars 2007
7 déc. 2002 à 08:28
si tu veut juste un début de solution (d'apres moi) copie ton fichier dans un tableau. Apres c'est un probleme de tri. Je débute dans la programmation et c'est la seule idée qui me vient à l'esprit.

*Ca sent mauvais dit le chat en parlant de la viande qu'il 
ne peut atteindre (proverbe persan)*
0
Kuching Messages postés 2697 Date d'inscription jeudi 30 mai 2002 Statut Contributeur Dernière intervention 26 décembre 2007 157
7 déc. 2002 à 11:30
Salut,

Et en utilisant le caractere "espace vide" comme caractere de fin de chaine ca ne pourrait pas marcher?

A+  K.
"errare humanum est, sed persevare diabolicum"
0
merci, j'ai un peu de mal, mais je suis en bonne voie, merci pour vos informations
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Salut, la solution que je peut te proposer ne peut marcher que si le fichier n'est aps très volumineux; il s'agit de prendre un tableau de chaine de caractère d'asez grande taille dans lequel tu vas mettre les mots contenues dans le fichiers un à un (en utilisant les délimiteurs bien sur ie "espace", ".", ",",";" etc..), de ranger le tableau et de renvoyer tous les éléments dans ton fichier de destination. Tu peut même utiliser des astuces pour gérer le cas où le fichier de départ seraot trop grand en utilisasnt un fichier tampon. J'erspère que cela pourra t'aider.
0
leo_leo Messages postés 12 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 1 août 2003
18 déc. 2002 à 10:48
Salut, je t'ai écris la dernière fois, tu t'en souviens ? (il y'a deux jours je crois); j'ai essayé d'écrire un petit programme pour essayer de répondre à tes attentes, j'espère que ça te servira, mais moi au courant si ça te convient.

program fichier;
uses crt;
var
fic1, fic2 : text;
tab : array[1..300] of string[20];
ch : char;
int, chemin : string[20];
i, j, k : integer;

Begin
clrscr;
write('Entrer le chemin complet du fichier que vous voulez trier : ');
readln(chemin);
assign(fic1,chemin);
write('Entrer le chemin complet du fichier destination : ');
readln(chemin);
assign(fic2,chemin);
reset(fic1);
rewrite(fic2);
read(fic1,ch);
i:=1;
tab[i]:=' ';

{* Cette boucle permet de recueillir les mots du fichier dans un tableau*}

while not eof(fic1) do
begin
while ( not (ch in [' ', '.', ',', ';', ':', '!', '?', #13, #10]) ) and (not eof(fic1) ) do
begin
tab[i]:=tab[i]+ch;
read(fic1,ch);
end;
if tab[i]<>' ' then
begin
i:=i+1;
end;
read(fic1,ch);
tab[i]:=' ';
end;

{* Boucle pour le trie du tableau *}

for j:=1 to i do
for k:=j to i-1 do
if tab[k]<tab[j] then
begin
int:=tab[k];
tab[k]:=tab[j];
tab[j]:=int;
end;
j:=1;

{* Boucle pour remplir le fichier destination avec le tableau tri‚ *}

while j<>i do
begin
if ( j mod 10) = 0 then
writeln(fic2);
write(fic2,tab[j]);
j:=j+1;
end;
close(fic1);
close(fic2);
write('C''est fini');
ch:=readkey;
End.


tout ce que je sais c'est que je ne sais rien
0
merci Leo, j'avais essayé avec les premières informations, je vais essayer maintenant avec ce nouveau programme, si ça marche je te le ferai savoir.
Merci encore
0
j'ai essayé ce que tu m'as donné, le problème étant que je viens de réaliser que j'ai une contrainte de plus:
je dois utiliser des fichiers typés.
Avec le type text, ça fonctionne, mais pas avec le type file of string. Est ce que tu aurais une idée avec ce type là? J'aurai aussi voulu savoir si tu pouvais m'expliquer un peu plus en détail la partie qui découpe le texte en mot et les envoie vers le fichier. Grace à ce que tu m'as donné je sias comment le faire, mais je ne comprends pas ce qui se passe en fait.
tout ce que je comprend c'est le système de séparation par la ponctuation mais je n'ai pas compris comment tu arrives à envoyer les mots dans le fichier. Si tu peux m'aider, merci d'avance et bonne année!
0
leo_leo Messages postés 12 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 1 août 2003
31 déc. 2002 à 18:34
Salut, en ce qui concerne les fichiers typés, je te repondrais peut être plus tard, mais pour le programme ci dessus, la technique est la suivante :
J'utilise une variable caractère ch qui reçoit les lettres successives du fichier et les range au fur et à mesure dans 1 case du tableau tab (en les concaténant, d'où le tab[i]=tab[i] + ch;) jusqu'à ce qu'il rencontre un caractère qui lui indique que le mot est terminé (ponctuation); on passe alors à la case suivante du tableau et cette dernière reçoit le mot suivant dans le fichier.
Quand tous les mots du fichiers ont été recueilli dans le tableau, on trie ce dernier.
Enfin, on utilise une boucle qui parcour le tableau et qui renvoit au fur et à mesure les mots de ce dernier dans le fichier de destination.
Je sais pas si tu as compris, met moi au courant.

tout ce que je sais c'est que je ne sais rien
0
leo_leo Messages postés 12 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 1 août 2003
2 janv. 2003 à 14:58
Salut et bonne année 2003. En ce qui concerne le programme avec les fichier typés, je ne comprend pas trop ce que tu veut exactement, explique moi un peu et je pourrai t'aider : ce que j'aimerai savoir, c'est si le fichier de départ est typé ou texte, dans le premier cas, il faudra préciser la structure; je crois que la solution serai que tu essai d'abord quelque chose comme ça je pourra essayer de comprendre ce dont tu as besoin réellement et voir si je pourrai t'être utile.


tout ce que je sais c'est que je ne sais rien
0
alors, j'ai essayé ce que tu m'as donné mais le programme ne fonctionne pas... ça viens surement de moi, je dois avouer que j'ai beaucoup de mal!!!
j'ai essayé d'écrire la premeière partie de mon programme pour qu'il puisse récupérer les mots du fichier et les rediriger vers un fichier de type file of string , mais il ne fonctionne pas et je ne vois pas pourquoi!!!
Aurais tu une idée? je ne vois pas ou je me suis trompée...
voilà ce que j'ai écrit:
program projet;
var f:text;
g:file of string;
mots,nom,s: string;
a:char;
i:integer;

begin

writeln('tapez nom de fichier:');
readln(nom);
assign(f,nom);
reset(f);

assign(g,mots);
rewrite(g);

while not eof(f) do begin
read(f,a);
while not (a in [' ','.'])
do write(g,s);
end;

while not eof(f) do if (a in [' ','.']) then begin
seek(g,i+1);
writeln('ok');
end;
repeat until eof;

if eof then begin
writeln('fichier vide');
halt;
end;

close(f);
close(g);
readln;
end.


si tu peux m'expliquer ce qui ne va pas, n'hesite pas, je continue à chercher. Merci pour ton aide!
0
leo_leo Messages postés 12 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 1 août 2003
8 janv. 2003 à 19:15
Salut Dodie , je viens à peine de lire ton mail; bon, je n'ai pas de compilateur pascal actuellement avec moi mais à voir ton programme, ce que je peut te dire c'est que la 1ère boucle déja, je ne comprend pas; je ne comprend pas l'utilisation de la variable s ( d'autan puisqu'elle n'a aucune valeur quand tu l'utilise dans la 1ère boucle). Essai de m'expliquer un peu le déroulement de ton programme, j'essaierais de voir ce que je peut. Et puis, la boucle interne même à la 1ère boucle, la condition risque de faire boucler infiniment. La deuxième boucle aussi, je ne vois pas l'utilité du seek sans instruction d'écriture qui l'accompagne. Bon aller, essai de cogiter, ça devrait aller.

tout ce que je sais c'est que je ne sais rien
0
je voulais te remercier, j'ai suivi tes conseils pas à pas, et je m'en suis sortie, maintenant mon programme fonctionne. enfin!!!!
merci beaucoup, et peut etre à une prochaine fois
0