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

Signaler
Messages postés
5
Date d'inscription
mardi 29 avril 2008
Statut
Membre
Dernière intervention
30 avril 2008
-
Messages postés
5
Date d'inscription
mardi 29 avril 2008
Statut
Membre
Dernière intervention
30 avril 2008
-
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

2 réponses

Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
26
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.
Messages postés
5
Date d'inscription
mardi 29 avril 2008
Statut
Membre
Dernière intervention
30 avril 2008

Merci a toi,

J'ai fait un truc dans le genre, et ca fonctionne.
Merci
pyo