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.
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;
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'
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!
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;
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 :)
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;
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.