Tranférer un fichier texte mot à mot dans un StringGrid

Résolu
pyoo Messages postés 5 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 30 avril 2008 - 30 avril 2008 à 09:49
pyoo Messages postés 5 Date d'inscription mardi 29 avril 2008 Statut Membre 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

2 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
30 avril 2008 à 11:21
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.
3
pyoo Messages postés 5 Date d'inscription mardi 29 avril 2008 Statut Membre Dernière intervention 30 avril 2008
30 avril 2008 à 13:36
Merci a toi,

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