Enregistrer données d'un StringGrid dans un fichier

elguevel Messages postés 718 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 22 novembre 2016 - 18 janv. 2003 à 17:25
WinLin Messages postés 86 Date d'inscription dimanche 13 février 2005 Statut Membre Dernière intervention 3 septembre 2007 - 15 mars 2005 à 22:51
voila j'ai crée un programme, avec une StringGrid, et l'utilisateur peut la remplir a son gré, mais j'aimerai (sans passé par les bases de données) enregistré le contenu du tableau dans un fichier !

Comment on fait ?? :|

J'accepte toutes propositions, si possible un moyen d'enregistrement et de lecture rapide et efficace !

MErci d'avance ... A++

7 réponses

cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
18 janv. 2003 à 20:16
Je pense qu'il y a au moins deux solutions :

1- La plus simple à mettre en oeuvre : Un fichier INI :
Tu crées une section par cellule, avec dans chaque section la valeur de la cellule... Utilisable avec une boucle et assez rapide à utiliser... Ne pas oublier de faire une section qui contient le nombre de lignes et le nombre de colonnes... Le seul problème, c'est que ça risque de fair eun gros fichier !

2- Un fichier dans lequel tu mets une entête qui contient le nombre de colonnes et le nombre de lignes..., ensuite, tu alignes dans le fichier les valeurs de chaque cellule, de la gauche vers la droite et de haut en bas, en séparant chaque valeur par un caractère spécial (comme #0 par ex.) ou en mettant avant chaque valeur la taille de la valeur :
[NbrCols, NbrLns|Valeur1#0Valeur2#0Valeur3...] ou
[NbrCols, NbrLns|SizeOf(Valeur1), Valeur1|SizeOf(Valeur2), Valeur2|...]
Je pense que la deuxième solution (de ce deuxième paragraphe !) est plus facile à gérer, mais je n'ai pas essayé !

Bonne prog' !
Bestiol.
1
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
18 janv. 2003 à 20:26
Autre solution ci-dessous :

{
Function FileToStringGrid
params in :
StringGrid : référence d'un stringGrid
FileNAme : nom du fichier à partir duquel lire les données}
procedure FileToStringGrid(StringGrid: TStringGrid; 
                                 FileName: String);
var
  F: TextFile;
  Tmp, x, y: Integer;
  TmpStr: string;
begin
  AssignFile(F, FileName);
  Reset(F);
  try
    Readln(F, Tmp);
    StringGrid.ColCount:=Tmp;
    Readln(F, Tmp);
    StringGrid.RowCount:=Tmp;
    for x:=0 to StringGrid.ColCount-1 do
      for y:=0 to StringGrid.RowCount-1 do
      begin
        Readln(F, TmpStr);
        StringGrid.Cells[x,y]:=TmpStr;
      end;
  finally
  CloseFile(F);
  end;
end;

{
procedure StringGridToFile
params in :
StringGrid : référence sur un StringGrid
FileName : nom du fichier de sauvegarde des données contenues dans StringGrid
}
procedure StringGridToFile(StringGrid: TStringGrid; 
                                 FileName: String);
var
  F: TextFile;
  x, y: Integer;
begin
  AssignFile(F, FileName);
  Rewrite(F);
  try
    Writeln(F, StringGrid.ColCount);
    Writeln(F, StringGrid.RowCount);
    for x:=0 to StringGrid.ColCount-1 do
      for y:=0 to StringGrid.RowCount-1 do
        Writeln(F, StringGrid.Cells[x,y]);
  finally
    CloseFile(F);
  end;
end;


Ceci est une variante "light" de la deuxième solution proposée par Bestiol.
May Delphi be with you
1
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
18 janv. 2003 à 20:40
En gros, c'est ma deuxième solution, mais sans mettre la taille de la valeur... Mais si tu souhaites faire un fichier moins gros, ce n'est pas mieux d'utiliser que la tailles des caractères plutôt que la taille par défaut d'une string ?
A moins que DElphi ne réduise automatiquement ??

En tout cas, merci pour l'exemple, DelphiProg !

Bestiol.
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
18 janv. 2003 à 21:26
Bestiol, ta question est tout à fait pertinente.
Dans la solution que j'ai présentée, la taille des chaines est automatiquement ajustée (un mot par ligne).

Je pense que tu fais allusion à des enregistrements de chaines de longueur fixes, utilisés dans les fichiers à accès séquentiel. En effet, dans ce dernier type de fichier, il faut ABSOLUMENT préciser la longueur des chaînes à l'écriture comme à la lecture.

May Delphi be with you
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
18 janv. 2003 à 21:29
Les fichiers avec des enregistrements de longueur fixe sont des fichiers à accès direct et non accès séquentiel comme je l'ai malencontreusement écrit.

L'erreur est humaine...

May Delphi be with you
0
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
19 janv. 2003 à 00:33
Pour compléter le sujet j'ai ajouté un source présentant la méthode de Bestiol. Mais avec une section par colonne, c'est bueacoup plus facile à relire. Le fichier obtenu est un peu gros que celui réalisé avec la méthode de Delphiprog mais ouvert dans un éditeur de texte il est plus facile à lire.

--- :sleepy) Nono40@fr.st :sleepy) ---
Nouveau ---> Nono40.fr.st
0
WinLin Messages postés 86 Date d'inscription dimanche 13 février 2005 Statut Membre Dernière intervention 3 septembre 2007
15 mars 2005 à 22:51
y aurait il moyen de colorier une cellule d'une stringgrid style
stringgrid.color.cells[1,x]:=Red;

fin je sais que ce que j'ai mis comme ligne n'existe pas mais je trouve pas comment faire
c'est pour mettre des ligne en rouge si pas dans le stock et e vert si dansle stock avec un if .... etc etc
ou un case of mais mon probleme c'est de colorier une cellule

merci d'avance

Winlin
0
Rejoignez-nous