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

pyoo 5 Messages postés mardi 29 avril 2008Date d'inscription 30 avril 2008 Dernière intervention - 30 avril 2008 à 09:49 - Dernière réponse : pyoo 5 Messages postés mardi 29 avril 2008Date d'inscription 30 avril 2008 Dernière intervention
- 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
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 30 avril 2008 à 11:21
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.

Merci cs_Delphiprog 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de cs_Delphiprog
pyoo 5 Messages postés mardi 29 avril 2008Date d'inscription 30 avril 2008 Dernière intervention - 30 avril 2008 à 13:36
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.