AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Eine Ini-Section in ein andere Ini kopieren
Thema durchsuchen
Ansicht
Themen-Optionen

Eine Ini-Section in ein andere Ini kopieren

Ein Thema von SneakyBagels · begonnen am 9. Mai 2017 · letzter Beitrag vom 9. Mai 2017
Antwort Antwort
Seite 1 von 2  1 2      
SneakyBagels
(Gast)

n/a Beiträge
 
#1

Eine Ini-Section in ein andere Ini kopieren

  Alt 9. Mai 2017, 10:18
Ich probiere hier schon seit Stunden mit StringListen rum wie ein Verrückter und komme nur zum Ergebnis Kopfschmerzen!
Jetzt muss ich mich an euch wenden.

Wie ist es möglich, wenn ich zwei TMemIniFile-Instanzen habe, eine komplette Section von der ersten in die zweite Instanz zu kopieren?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Eine Ini-Section in ein andere Ini kopieren

  Alt 9. Mai 2017, 10:22
Hallo,

mit ReadSection holst du dir Namen der Bezeichner der Sektion,
und dann nimmst du eine kleinen Schleife mit ReadString aus der alten Ini und WriteString in die neue Ini.
Heiko
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#3

AW: Eine Ini-Section in ein andere Ini kopieren

  Alt 9. Mai 2017, 10:25
Ich bin mir schon gar nicht mehr sicher was ich alles probiert habe aber das hilft glaube ich auch nicht.
Gibt es hier nix einfaches ohne Kopfschmerzen?

Weil ReadSection holt mir nur die Titel jeder Section nicht aber den Inhalt. GetStrings holt mir wirklich alles aber damit kann man auch nix anfangen da ich absolut keine Ahnung habe wie man da durchparst.

Da muss es doch was einfaches, sehr kurzes knackiges geben um eine Section von Ini-1 in Ini-2 zu bringen!
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
760 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Eine Ini-Section in ein andere Ini kopieren

  Alt 9. Mai 2017, 10:43
Zum Beispiel so: siehe unten, procedure kopiere( mi1, mi2 : TMemIniFile; sec : string );

[ Ich nehme an, du arbeitest ohne SubSections. Falls doch: Wenn du die Subsections von sec auch kopiert haben willst, dann müsstest du via ReadSubSections (oder ReadSections) an die in diesen SubSections gespeicherten Werte gelangen. ]


In diesem Beispiel werden die drei Wertepaare (b=1, c=2, d=3) aus Section a von m1 nach m2 kopiert.

Delphi-Quellcode:
uses IniFiles;

procedure kopiere( mi1, mi2 : TMemIniFile; sec : string );
var hs : TStringList;
    wert : string;
  i: Integer;
begin
  hs := TStringList.Create;
 try
  mi1.ReadSection( sec, hs );

  for i := 0 to hs.Count-1 do
  begin
    wert := mi1.readstring( sec, hs.Strings[i], '' );
    mi2.WriteString( sec, hs.Strings[i], wert );
  end;

 finally
  hs.free;
 end;
end;

procedure TForm87.FormCreate(Sender: TObject);
var m1, m2 : TMemIniFile;
begin
  m1 := TMemIniFile.Create( extractfilepath( application.exename) + 'tm1.txt' );
  m2 := TMemIniFile.Create( extractfilepath( application.exename) + 'tm2.txt' );
 try
  m1.AutoSave := true;
  m2.AutoSave := true;

  m1.WriteString( 'a', 'b', '1' );
  m1.WriteString( 'a', 'c', '2' );
  m1.WriteString( 'a', 'd', '3' );
  m1.WriteString( 'a\w', 'b', '1' );
  m1.WriteString( 'a\w', 'c', '2' );
  m1.WriteString( 'a\v', 'd', '3' );

  kopiere(m1,m2,'a');

 finally
  m1.Free;
  m2.Free;
 end;
end;
Michael Gasser
  Mit Zitat antworten Zitat
SneakyBagels
(Gast)

n/a Beiträge
 
#5

AW: Eine Ini-Section in ein andere Ini kopieren

  Alt 9. Mai 2017, 10:59
Du hast meinen Tag gerettet! Danke.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Eine Ini-Section in ein andere Ini kopieren

  Alt 9. Mai 2017, 11:06
Hallo,
Zitat:
Weil ReadSection holt mir nur die Titel jeder Section nicht aber den Inhalt. GetStrings holt mir wirklich alles aber damit kann man auch nix anfangen da ich absolut keine Ahnung habe wie man da durchparst.
Falsch, ReadSections holt die Titel aller Sections, ReadSection (ohne s) holt die Einträge genau einer Section.

public procedure TIniFile.ReadSection(
const Section: string;
Strings: TStrings
);

Oder habe ich da was übersehen?
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#7

AW: Eine Ini-Section in ein andere Ini kopieren

  Alt 9. Mai 2017, 11:11
Weil ReadSection holt mir nur die Titel jeder Section nicht aber den Inhalt.
Genauer: ReadSection holt die Name-Werte der angegebenen Section.

Aber für deinen Zweck gibt es ja auch ReadSectionValues.

Die Kopiere Methode könnte dann so aussehen:
Delphi-Quellcode:
procedure kopiere( mi1, mi2 : TMemIniFile; sec : string );
var
  hs : TStringList;
  i: Integer;
begin
  hs := TStringList.Create;
  try
    mi1.ReadSectionValues( sec, hs );
    mi2.EraseSection(sec); // falls der aktuelle Inhalt nicht erhalten bleiben soll

    for i := 0 to hs.Count-1 do
    begin
      mi2.WriteString( sec, hs.Names[i], hs.ValueFormIndex[I] );
    end;

  finally
    hs.free;
  end;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Eine Ini-Section in ein andere Ini kopieren

  Alt 9. Mai 2017, 11:16
Oder habe ich da was übersehen?
Nö hast du nicht.

@TE: Ein Blick in die Dokumentation wirkt manchmal doch Wunder. TIniFile.ReadSection und TIniFile.ReadSections

Es ist genau so wie hoika es gesagt hat. Die eine Funktion liest dir alle Sections aus (ReadSections). Die andere Funktion liest dir die Keys innerhalb einer bestimmten Section aus (ReadSection). Die Funktion die du verwenden solltest wäre demzufolge ReadSection. Danach kannst du dir die einzelnen Werte auslesen und entsprechend behandeln.

Eine noch einfachere Variante wäre, dass du einfach die Funktion TIniFile.ReadSectionValues zu Hilfe nimmst. Die macht schon genau das für dich und liest dir alle Keys und Values aus einer Section in eine TStringList ein.

EDIT: Och menno. Zu langsam. Where's the red box

Geändert von Aviator ( 9. Mai 2017 um 11:20 Uhr)
  Mit Zitat antworten Zitat
Michael II

Registriert seit: 1. Dez 2012
Ort: CH BE Eriswil
760 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Eine Ini-Section in ein andere Ini kopieren

  Alt 9. Mai 2017, 11:23
Zitat:
Eine noch einfachere Variante wäre, dass du einfach die Funktion TIniFile.ReadSectionValues zu Hilfe nimmst. Die macht schon genau das für dich und liest dir alle Keys und Values aus einer Section in eine TStringList ein.
ReadSection liest die "Namen"/"Identifiers",
ReadSectionValues liest nur die "Werte"



siehe Post UR
Michael Gasser
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Eine Ini-Section in ein andere Ini kopieren

  Alt 9. Mai 2017, 11:31
Zitat:
Eine noch einfachere Variante wäre, dass du einfach die Funktion TIniFile.ReadSectionValues zu Hilfe nimmst. Die macht schon genau das für dich und liest dir alle Keys und Values aus einer Section in eine TStringList ein.
ReadSection liest die "Namen"/"Identifiers",
ReadSectionValues liest nur die "Werte"



siehe Post UR
Also in der Dokumentation steht was anderes. Es sei denn, die wäre falsch.

Zitat von Embarcadero DokWiki:
Description

Reads the values from all keys within a section of an INI file into a string list.

Call ReadSectionValues to read the keys, and the values from all keys, within a specified section of an INI file into a string list object (TStrings descendant). The key names and values are added to the string list as strings of the form:
Code:
<keyname> = <value>
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:59 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