Avatar billede dcgeek Nybegynder
14. juni 2002 - 11:13 Der er 8 kommentarer og
1 løsning

En konfigurationsfil

Jeg har en tekst-fil. I den står der følgende:

blablabla,blablabla,
blablabla,blablabla,
blablabla,blablabla,

Panel1.top  = 432;

blablabla,blablabla,
blablabla,blablabla,

Så har jeg i mit Delphi program en Memo1 og en Panel1. Under min FormCreate() åbner Memo1 conf.txt, altså memo1.lines.loadfromfile('conf.txt');
Den skal nu sætte panel1.top til at være det der står i memo1.text (altså indlæse den værdi der står efter panel1.top =).

Som det ses i conf.txt står der meget andet end lige netop "panel1.top = " og alt det skal den så ignorere, og bare indlæse den værdig der står efter "panel1.top = " som i dette tilfælde er 432 og sætte værdien i en variabel (i : integer).

Jeg søger IKKE nogen links til sider hvor jeg kan finde et færdiglavet project som gør dette. I skal skrive hele kildekoden til et sådan program her og gerne med nogle kommentarer til, hvad der foregår i kildekoden.



Avatar billede hreiff Nybegynder
14. juni 2002 - 12:23 #1
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  memo1.clear;
  memo1.lines.loadfromfile('c:\conf.txt');
  for i := 0 to memo1.lines.count-1 do
    if pos('Panel1.top  = ',memo1.lines[i])=1 then
      panel1.top := StrToInt(copy(memo1.lines[i],15,pos(';',
          memo1.lines[i])-15));
end;
Avatar billede hreiff Nybegynder
14. juni 2002 - 12:34 #2
Henter filen ind i memo1
kigger alle linjer igennem for 'Panel1.top  = '    {hvorfor 2 mellemrum?)
kopierer tallet til Panel1.top  (fra pos 15 til pos(';'-1)

jeg håber at det står ens hver gang - ellers virker det ikke.

PS Hvis du ændrer til:

if pos('Panel1.top',memo1.lines[i])<>0 then
  panel1.top := StrToInt(copy(memo1.lines[i],pos('=',memo1.lines[i])+1,
                pos(';',memo1.lines[i])-pos('=',memo1.lines[i])-1));

er den ikke så følsom med placeringen.

tager alt mellem '=' og ';' i linjen med 'Panel1.top'
Avatar billede hreiff Nybegynder
14. juni 2002 - 12:35 #3
det var et svar.
Avatar billede dcgeek Nybegynder
14. juni 2002 - 13:52 #4
Er det muligt at lave en funktion UdskrivTalMellem();

Således:
var i : integer; s: string;
begin
  s := UdskrivTalMellem('panel1.top =',';',memo1.text);
  i : StrToInt(s);
end;
hvor det sidste argument i funktionen er memo1.text (således jeg også kan lave den om til at den skal tage det fra edit1.text osv).

Kan du lave sådan en funktion? Tror det vil gøre det noget nemmere for mig!
Avatar billede hreiff Nybegynder
14. juni 2002 - 14:02 #5
function TalFraMemo(s: string):integer;
var
  i: integer;
begin
  result := -1
  for i := 0 to memo1.lines.count-1 do
    if pos(s,memo1.lines[i])<>0 then
      result := StrToInt(copy(memo1.lines[i],pos('=',memo1.lines[i])+1,
                pos(';',memo1.lines[i])-pos('=',memo1.lines[i])-1));
end;

begin
  memo1.clear;
  memo1.lines.loadfromfile('c:\conf.txt');
  panel1.top := TalFraMemo('panel1.top');  {returnerer -1 hvis ikke i}
end;
Avatar billede dcgeek Nybegynder
18. juni 2002 - 10:29 #6
Nej, det var nu ikke sådan jeg mente det... kan det laves sådan her:
var s : string;
s := TalFraMemo('Tallet mellem 5',' og 7'); 
panel1.top := strtoint(s);
Og i memo1 står der så:
Tallet mellem 5 6 og 7.
og så bliver panel1.top = 6.
Den skal ikke læse det som et tal, men bare som en string. Så skal jeg nok selv konvertere den til en integer, hvis det er et tal der står der.
Håber det var godt nok formuleret :)
Avatar billede hreiff Nybegynder
18. juni 2002 - 15:14 #7
function TalFraMemo(s,t: string):string;
var
  i: integer;
begin
  result := ''; {tom}
  for i := 0 to memo1.lines.count-1 do
    if pos(s,memo1.lines[i])<>0 then
      result := copy(memo1.lines[i],pos(s,memo1.lines[i])+length(s),
          pos(t,memo1.lines[i])-pos(s,memo1.lines[i])-length(s);
end;

begin
  memo1.clear;
  memo1.lines.loadfromfile('c:\conf.txt');
  panel1.top := StrToInt(Mellem('panel1.top =',';'));
end;
Avatar billede hreiff Nybegynder
18. juni 2002 - 15:19 #8
funktionen skulle selvfølgelig hedde:

Function Mellem(s,t: string):string;
Avatar billede dcgeek Nybegynder
18. juni 2002 - 16:37 #9
Mange tak :)
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