AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Stringgrid in INI file schreiben

Ein Thema von rhodan · begonnen am 25. Apr 2014 · letzter Beitrag vom 26. Apr 2014
Antwort Antwort
Benutzerbild von rhodan
rhodan

Registriert seit: 4. Okt 2005
Ort: Hamburg
150 Beiträge
 
Delphi 7 Personal
 
#1

AW: Stringgrid in INI file schreiben

  Alt 25. Apr 2014, 23:16
hallo!

danke für die hilfe euch allen!
und danke dir popov für deine mühe! ich wette du hast das wie ich dich kenne bei nem Käffchen und nem keks so nebenbei aus dem ärmel geschüttelt ;D

2 fragen habe ich noch...lesen/schreiben funktioniert dank deiner hilfe einwandfrei...ich nutze diesen code nun um während der laufzeit neue columns hinzuzufügen:
Delphi-Quellcode:
var
 Column: Integer;
 NewColumn: Integer;
begin
  StrGrid.ColCount := StrGrid.ColCount + 1;
  for Column := StrGrid.ColCount - 1 downto NewColumn do
    StrGrid.Cols[Column].Assign(StrGrid.Cols[Column - 1]);
  StrGrid.Cols[NewColumn - 1].Text := '';
end;
das klappt auch super..nur wenn ich das programm neu starte und es sind z.bsp zu beginn nur 2 columns da, in der ini aber 7 gespeichert wird nicht alles eingelesen...ich kriege es nicht gebacken beim lesevorgang automatisch so viele columns zu erzeugen wie in der INI stehen so das alle infos eingelesen werden...

2. frage...wenn ich öfter abspeichere und einlese hab ich die erfahrung gemacht das sich "müll" bzw leere zeilen in der ini sammeln, wäre es nicht sinnvoll vor dem schreibvorgang die ini zu leeren/löschen damit sie auf dem aktuellen stand ist? steh da vor dem berg.

danke für eure anteilnahme..auch wenn ich mich freue wenn mir geholfen wird, ich versuche jedesmal daraus zu lernen...dankeschön
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Stringgrid in INI file schreiben

  Alt 25. Apr 2014, 23:25
Du kannst einfach die gesamte Section in der Ini vor dem Speichern entfernen. Dann gibt es die nicht mehr und ist also komplett leer.

Speicherst du denn nicht die Anzahl der Spalten und Zeilen in der Ini?
Auslesen, setzen und dann die Zellwerte eintragen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von rhodan
rhodan

Registriert seit: 4. Okt 2005
Ort: Hamburg
150 Beiträge
 
Delphi 7 Personal
 
#3

AW: Stringgrid in INI file schreiben

  Alt 25. Apr 2014, 23:35
danke sir rufo!
Delphi-Quellcode:
var
 Ini: TIniFile;
begin
 ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'myinifile.ini');
ini.EraseSection('sel');
 ini.Free;
end;
damit habe ich eine saubere inifile for dem speichern, aber ich kriegs nicht hin beim einlesen die anzahl der columns in der ini file in der runtime zu erzeugen :S
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Stringgrid in INI file schreiben

  Alt 25. Apr 2014, 23:38
Wenn du es einrichten könntest deinen aktuellen Code zum Speichern und Laden zu zeigen, dann könnte ich auch konkret antworten.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von rhodan
rhodan

Registriert seit: 4. Okt 2005
Ort: Hamburg
150 Beiträge
 
Delphi 7 Personal
 
#5

AW: Stringgrid in INI file schreiben

  Alt 25. Apr 2014, 23:53
popovs code funktioniert schon sauber.^^ hab ich quasi übernommen

lesen:
Delphi-Quellcode:
procedure TForm2.btnreadClick(Sender: TObject);
var
  x, y: Integer;
  IniFile: String;
  Ini: TIniFile;
begin
  IniFile := ChangeFileExt(ParamStr(0), '.ini');
  with strgrid do
  begin
      ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'myinifile.ini');
    try
      for x := 0 to ColCount do
      strgrid.
        Cols[x].CommaText := Ini.ReadString('Sel', IntToStr(x), '');
    finally
      Ini.Free;
    end;
  end;
end;
schreiben:
Delphi-Quellcode:
procedure TForm2.btnwriteClick(Sender: TObject);
var
  x, y: Integer;
  IniFile: String;
  Ini: TIniFile;
begin
ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'myinifile.ini');
ini.EraseSection('sel');
 ini.Free;
  with strgrid do
  begin
    ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'myinifile.ini');
    try
      for x := 0 to ColCount do
        Ini.WriteString('Sel', IntToStr(x), Cols[x].CommaText);
    finally
      Ini.Free;
    end;
 end;
end;
columns zur runtime erzeugen:
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
 Column: Integer;
 NewColumn: Integer;
begin
  StrGrid.ColCount := StrGrid.ColCount + 1;
  for Column := StrGrid.ColCount - 1 downto NewColumn do
    StrGrid.Cols[Column].Assign(StrGrid.Cols[Column - 1]);
  StrGrid.Cols[NewColumn - 1].Text := '';
end;

wobei mir auffällt das in der ini immer EINE column mehr erzeugt wird bzw abgespeichert wird als tatsächlich existieren..also wenn ich 3 in der runtime habe und speichere wird in der ini eine vierte erzeugt "4=,," die leer ist

Geändert von rhodan (25. Apr 2014 um 23:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Stringgrid in INI file schreiben

  Alt 25. Apr 2014, 23:58
Warum speicherst du in der Ini nicht (mehr) die Informationen von Zeilen- und Spaltenanzahl?
Das würde doch ungemein helfen, oder?

Und das ini.EraseSection kannst du direkt vor die for -Schleife setzen.

Ach ja, 4 Spalten von 0 an gezählt gehen von 0 bis 3
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (26. Apr 2014 um 00:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von rhodan
rhodan

Registriert seit: 4. Okt 2005
Ort: Hamburg
150 Beiträge
 
Delphi 7 Personal
 
#7

AW: Stringgrid in INI file schreiben

  Alt 26. Apr 2014, 00:19
ok..mit dieser änderung hab ichs hinbekommen das keine unnötigen leeren zeilen abgespeichert werden:
Delphi-Quellcode:
 begin
    ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'myinifile.ini');
    try
        for x := 2 to ColCount do
        Ini.WriteString('Sel', IntToStr(x-1), Cols[x-1].CommaText);
    finally
      Ini.Free;
    end;
hilf mir bitte wie ich beim einlesen die nötigen columns erzeuge..ich kriegs nicht hin :F
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#8

AW: Stringgrid in INI file schreiben

  Alt 26. Apr 2014, 00:17
Delphi-Quellcode:
const
  IniSelRC = 'Sel3';
var
  x, y, k: Integer;
  IniFile, s, xs, ys: String;
  sl: TStringList;
  Ini: TIniFile;
begin
  IniFile := ChangeFileExt(ParamStr(0), '.ini');
  with StringGrid1 do
  begin
    Ini := TIniFile.Create(IniFile);
    try
      //Löscht den alten Inhalt
      Ini.EraseSection(IniSelRC);

      k := 0;
      for x := 0 to ColCount - 1 do
        for y := 0 to RowCount - 1 do
        begin
          Inc(k);
          Ini.WriteString(IniSelRC, IntToStr(k), Format('%d:%d:%s', [x, y, Cells[x, y]]));
        end;
    finally
      Ini.Free;
    end;

    for x := 0 to ColCount do
      for y := 0 to RowCount do
        Cells[x, y] := '';

    ColCount := 0;
    RowCount := 0;

    Ini := TIniFile.Create(IniFile);
    try
      sl := TStringList.Create;
      try
        Ini.ReadSection(IniSelRC, sl);

        for k := 0 to sl.Count - 1 do
        begin
          s := Ini.ReadString(IniSelRC, sl[k], '');
          xs := System.Copy(s, 1, Pos(':', s) - 1);
          System.Delete(s, 1, Pos(':', s));
          ys := System.Copy(s, 1, Pos(':', s) - 1);
          System.Delete(s, 1, Pos(':', s));

          //Fügt Splaten und Zeilen bei Bedarf
          if ColCount < (StrToInt(xs) + 1) then
            ColCount := StrToInt(xs) + 1;
          if RowCount < (StrToInt(ys) + 1) then
            RowCount := StrToInt(ys) + 1;

          //Fügt Fixed-Stalten und -Zeilen bei Bedarf
          if (ColCount> 1) and (FixedCols = 0) then
            FixedCols := 1;
          if (RowCount > 1) and (FixedRows = 0) then
            FixedRows := 1;

          Cells[StrToInt(xs), StrToInt(ys)] := s;
        end;
      finally
        sl.Free;
      end; {}
    finally
      Ini.Free;
    end;
  end;
end;
Nicht groß geprüft, sollte aber funktionieren.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz