Tranférer un fichier texte mot à mot dans un StringGrid [Résolu]

Messages postés
5
Date d'inscription
mardi 29 avril 2008
Dernière intervention
30 avril 2008
- - Dernière réponse : pyoo
Messages postés
5
Date d'inscription
mardi 29 avril 2008
Dernière intervention
30 avril 2008
- 30 avril 2008 à 13:36
Bonjour a tous,

Petit problème delphien!!

J'ai dans un fichier texte des nombres répartis sur 5 colonnes et séparés par des tabulations et ca sur plusieurs lignes. Je voudrais résupérer chaque nombre et le placer dans une case différente d'un stringgrid. Je sais qu'en utilisant les séparateurs c'est jouable, mais je ne métrise pas tout à fait les chaines pour l'instant.
Si quelqu'un a une petite idée.
Merci a vous
pyo
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
25
3
Merci
Bonjour pyoo,

Voici un code simple et répondant à ta question. Je pense que les commentaires t'aideront à décomposer les différentes étapes :

const
  //Nom du fichier de valeurs à mettre dans la grille
  fichier =  'valeurs.txt';

 procedure  TForm1.FillStringGrid(aGrid: TStringGrid; aFileName: TFileName; aSeparator: char  = #9);
var
 F: TextFile;
 s, s1: string;
 CharPos, nbCols, nbRows: integer;
begin
  if FileExists(aFileName) then
  begin
    AssignFile(F, aFileName);
    reset(F);
    nbRows :=  0;
     while not Eof(F) do
    begin
      //lecture d'une ligne
      readLn(F, s);
      //recherche du caractère séparateur
      CharPos : = Pos(aSeparator, s);
      //initialisations
      nbCols :=  0;
      inc(nbRows);
      //découpage de la ligne tant que séparateur trouvé
       while  CharPos > 0do
      begin
        //s1  = caractères situés avant le premier séparateur
        s1 :=  Copy(s, 1, CharPos - 1);
        //suppression des caractères situés devant le séparateur
        Delete(s, 1, CharPos);
        //calcul e la prochaine position
        CharPos := Pos(aSeparator, s);
        //recalculer nombre de colonnes nécessaires
        inc(nbCols);
        {On redimensionne le TStringGrid si nécessaire}
         if  AGrid.ColCount < AGrid.FixedCols + nbCols + 1then
          AGrid.ColCount : = AGrid.FixedCols + NbCols + 1;
        if AGrid.RowCount < AGrid.FixedRows + NbRows then
          AGrid.RowCount :=  AGrid.FixedRows + NbRows;
        AGrid.Cells[NbCols, NbRows] := s1;
       end ;
      {S'il reste un ou plusieurs caractères après le dernier
      caractère séparateur, on l'ajoute au grid}
      if s <> EmptyStr then
        AGrid.Cells[nbCols + 1, NbRows] : = s;
    end;
    CloseFile(F);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FillStringGrid(StringGrid1, fichier);
end;

NB : le composant TStringGrid s'adaptera automatiquement en hauteur et en largeur lorsque la procédure lira les données.

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 117 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Delphiprog
Messages postés
5
Date d'inscription
mardi 29 avril 2008
Dernière intervention
30 avril 2008
0
Merci
Merci a toi,

J'ai fait un truc dans le genre, et ca fonctionne.
Merci
pyo
Commenter la réponse de pyoo

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.