Avatar billede safl Nybegynder
18. marts 2007 - 21:59 Der er 7 kommentarer og
1 løsning

Inifiler uden sections

Hey,

Jeg har brug for at kunne læse/skrive til inifil lignende filer. Jeg har prøvet at bruge "Inifiles" til dette formål men dette virker ikke da de filer jeg manipulerer ikke har nogle sections...

jeg har filer med dette indhold:

Server=xxx
Hostname=yyy
ListenPort=zzz

Der er ingen sections og der er ikke mulighed for at tilføje sections... er der nogle der har en god ide til hvordan jeg så manipulerer disse filer?
Avatar billede snowball Novice
18. marts 2007 - 22:23 #1
Så er det nemmeste nok at læse filen ind i en TStringList.

----------------------------------------------------------

procedure TForm1.BLoadClick(Sender: TObject);
var
  SList: TStringList;
  i, tmpPos, tmpLength: Integer;
begin
  SList := TStringList.Create;
  SList.LoadFromFile('config.txt');
  For i := 0 To SList.Count -1 Do Begin
    tmpPos := Pos('=',SList.Strings[i]) + 1;
    tmpLength := Length(SList.Strings[i]) + 1;
    If Pos('Server',SList.Strings[i]) > 0 Then
      Edit1.Text := Copy(SList.Strings[i],tmpPos,tmpLength-tmpPos)
    Else If Pos('Hostname',SList.Strings[i]) > 0 Then
      Edit2.Text := Copy(SList.Strings[i],tmpPos,tmpLength-tmpPos)
    Else If Pos('ListenPort',SList.Strings[i]) > 0 Then
      Edit3.Text := Copy(SList.Strings[i],tmpPos,tmpLength-tmpPos);
  End;
  SList.Free;
end;

procedure TForm1.BSaveClick(Sender: TObject);
var
  SList: TStringList;
  i, tmpPos: Integer;
begin
  SList := TStringList.Create;
  SList.LoadFromFile('config.txt');
  For i := 0 To SList.Count -1 Do Begin
    tmpPos := Pos('=',SList.Strings[i]);
    If Pos('Server',SList.Strings[i]) > 0 Then
      SList.Strings[i] := Copy(SList.Strings[i],0,tmpPos) + Edit1.Text
    Else If Pos('Hostname',SList.Strings[i]) > 0 Then
      SList.Strings[i] := Copy(SList.Strings[i],0,tmpPos) + Edit2.Text
    Else If Pos('ListenPort',SList.Strings[i]) > 0 Then
      SList.Strings[i] := Copy(SList.Strings[i],0,tmpPos) + Edit3.Text
  End;
  SList.SaveToFile('config.txt');
  SList.Free;
end;

----------------------------------------------------------

Det er muligt det kan gøres lidt mere elegant  - især hvis der skal bygges flere felter på ;)
Avatar billede safl Nybegynder
18. marts 2007 - 22:45 #2
Jeg har det fint med at det virker i første omgang :)
Takker!
Avatar billede kroning Nybegynder
18. marts 2007 - 22:48 #3
Vil da lige nævne at TStringList har funktioner til at håndtere Navn=Value linier så alt det snowball skriver er slet ikke nødvendig:

Det kan gøres ganske enkelt således:

var
    StringList : TStringLIst;
  Server : string;
begin
    StringList:=TStringLIst.Create;
  StringList.LoadFromFile('Dinfil.txt');
    Server:=StringList.Values['Server'];

Kik også på funktionerne ValueFromIndex, IndexOf og IndexOfName.
Avatar billede kroning Nybegynder
18. marts 2007 - 22:51 #4
Skal også lige nævne at hvis du vil sætte en værdi gør du det således:

StringList.Values['Server']:='En ny værdi';

ganske enkelt.
Avatar billede snowball Novice
18. marts 2007 - 22:54 #5
Tænkte nok der var en (meget) nemmere måde at gøre det på :)

procedure TForm1.BLoadClick(Sender: TObject);
var
  SList: TStringList;
begin
  SList := TStringList.Create;
  SList.LoadFromFile('config.txt');

  Edit1.Text := SList.Values['Server'];
  Edit2.Text := SList.Values['Hostname'];
  Edit3.Text := SList.Values['ListenPort'];

  SList.Free;
end;

procedure TForm1.BSaveClick(Sender: TObject);
var
  SList: TStringList;
begin
  SList := TStringList.Create;
  SList.LoadFromFile('config.txt');

  SList.Values['Server'] := Edit1.Text;
  SList.Values['Hostname'] := Edit2.Text;
  SList.Values['ListenPort'] := Edit3.Text;

  SList.SaveToFile('config.txt');
  SList.Free;
end;

kroning: Skal vi dele pointene? :)
Avatar billede kroning Nybegynder
18. marts 2007 - 23:21 #6
Nej tak :-)
Avatar billede snowball Novice
18. marts 2007 - 23:29 #7
OK. Du skulle have buddet eftersom du kom med en bedre løsning :)
Avatar billede safl Nybegynder
19. marts 2007 - 09:11 #8
Hey Kroning, takker for super input! Fedt at du ikke er motiveret af pointene.
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