Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Mehrere Namen In IniFile speichern (https://www.delphipraxis.net/77587-mehrere-namen-inifile-speichern.html)

DJAYS 21. Sep 2006 14:49


Mehrere Namen In IniFile speichern
 
hallo,
ich habe ein Testprogram geschrieben.Es ist so dass,wenn man das program startet dann öffnet sich ein fenster wo man sein UserName und Firma eintragen muss.ich speichere diese Daten in einem IniFile.Mein problem ist:jedes mal das ich ein Name eintrage,wird der vorherige Name überschrieben.wie kann ich machen,dass diese Namen drin bleiben?
diese namen laden ich später in einem Editfeld.kann den Editfeld sich diese namen merken?
danke

mr47 21. Sep 2006 15:03

Re: Mehrere Namen In IniFile speichern
 
Nein, dein Editfeld hat nur während der Laufzeit einen Speicherbereich im Arbeitsspeicher, der beim Beenden gelöscht wird. Also musst du Daten die du länger haben willst mit dem Dateisystem speichern.
Wenn du mehrere Werte in einer INI-Datei speichern willst, musst du verschiede Bezeichner verwenden

[section]
bez1=Firma1
bez2=Firma2
bez3=Firma3


usw....


gruß mr47

panzerfischer 21. Sep 2006 15:08

Re: Mehrere Namen In IniFile speichern
 
das liegt daran, das eine ini file nur da ist um einzelne variablen zu speichern, und nicht konkrete listen.

mein tip, verwende eine TStringlist als variable, wo die user daten reinkommen, durch ';' getrennt (oder ähnlichem) die kann man mit einfachen befehlen speichern und auslesen

Delphi-Quellcode:
var sl: TStringlist;
Delphi-Quellcode:
Begin
...
sl:=TStringlist.create;
sl.loadfromfile('liste.txt');
..
sl.append(user+';'+firma);
..
sl.savetofile('liste.txt');
sl.free;
..
end;
die listen kann man auch relativ gut sortieren lassen, aber das wirst du selbst herausfinden

natürlich muss die datei am anfang vorhanden sein, sonst kannst du sie nicht öffnen

DJAYS 21. Sep 2006 15:43

Re: Mehrere Namen In IniFile speichern
 
hallo Panzerfisxcher
[try
Ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+ '\IniFiles\' + 'Informationen.ini');
Ini.WriteString('TESTINFOS', 'Pruefer', Ed_Benutzername.Text);
finally
Ini.Free;
end;

try
Ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+ '\IniFiles\' + 'Informationen.ini');
Ini.WriteString('TESTINFOS', 'Pruefer', Ed_Company.Text);
finally
Ini.Free;
end;

]
danke für deine Idee,aber ich verstehe ,das mit TStringlist nicht genau.so sieht mein Quellcode aus.
[Testinfos]
Name = Wolf
Firma= MMc

könntest du mir bitte mehr erklären,was du meinst?
danke

panzerfischer 21. Sep 2006 16:18

Re: Mehrere Namen In IniFile speichern
 
also prinzipiell kannst du zum speichern auch ne ini datei verwenden, ist halt nur mehr aufwandt (finde ich)
sollte dann ca so aussehen

Delphi-Quellcode:

type info = record user,company,entry:String[255];end;
var testinfo:array[0..100] of info;

...

for i:=0 to usermax do begin

  try
    ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+ '\IniFiles\' + 'Informationen.ini');
    Ini.ReadString(testinfo[i].entry, 'Name', Testinfo[i].user);
    Ini.ReadString(testinfo[i].entry, 'Firma', Testinfo[i].company);
  finally
    Ini.Free;
  end;

end;

..
bzw zum schreiben:
Delphi-Quellcode:
for i:=0 to usermax do begin

  try
    ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+ '\IniFiles\' + 'Informationen.ini');
    Ini.WriteString(testinfo[i].entry, 'Name', Testinfo[i].user);
    Ini.WriteString(testinfo[i].entry, 'Firma', Testinfo[i].company);
  finally
    Ini.Free;
  end;

end;
oder du machst das mit ner Stringlist,
Delphi-Quellcode:
type info = record user,company:String[255];end;
var testinfo:array of info;
    sl:TStringlist;
..
sl:=TStringlist.create;
sl:=loadfromfile('{Pfad/Dateiname}');
setlength(testinfo,sl.count-1);
...

for i:=0 to sl.count-1 do begin                       //lesen
  testinfo[i].user:=copy(sl[i],1,pos(';',sl[i])-1);
  testinfo[i].company:=copy(sl[i],pos(';',sl[i])+1,length(sl[i])-pos(';',sl[i])-1);
end;

{lass dich von dem ganzen zeug nicht irritieren, das nur zum unterscheiden zw. name und firma (also einmal text bis zum semikolen, bzw. von da bis zum ende}
     
..
sl.clear;                                             //bzw schreiben
for i:=0 to usermax do
  sl.append(testinfo[i].user+';'+testinfo[i].company);

sl.savetofile('{Pfad/Dateiname}');

...
in beiden varianten hast du nun die liste der namen und firmen in nem array stehen, lediglich das dateiformat unterscheidet sich, die Stringlist file sieht wie folgt aus:

name1;firma1
name2;firma2
name2;firma3

und die inifile:

[Testinfo[1].entry]
Name = name1
Firma= firma1

[Testinfo[2].entry]
Name = name2
Firma= firma2

[Testinfo[3].entry]
Name = name3
Firma= firma3

was du im endeffekt nimmst ist egal, die version mit der TStringlist hat den vorteil, das du das array nicht beschränken musst (dynamic array) , bei der inifile weißt du nicht im vornherein, wieviele einträge drinne stehen.

noch ne idee wäre das in ner data file zu speichern, du deklarierst deine einträge in nem record und speicherst das record in ne *.dat datei, mit der kannste auch arbeiten, musst dich aber ein bissel reinfuchsen, funnzt aber auch mit normalen pascal, also das ist so die grundlage schlecht hin, aber nicht sehr benutzerfreundlich, und die datei ist im endeffekt schlecht gegliedert und kann schlecht bearbeitet werden


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz