Enregistrer données d'un StringGrid dans un fichier

Signaler
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
-
WinLin
Messages postés
86
Date d'inscription
dimanche 13 février 2005
Statut
Membre
Dernière intervention
3 septembre 2007
-
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

Messages postés
871
Date d'inscription
dimanche 6 janvier 2002
Statut
Membre
Dernière intervention
3 novembre 2005
1
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.
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
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
Messages postés
871
Date d'inscription
dimanche 6 janvier 2002
Statut
Membre
Dernière intervention
3 novembre 2005
1
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.
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
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
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
26
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
Messages postés
962
Date d'inscription
mercredi 3 avril 2002
Statut
Membre
Dernière intervention
12 septembre 2006
1
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
Messages postés
86
Date d'inscription
dimanche 13 février 2005
Statut
Membre
Dernière intervention
3 septembre 2007

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