Avatar billede flyboy Nybegynder
16. juni 2005 - 21:07 Der er 16 kommentarer og
1 løsning

Gem Edit?

Hejsa.

Jeg vil gerne kunne gemme talene fra en edit-boks i en fil, hvor jeg kan åbne filen igen med tallet, og lægge noget mere til, hvorefter jeg så kan gemme det nye tal, som så bliver åbnet næste gang osv...
men jeg kan ikke finde ud af hvordan man kan gemme den i en fil ved at trykke på en knap, hvorefter tallet så bliver overskrevet af det nye...

hvordan vil det hele se ud?

Jeg er lidt af en newbee. så lidt tekst ville være dejligt :-)

Mvh.
FlyBoy
Avatar billede kroning Nybegynder
16. juni 2005 - 21:14 #1
Skal tallene gemmes som tekst dvs. i en .txt fil, eller binær f.eks. en du kalder .dat ?
Avatar billede kroning Nybegynder
16. juni 2005 - 21:23 #2
Her er en der gemme i en text fil:

procedure GemTal(Tal : string);
var
    fil : text;
begin
    AssignFile(fil,'minfil.txt');
    if FileExists('minfil.txt') then
      Append(fil)
  else
      Rewrite(fil);
    Writeln(fil,Tal);
  Close(fil);
end;

-------
har du en Edit1 gemmes den sådan:

GemTal(Edit1.text);
Avatar billede kroning Nybegynder
16. juni 2005 - 21:25 #3
Eller skal tallet der er i forvejen ligges til den nye tal således at der hele tiden kun er et tal i filen? Har været tidlig oppe :-)
Avatar billede flyboy Nybegynder
16. juni 2005 - 22:20 #4
det skal være på den måde, at når jeg har et tal fra filen som er åbnet i edit1, og har et andet tal fra edit2, hvor jeg så trykker på knappen. skal tallet fra edit1 og 2 lægges sammen, og når jeg så trykker på en knap for at gemme det nye tal, skal det gamle tal slettes og det nye tal som lige er regnet ud, gemmes i stedet for. Sådan så næste gang jeg loader filen igen, bliver det det nye tal som bliver åbnet, og noget nyt bliver lagt til igen osv...

Angående hvad fil det skal være ved jeg ikke hvad er bedst. Det skal bare være den nemmeste måde at lægge 2 og 2 sammen...
Avatar billede flyboy Nybegynder
16. juni 2005 - 22:29 #5
F.eks. test.txt bliver loadet i edit1. hvorefter der bliver trykket på en knap hvor regnestykket sker: edit1 + edit1(et andet tal) = edit3. Herefter bliver der trykket på endnu en knap hvor Edit3 bliver gemt i test.txt og overskriver alt i filen.
Næste gang test.txt bliver åbnet, vil det nye tal blive åbnet i edit1.
Og på den måde kører det hele...
Avatar billede flyboy Nybegynder
16. juni 2005 - 23:52 #6
Og hvordan vil proceduren for at åbne filen igen se ud?
Avatar billede kroning Nybegynder
17. juni 2005 - 10:10 #7
function HentTal : string;
var
  fil : text;
begin
  AssignFile(fil,'minfil.txt');
  if not FileExists('minfil.txt') then
    Result:='0'
  else
  begin
  Reset(fil);
    Readln(fil,result);
    Close(fil);
  end;
end;

procedure GemTal(Tal : string);
var
  fil : text;
begin
  AssignFile(fil,'minfil.txt');
  Rewrite(fil);
  Writeln(fil,Tal);
  Close(fil);
end;
-----------

Her hentes tal og puttes i Edit1:
Edit1.Text:=HentTal;

Her ligges Edit1 og Edit2 sammen og puttes i Edit3:
Edit3.Text:=FloatToStr(StrToFloatDef(Edit1.Text,0)+StrToFloatDef(Edit2.Text,0));

Her gemmes Edit3 i filen:
GemTal(Edit3.Text);
Avatar billede kroning Nybegynder
17. juni 2005 - 12:01 #8
Men hvis der ikke er andet der skal gemmes og der ikke skal flyttes mellem computere så ville jeg nok vælge at gemme i reg. basen.
Eller hvis der er flere ting der skal gemmes så var en ini fil nok bedre.
Avatar billede flyboy Nybegynder
17. juni 2005 - 13:30 #9
okay tak. hvis du lige skriver et "svar" skal du få den fulde belønning :-)
Avatar billede flyboy Nybegynder
17. juni 2005 - 13:39 #10
lige en ting mere....

hvis jeg åbner en fil på følgende måde. hvordan kan jeg så gemme dataene på samme måde. altså hvor det bliver gemt i de linier der?

procedure TForm1.Åben(Sender: TObject);
var
  L : TStringList;
begin
  L := TStringList.Create;
  L.savetofile('Data1.DAT');
  Edit4.Text := L[0];
  Edit1.Text := L[1];
  Edit3.Text := L[2];
  Edit5.Text := L[3];
  Edit7.Text := L[4];
  Edit8.Text := L[5];
  Edit9.Text := L[6];
  Edit10.Text := L[7]; 
  FreeAndNil(L);
end;
Avatar billede flyboy Nybegynder
17. juni 2005 - 13:41 #11
ups... det er denne her jeg bruger:

var
  L : TStringList;

begin
  L := TStringList.Create;
  L.LoadFromFile('Data1.DAT');
  Edit4.Text := L[0];
  Edit1.Text := L[1];
  Edit3.Text := L[2];
  Edit5.Text := L[3];
  Edit7.Text := L[4];
  Edit8.Text := L[5];
  Edit9.Text := L[6];
  Edit10.Text := L[7];

  FreeAndNil(L);
end;
Avatar billede kroning Nybegynder
17. juni 2005 - 15:17 #12
Du vender det bare om, altdså:

L[0]:=Edit4.Text;
L[1]:=Edit1.Text;
L[2]:=Edit3.Text;
L[3]:=Edit5.Text;
osv.

og så til sidst en:
L.savetofile('Data1.DAT');

men hvis din L ikke indeholder x antal linier eller er tom så skal du bruge:

L.Add(Edit4.Text);
L.Add(Edit1.Text);
L.Add(Edit3.Text);
L.Add(Edit5.Text);
osv.

og så til sidst en:
L.savetofile('Data1.DAT');
Avatar billede kroning Nybegynder
17. juni 2005 - 15:21 #13
Nå ja, du kunne også benytte denne hvis du vil være sikker på at den L kun indeholder de linier du lige nu putter ind:

L.Text:=Edit4.text+#13+Edit1.text+#13+Edit3.text+#13+  osv. ;
Avatar billede flyboy Nybegynder
18. juni 2005 - 00:03 #14
Nu bruger jeg denne måde som du sagde.

var
  L : TStringList;
begin
  L := TStringList.Create;
  L.savetofile('Data1.DAT');
  L[0]:= Edit4.Text ;
  L[1]:= Edit1.Text ;
  L[2]:= Edit3.Text ;
  L[3]:= Edit5.Text ;
  L[4]:= Edit7.Text ;
  L[5]:= Edit8.Text ;
  L[6]:= Edit9.Text ;
  L[7]:= Edit10.Text ;

  FreeAndNil(L);
end;

men når jeg prøver at køre programmet siger den:

EstringListError with message "list index out of bounds (0)"

Hvad betyder det? jeg kan ikke få det til at virke..
Avatar billede kroning Nybegynder
18. juni 2005 - 07:51 #15
Som jeg skrev at hvis din L ikke indeholder noget så skal du bruge:

L.Add(Edit4.Text);
osv.

eller
L.Text:=Edit4.text+#13+Edit1.text+#13+Edit3.text+#13+  osv. ;
Avatar billede flyboy Nybegynder
18. juni 2005 - 10:04 #16
det gør de også... jeg har tidligere hentet tal fra lige præcis de linier...
Avatar billede kroning Nybegynder
18. juni 2005 - 16:54 #17
Hvis du har det så bør du ikke få den fejl, prøv at poste noget mere kode.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester