darky93
Messages postés42Date d'inscriptionmercredi 8 juin 2005StatutMembreDernière intervention13 octobre 2005
-
29 juin 2005 à 17:01
darky93
Messages postés42Date d'inscriptionmercredi 8 juin 2005StatutMembreDernière intervention13 octobre 2005
-
1 juil. 2005 à 11:44
Jai Réussit à trouver un programme dans lequel il y avait Enregistrer et Ouvrir mais pour une StringGrid. Je lai bidouillé et jai "regroupé" mes vecteurs dans une seule matrice et jobtiens ce code :
procedure TForm1.OuvrirClick(Sender: TObject);
var i,j: integer;
var ch: string;
var Fichier: TextFile;
begin
OpenDialog1.InitialDir:=ExtractFileDir(ParamStr(0));
if OpenDialog1.Execute then
begin
AssignFile(Fichier,OpenDialog1.FileName);
Reset(Fichier);
Readln(Fichier,ch);
Readln(Fichier,ch);
n:=StrToInt(ch);
SetLength(matrice,n,n);
for i:=0 to n-1 do
begin
readln(Fichier,ch);
j:=0;
while(Pos(chr(9),ch))>0 do
begin
matrice[j,i]:=StrToInt(Copy(ch,1,Pos(chr(9),ch)-1));
delete(ch,1,pos(chr(9),ch));
inc(j);
end;
matrice[j,i]:=StrToInt(ch);
end;
CloseFile(Fichier);
end;
Affichage;
end;
procedure TForm1.EnregistrerClick(Sender: TObject);
var i,j:Integer;
var ch:string;
var Fichier : TextFile;
begin
SaveDialog1.InitialDir:=ExtractFileDir(ParamStr(0));
if SaveDialog1.Execute then
begin
AssignFile(Fichier,SaveDialog1.FileName);
Rewrite(Fichier);
ch:='n=';
writeln(Fichier,ch);
ch:=IntToStr(n);
writeln(Fichier,ch);
for i:=0 to n-1 do
begin
ch:='';
for j:=0 to n-1 do
begin
ch:=ch+IntToStr(matrice[j,i])+chr(9);
end;
delete(ch,length(ch),1);
writeln(Fichier,ch);
end;
CloseFile(Fichier);
end;
end;
Je voudrais savoir sil y est possible d'alléger ce code, davoir tab|tab entre les chiffres du fichier enregistré à la place de tab et bien sur de pouvoir le rouvrir.
Mais le plus important, je voudrais savoir si il est possible denregistrer et douvrir "létat" dun checkbox sur ce fichier texte
Ah oui et je voudrais aussi savoir comment faire pour avoir 'n=' avec le chiffre à côté et pouvoir l'ouvrir
moldov
Messages postés165Date d'inscriptionmercredi 8 octobre 2003StatutMembreDernière intervention10 novembre 2008 29 juin 2005 à 22:23
Salut,
Alors je sais pas si je vais pouvoir repondre a tous mais deja pour
ouvrir un fichier texte, tu peux le stocker dans un TStringGrid comme
ca le chargement est beaucoup mieux.
Ex
procedure
TForm1.OuvrirClick(Sender:
TObject);
var
i,j:
integer;
var ch: string;
var
slFichier: TStringList;
begin
OpenDialog1.InitialDir:= ExtractFileDir(ParamStr(0));
if OpenDialog1.Execute then
begin
slFichier := TStringList.Create;
slFichier.LoadFromFile(OpenDialog1.FileName); // A partir de ce moment tout tes lignes de ton fichier texte sont dans le TStringList
n:=StrToInt(slFichier[i]);
SetLength(matrice,n,n);
for i:=0 to n-1 do
begin
ch := slFichier[i];
j:=0;
while(Pos(chr(9),ch))>0 do
begin
Voila ca doit faire un truc comme ca, par contre ne fait pas un copier
coller directement car j'ai fait ca vite fais, j'ai pas etster si
c'était bon mais je pense que c'est dans le genre .
alors pour ta dernière question je vois pas trop ce que tu veux dire
mais d'apres ce que j'ai compris je dirais une truc dans le genre
darky93
Messages postés42Date d'inscriptionmercredi 8 juin 2005StatutMembreDernière intervention13 octobre 2005 30 juin 2005 à 09:50
Je ne my connais pas assez en programmation, "il" me dit quil y a des erreurs (en rouge), jai essayé de les corriger (en bleu), mais ça ne marche pas !
procedure TForm1.OuvrirClick(Sender: TObject);
var i,j: integer;
var ch: string;
var slFichier: TStringList;
begin
OpenDialog1.InitialDir:=ExtractFileDir(ParamStr(0));
if OpenDialog1.Execute then
begin
slFichier := TStringList.Create;
slFichier.LoadFromFile(OpenDialog1.FileName); // A partir de ce moment tout tes lignes de ton fichier texte sont dans le TStringList
n:=StrToInt(slFichier[i] ); {la variable 'i' n'est peut être pas initialisée} {La j'ai mis slFichier[0] et je n'ai plus le message}
SetLength(matrice,n,n);
for i:=0 to n-1 do
begin
ch := slFichier[i];
j:=0;
while(Pos(chr(9),ch))>0 do
begin
matrice[j,i]:=StrToInt(Copy(ch,1,Pos(chr(9),ch)-1));
delete(ch,1,pos(chr(9),ch));
inc(j);
end;
matrice[j,i]:=StrToInt(ch);
end;
slFichier.free;
end;
Affichage;
end;
procedure TForm1.EnregistrerClick(Sender: TObject);
var i,j:Integer;
var ch:string;
var slFichier: TStringList;
begin
SaveDialog1.InitialDir:=ExtractFileDir(ParamStr(0));
if SaveDialog1.Execute then
begin
slFichier := TStringList.Create;
AssignFile(Fichier,SaveDialog1.FileName); {Identificateur non déclaré: 'Fichier'} {Ici j'ai remplacé les "Fichier" par "slFichier"}
Rewrite(Fichier); {Types incompatibles} {Et la je me retrouve avec deux messages: Types incompatibles}
ch:='n=';
slFichier.Add(ch);
ch:=IntToStr(n);
slFichier.Add(
ch);
for i:=0 to n-1 do
begin
ch:='';
for j:=0 to n-1 do
begin
ch:=ch+IntToStr(matrice[j,i])+chr(9);
end;
delete(ch,length(ch),1);
Petite question après le fichier on peut l'ouvrir avec le Bloc-notes
(Ce que j'essaye de faire avec "tab|tab" c'est d'aligner correctement les colonnes dans le fichier texte, car j'ai remarqué que si l'un des nombres dépasse la valeur d'une tabulation, les autres nombres de la ligne ce retrouvent décalés et ça devient illisible )
moldov
Messages postés165Date d'inscriptionmercredi 8 octobre 2003StatutMembreDernière intervention10 novembre 2008 30 juin 2005 à 10:37
procedure
TForm1.OuvrirClick(Sender:
TObject);
var
i,j:
integer;
var ch: string;
var
slFichier: TStringList;
begin
OpenDialog1.InitialDir:=ExtractFileDir(ParamStr(0));
if OpenDialog1.Execute then
begin
slFichier := TStringList.Create;
slFichier.LoadFromFile(OpenDialog1.FileName); // A partir de ce
moment tout tes lignes de ton fichier texte sont dans le TStringList
n:=StrToInt(slFichier[i] ); {la variable 'i' n'est peut être pas initialisée} {La j'ai mis slFichier[0] et je n'ai plus le message}
// ici la variable i remplace le numero de ta ligne que tu veux lire, si tu veux tu peux m'envoyer le projet our que je regarde
SetLength(matrice,n,n);
for i:=0 to n-1 do
begin
ch := slFichier[i];
j:=0;
while(Pos(chr(9),ch))>0 do
begin
procedure TForm1.EnregistrerClick(Sender: TObject);
var i,j:Integer;
var ch:string;
var slFichier: TStringList;
begin
SaveDialog1.InitialDir:=ExtractFileDir(ParamStr(0));
if SaveDialog1.Execute then
begin
slFichier := TStringList.Create;
ch:='n=';
slFichier.Add(ch);
ch:=IntToStr(n);
slFichier.Add(
ch);
for i:=0 to n-1 do
begin
ch:='';
for j:=0 to n-1 do
begin
ch:=ch+IntToStr(matrice[j,i])+chr(9);
end;
delete(ch,length(ch),1);
darky93
Messages postés42Date d'inscriptionmercredi 8 juin 2005StatutMembreDernière intervention13 octobre 2005 30 juin 2005 à 11:41
Il y a un problème avec le LoadMatrice et quand je l'enlève seul enregistrer "marche" mais le fichier texte est écrit dans une langue bizard, en gros il est illisible!
florenth
Messages postés1023Date d'inscriptiondimanche 1 août 2004StatutMembreDernière intervention17 août 20083 30 juin 2005 à 12:06
Tu as déjà réussi a te servir de SaveMatrice ... j'en suis déjà content !
D'ou vient-il ce problème dans LoadMatrice() ?? J'ai fait des tests et chez moi, ça marche.
Sinon, c'est normal que tu ne puisses rien lire: ce sont des donnéées
"brutes" mais Delphi, lui, arrive a les relire. En fait, tout est codé
en binaire (Ca prend moins de place).
Si tu veux vraiment pouvoir le relire, utilise un TInifile mais je n'en vois pas l'intéret.
@ ++
Flo
Si tu ne te plantes pas ......
tu ne poussera jamais
darky93
Messages postés42Date d'inscriptionmercredi 8 juin 2005StatutMembreDernière intervention13 octobre 2005 30 juin 2005 à 13:33
Quand je mets LoadMatrice en place il me marque "La déclaration de 'LoadMatrice' diffère de la déclaration précédente" alors que c'est la même!
Et au niveau de LoadMatrice(Matrice,OpenDialog1.FileName); et de SaveMatrice(Matrice,SaveDialog1.FileName); il me marque "Types incompatibles", alors que si j'enlève tous les LoadMatrice je n'est plus aucun message d'erreur!
Par contre il faut absolument que l'utilisateur puisse ouvrir le fichier qu'il a créé avec le Bloc-notes ou autres et qu'il soit lisible!
darky93
Messages postés42Date d'inscriptionmercredi 8 juin 2005StatutMembreDernière intervention13 octobre 2005 30 juin 2005 à 17:18
La il ny a plus rien qui fonctionne, et en plus je me suis trompé de code même s'il est proche de celui que mis au début!
Comme je ne peut pas mettre mon projet principal ("top secret" vive l'industrie ) jai fait un mini projet ou je peut faire mes tests et le passer sans abîmer le principal et me faire taper sur les doigts.
Le code de ce mini projet ressemble à (je nai pas tout mis):
public
{ Déclarations publiques }
Vecteur: array of Integer;
VPlus10: array of Integer;
matrice: array [0..1] of array of Integer; {Normalement c'est Double, mais ça change pas grand chose!}
n:Integer;
procedure InitialiseCalculs;
procedure Affichage;
procedure StockageMatrice;
procedure AffectationVecteurs;
end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.StockageMatrice;
var i:Integer;
begin
for i:=0 to 1 do
begin
SetLength(matrice[i],n);
end;
for i:=0 to n-1 do
begin
matrice[0,i]:=Vecteur[i];
matrice[1,i]:=VPlus10[i]; {VPlus10[i]=Vecteur[i]+10 normalement les calculs sont plus compliqués, mais bon c'est juste pour un test!}
end;
end;
procedure TForm1.AffectationVecteurs;
var i:Integer;
begin
SetLength(Vecteur, n);
SetLength(VPlus10, n);
for i:=0 to n-1 do
begin
Vecteur[i]:=matrice[0,i];
VPlus10[i]:=matrice[1,i];
end;
end;
procedure TForm1.InitialiseCalculs;
var i:Integer;
begin
n:=0;
SetLength(Vecteur, n);
SetLength(VPlus10, n);
EdResultat.Text:='0';
EdNombre.Text:='0';
EdResultat10.Text:='0';
EdInc.Text:='1';
EdVoir.Clear;
EdSaisie.Clear;
EdNumero.Clear;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
InitialiseCalculs;
Affichage;
end;
procedure TForm1.BtMemoriserClick(Sender: TObject);
var a,i,j:Integer;
begin
if StrToInt(EdInc.Text)=1 then
begin
Inc(n);
SetLength(Vecteur, n);
SetLength(VPlus10, n);
Vecteur[n-1]:=StrToInt(EdSaisie.Text);
VPlus10[n-1]:=StrToInt(EdSaisie.Text)+10;
EdNombre.Text:=IntToStr(n);
EdSaisie.Clear;
EdVoir.Clear;
EdNumero.Clear;
Affichage;
end
else if StrToInt(EdInc.Text)=0 then
begin
Showmessage('Opération Impossible');
end
else
begin
a:=n+StrToInt(EdInc.Text);
SetLength(Vecteur, a);
SetLength(VPlus10, a);
for i:=0 to 1 do
begin
SetLength(matrice[i],a);
end;
for i:=n-1 to (a-1) do
begin
Vecteur[i]:=StrToInt(EdSaisie.Text);
VPlus10[i]:=StrToInt(EdSaisie.Text)+10;
end;
n:=a;
for j:=0 to n-1 do
begin
matrice[0,j]:=Vecteur[j];
matrice[1,j]:=VPlus10[j];
end;
EdNombre.Text:=IntToStr(n);
EdSaisie.Clear;
EdVoir.Clear;
EdNumero.Clear;
Affichage;
end;
end;
Procedure TForm1.Affichage;
var i,j:Integer;
begin
GridVecteur.ColCount:=n;
if n<>0 then
begin
for i:=0 to GridVecteur.ColCount-1 do
begin
GridVecteur.Cells[i,0]:=FloatToStr(Vecteur[i]);
GridVecteur.Cells[i,1]:='n°'+IntToStr(i+1);
end;
end
else
begin
GridVecteur.Cells[0,0]:='';
GridVecteur.Cells[0,1]:='';
end;
end;
...
procedure TForm1.OuvrirClick(Sender: TObject);
var i,j: integer;
var ch: string;
var Fichier: TextFile;
begin
OpenDialog1.InitialDir:=ExtractFileDir(ParamStr(0));
if OpenDialog1.Execute then
begin
AssignFile(Fichier,OpenDialog1.FileName);
Reset(Fichier);
Readln(Fichier,ch);
Readln(Fichier,ch);
n:=StrToInt(ch);
for i:=0 to 1 do
begin
SetLength(matrice[i],n);
end;
for i:=0 to 1 do
begin
readln(Fichier,ch);
j:=0;
while(Pos(chr(9),ch))>0 do
begin
matrice[i,j]:=StrToInt(Copy(ch,1,Pos(chr(9),ch)-1));
delete(ch,1,pos(chr(9),ch));
inc(j);
end;
matrice[i,j]:=StrToInt(ch);
end;
CloseFile(Fichier);
end;
AffectationVecteurs;
Affichage;
for i:=0 to 1 do
begin
SetLength(matrice[i],0);
end;
end;
procedure TForm1.EnregistrerClick(Sender: TObject);
var i,j:Integer;
var ch:string;
var Fichier : TextFile;
begin
StockageMatrice;
SaveDialog1.InitialDir:=ExtractFileDir(ParamStr(0));
if SaveDialog1.Execute then
begin
AssignFile(Fichier,SaveDialog1.FileName);
Rewrite(Fichier);
ch:='n=';
writeln(Fichier,ch);
ch:=IntToStr(n);
writeln(Fichier,ch);
for i:=0 to 1 do
begin
ch:='';
for j:=0 to n-1 do
begin
ch:=ch+IntToStr(matrice[i,j])+chr(9);
end;
delete(ch,length(ch),1);
writeln(Fichier,ch);
end;
CloseFile(Fichier);
end;
for i:=0 to 1 do
begin
SetLength(matrice[i],0);
end;
end;
...
end.
La avec ce code le problème c'est la mise en page!
Et en plus mon boss vient de me dire qu'il pouvoir enregistrer les résultats (ce sont des matrices) en format Excel
darky93
Messages postés42Date d'inscriptionmercredi 8 juin 2005StatutMembreDernière intervention13 octobre 2005 1 juil. 2005 à 11:44
Je voudrais vous remercier de m?avoir aidé et surtout m'excusé de vous avoir fait travaillé pour "rien" (ça me servira quand même pour mes projets perso)!
Explication : Vue que je suis obligé d'enregistrer en format Excel les résultats on m?a dit : "Te fais pas chier enregistre tout (données+résultats) en format xls."
Résultat on m?a donné des documents et une source sur le pilotage d'Excel par ole et la tout fonctionne.