Autor Beitrag
DiamondDog
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 460



BeitragVerfasst: Mi 29.04.09 11:11 
Hallo Leute,
also ich hab da folgendes Problem und zwar habe ich in meiner ini eine User Liste:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
[Anzahl]
Anzahl=4

[User1]
Username=Name1
Passwort=PW1

[User2]
Username=Name2
Passwort=PW2

[User3]
Username=Name3
Passwort=PW3

[User4]
Username=Name4
Passwort=PW4
Mein Problem ist jetzt das wenn ich einen userer gelöscht habe, ja eine Zahl fehlt und deswegen will ich alle [User] dann neu durchnumerieren. Leider hab ich keine Ahnung wie ich das anstellen kann. Wäre super wenn mir da jemand bei Helfen könnte.

PS: Die Anzahl gibt immer an wieviele User in der Ini stehen. Sie wird nach dem löschen natürlich um 1 verringert. Wenn das Helfen sollte für das neu nummerieren.

Danke schon mal

Mfg Dog
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 480

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 29.04.09 11:16 
Ich glaube, da hilft nur eines: Datei komplett neu schreiben. D.h. Userliste in eine geeignete Struktur einlesen (Array of Record, TObjectlist) Änderungen auf dieser Struktur durchführen und dann die Ini komplett neu schreiben.
Außerdem wäre es wahrscheinlich sinnvoll, sich ein anderes Format zum Speichern der Daten zu überlegen. Inis sind für solche Zwecke eher ungeeignet.

_________________
We are, we were and will not be.
DiamondDog Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 460



BeitragVerfasst: Mi 29.04.09 11:25 
Ich hab jetzt mal n bischen gegoogelt und das hier gefunden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
uses IniFiles;

function RenameIniSection(IniFile: TIniFile;OldSection,NewSection: String): boolean;
var
  ini: TStringList;
  ind: Integer;
begin
  result := false;
  ini := TStringList.Create;
  ini.LoadFromFile(IniFile.FileName);
  if(ini.Count > 0then
  begin
    ind := ini.IndexOf('['+OldSection+']');
    if(ind <> -1then
      if ini.indexOf('['+NewSection+']') < 0 then
      begin
        ini.Strings[ind] := '['+NewSection+']';
        result := true;
      end;
      ini.SaveToFile(IniFile.FileName);
  end;
end;
Könnte man das nicht so machen dann man die Zahl die gelöscht wird dann zwischen speichert als integer und dann die Zahl +1 rechnen und dann ab da alles - 1 rechnen? Hoffe das man meiner Ausführung folgen kann *gg*
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 480

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 29.04.09 11:30 
Joah, das ist auch eine Methode, die Datei komplett neu zu schreiben. Laufzeit: Quadratisch. Laufzeit meiner Idee (beim Löschen eines Users): Linear.
user profile iconDiamondDog hat folgendes geschrieben Zum zitierten Posting springen:
Könnte man das nicht so machen dann man die Zahl die gelöscht wird dann zwischen speichert als integer und dann die Zahl +1 rechnen und dann ab da alles - 1 rechnen? Hoffe das man meiner Ausführung folgen kann *gg*
Ja, kann man machen. Aber elegant ist was anderes. ;-)

_________________
We are, we were and will not be.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 29.04.09 11:36 
Etwas schneller (und vor allem sauberer) geht's so (mit dem Umbennen):

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
uses IniFiles;

function RenameIniSection(IniFile: TIniFile; OldSection, NewSection: String): boolean;
var
  ini: TStringList;
  ind: Integer;
begin
  result := false;
  ini := TStringList.Create;
  try
    ini.LoadFromFile(IniFile.FileName);
    if(ini.Count > 0then
    begin
      ind := ini.IndexOf('['+OldSection+']');
      if(ind <> -1then
        if ini.indexOf('['+NewSection+']') < 0 then
        begin
          ini.Strings[ind] := '['+NewSection+']';
          ini.SaveToFile(IniFile.FileName);
          result := true;
        end;
    end;
  finally
    FreeAndNil(ini);
  end;
end;

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
thepaine91
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: Mi 29.04.09 11:41 
Ich hatte folgendes im Kopf:

Und zwar die Daten in einen Array zu speichern. Und dann die Ini neu Schreiben lassen vom Programm die Anzahl hättest du dann mit length() und Array[i] hättest du mit i die Usernummerrierung.
Wenn das so verständlcih ist.
ja ich gebe zu ich hab eine schäwche für arrays :D
DiamondDog Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 460



BeitragVerfasst: Mi 29.04.09 11:47 
Kann mir mal schnell einer sagen wie ich die RenameIniSection aufrufe? Bin gerade einwenig neben der Spur. Danke.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10184
Erhaltene Danke: 1259

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 29.04.09 11:53 
Moin!

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
[User]
Count=2
User1Name=ich
User1Tel=1234
User2Name=Du
User2Tel=5678
Vor dem Schreiben ein .EraseSection('User');, fertig. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
DiamondDog Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 460



BeitragVerfasst: Mi 29.04.09 12:08 
Habs mit der BenBE hinbekommen.
Bestend Danke an alle fürs Helfen.
thepaine91
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 763
Erhaltene Danke: 27

Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
BeitragVerfasst: Mi 29.04.09 12:11 
Narses :P da kommt jeder mit hoch komplizierten Vorschlägen und du löst es mir einer Zeile :D aber gefällt mir falls ich das mal brauchen sollte :P