Importer mots d'un fichier texte dans un tableau

Importer mots d'un fichier texte dans un tableau - Ada - Programmation

Marsh Posté le 24-12-2005 à 00:02:01    

Bonjour à tous
 
Je cherche désespérement à récupérer chaque mot d'un fichier texte afin de pouvoir les classer ensuite par ordre alphabétique, comme pour créer un dictionnaire. Pour l'instant j'ai réussi à faire repérer chaque mot avec Is_letter, mais ensuite j'essaie de stocker les mots dans un tableau pour les classer et là je coince complètement !!! Impossible de créer ce tableau. Y aurait il une âme charitable qui pourrait m'aider en cette période de fête  ;) ?
 
Voilà le code que j'ai pour l'instant :
 
with Ada.Text_Io,Ada.Integer_Text_Io,ada.Characters.Handling;
use Ada.Text_Io,Ada.Integer_Text_Io,ada.Characters.Handling;
 
procedure Maison is
   
   F:File_Type;
   Ligne:String(1..80);
   Lg:Integer;
   A:Integer;
   B:Integer;
   
begin
   A:=0;
   b:=0;
   Open(F,In_File,"c:\premier2.txt" );
   while not (End_Of_File(F)) loop
      Get_Line(F,Ligne,Lg);
      for I in 1..Lg loop
         
         if Is_Letter(Ligne(I)) then
            B:=0;--c'est juste un test
         else
            Put(Ligne(A+1..I));new_line;          
            A:=I;
         end if;
         
      end loop;  
            put(ligne(a+1..lg));    
    end loop;
         
         
end Maison;
 
Merci d'avance pour vos réponses
 
Sandra

Reply

Marsh Posté le 24-12-2005 à 00:02:01   

Reply

Marsh Posté le 24-12-2005 à 10:53:57    

j'essai d'ecrire un truc avec ton code, peut-tu le commenter s'il te plais
 
que font les ligne 23 et 28 ? (affiche ....,, affiche ....)

Reply

Marsh Posté le 24-12-2005 à 11:22:31    

Un premier jet, à partir de ton code, mais je suis pas trés fort, j'aurais pas fait pareil.
 
1:with Ada.Text_Io, Ada.Integer_Text_Io, ada.Characters.Handling;
2:use Ada.Text_Io, Ada.Integer_Text_Io, ada.Characters.Handling;
3:procedure Main is
4:   subtype string_80 is String (1..80);
5:   F:File_Type;
6:   Ligne:String_80 := (others => ' ');
7:   Lg:Integer := 0;
8:   A:Integer := 0;
9:   B:Integer := 0;
10:   Borne_Du_tableau : constant := 2_000;
11:
12:   Tableau : array (1..Borne_Du_Tableau) of String_80 := (others => (others => ' '));
13:   Position_Dans_Le_Tableau : Positive := 1;
14:begin
15:   Open(F,In_File,"toto" );
16:   while not (End_Of_File(F)) loop
17:      Get_Line(F,Ligne,Lg);
18:      for I in 1..Lg loop
19:         if Is_Letter(Ligne(I)) then
20:            null;
21:         else
22:            Tableau(Position_Dans_Le_Tableau)(A+1..I-1) := Ligne(A+1..I-1);
23:
24:            A:=I;
25:            Position_Dans_Le_Tableau := Position_Dans_Le_Tableau + 1; --mot suivant
26:         end if;
27:      end loop;
28:      Position_Dans_Le_Tableau := Position_Dans_Le_Tableau + 1; --mot suivant
29:   end loop;
30:
31:   --------------------------
32:   -- Affichage du tableau --
33:   --------------------------
34:   for I in Tableau'Range loop
35:      Put_line(Tableau(I));
36:   end loop;
37:
38:end Main;

Reply

Marsh Posté le 24-12-2005 à 12:54:52    

Merci tout d'abord pour ta réponse, cela me donne une idée sur le remplissage des tableaux  :pt1cable: !
Pour la ligne 23 et 28 c'était juste pour voir le résultat j'ai rajouté la ligne 28 en dehors de la boucle For car il ne m'affichait pas le dernier mot de la phrase...
encore merci avec çà je vais pouvoir continuer à avancer je posterais mon avancement.
 
Sandra.

Reply

Marsh Posté le 28-12-2005 à 14:11:45    

j'ai effectué le test effectivement ça fonctionne le seul inconvénient c'est que les espaces sont récupérés...
ex: si j'importe d'un texte la phrase "la maison est ........  blanche" je vais avoir dans le tableau :
tableau(1) la
tableau(2)    maison
    "  
    "
    "
tableau(n)                                blanche  
 
Si quelq'un a une autre solution pour remplir un tableau avec des variables string car j'ai des difficultés !
 
Merci
 
Sandra. :cry:

Reply

Marsh Posté le 28-12-2005 à 15:32:26    

A, tu à copier simplement l'exemple que je t'ai donné,,.. et ça ne va pas, évidement. De toute façon il y a d'autre problème en vue. J'ai deux solution à te proposer ; La premiere consiste a garder le code courant et a extraire les mots, par exemple pour les afficher comme suit
 
avec Ada.strings, Ada.strings.fixed;  
 
for I in Tableau'Range loop
      if index_non_blank(tableau(I)) /= 0 then -- si la chaîne n'est pas vide
         put(tableau(i) -- afficher ieme element du tableau
      (index_non_blank(tableau(I)) -- du 1er caractere non blanc
       ..index_non_blank(tableau(i), -- au  
    backward))); --   dernier caractere non blanc
      end if;
   end loop;
 
 
 
 
 
 

Reply

Marsh Posté le 28-12-2005 à 15:54:23    

Avec ce changement a la ligne 22, tu obtiens un ligne de 80 caracteres avec le mot en début de ligne :
22:  Tableau(Position_Dans_Le_Tableau)(1..(I)-(A+1)) := Ligne(A+1..I-1);

Reply

Marsh Posté le 24-05-2006 à 14:35:49    

Bonjour,
Je suis très débutant en matière de programmation. Mais maintenant, je suis en train de traiter avec un questionnaire numérique mais sous forme .txt . pour pouvoir les traiter il faut que je copie colle un à un les réponses dans un tableau .xls mais il me faut beacoup de temps pour le faire.
Voici par exemple le format du fichier source:
 
Nom=Thomas
Prenom=Francis
Age=20
....
...
..
Ce que j'aimerai faire c'est de rassembler toutes les réponses dans un seul fichier xls.
Quelqu'un veut m'aider??

Reply

Marsh Posté le 24-05-2006 à 15:16:35    

beluh a écrit :

Bonjour,
Je suis très débutant en matière de programmation. Mais maintenant, je suis en train de traiter avec un questionnaire numérique mais sous forme .txt . pour pouvoir les traiter il faut que je copie colle un à un les réponses dans un tableau .xls mais il me faut beacoup de temps pour le faire.
Voici par exemple le format du fichier source:
 
Nom=Thomas
Prenom=Francis
Age=20
....
...
..
Ce que j'aimerai faire c'est de rassembler toutes les réponses dans un seul fichier xls.
Quelqu'un veut m'aider??


 
une premiere idée : tu recupere tous tes noms, prenoms, ages, ect...  dans des fichier distincs et tu fais des copier/coller par colone

Reply

Marsh Posté le 24-05-2006 à 18:36:00    


 
Merci pour la réponse très rapide!! J'aime bien cette proposition, mais je ne sais pas comment je vais le faire! Qu'est ce que tu me proposes!!
Encore merci!!

Reply

Marsh Posté le 24-05-2006 à 18:36:00   

Reply

Marsh Posté le 24-05-2006 à 18:46:45    

beluh a écrit :

Merci pour la réponse très rapide!! J'aime bien cette proposition, mais je ne sais pas comment je vais le faire! Qu'est ce que tu me proposes!!
Encore merci!!


 
ben, vu que tu as posté dans la catégorie Ada, le truc c'est de te faire un petit programme Ada qui fait tous ça, C'est pas bien compliqué si ton formulaire est bien foutu !  :)  
Maintenant si ton truc c'est plutot Microsoft, c'est de te faire une macro sous Word ou un equivalent pour faire tout ça mais la je peut rien pour toi, vas plutot voir dans les catégorie adequate Windows et companie !

Reply

Marsh Posté le 24-05-2006 à 23:20:27    

cookie94fr a écrit :


   

Code :
  1. Open(F,In_File,"c:\premier2.txt" );
  2.    while not (End_Of_File(F)) loop
  3.       Get_Line(F,Ligne,Lg);
  4.       for I in 1..Lg loop
  5.        
  6.          if Is_Letter(Ligne(I)) then
  7.             B:=0;--c'est juste un test
  8.          else
  9.             Put(Ligne(A+1..I));new_line;         
  10.             A:=I;
  11.          end if;


         


 
Bonjour sandra,
 
J'ai déjà vu le Is_letter quelque part mais je sais plus où...
Peux tu me rappeler son utilité ?
 


---------------
...pour les miracles ? prévoir un délai !
Reply

Marsh Posté le 25-05-2006 à 12:28:00    


Je pense que cette catégorie me depasse complètement!!! Merci quand même pour ton aimable attitude!! je reviendrai quand je serai à la hauteur de comprendre sk c programme ADA. En fait, c par hasard que je suis tombé sur cette catégorie, j'espère que tu comprends sk je vx dire!!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed