AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String in Variablen "umwandeln"

Ein Thema von Jackie1983 · begonnen am 26. Feb 2010 · letzter Beitrag vom 27. Feb 2010
Antwort Antwort
Seite 1 von 2  1 2      
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#1

String in Variablen "umwandeln"

  Alt 26. Feb 2010, 15:38
Servus,

wuste jetzt nicht ganz wie ich das Thema nennen soll.
Habe eine Text- bzw. Inidatei mit folgendem Aufbau:
Zitat:
[option]
options_1=wert_1
options_2=wert_2
etc
Jetzt möchte ich gerne options_1 bis options_n auslesen und in einer Variable stecken.
Habe es zur Zeit so gelöst
Delphi-Quellcode:
const
  options : array[1..4] of String =
            (
             ('options_1'),
             ('options_2'),
             ...
            );
begin
  //...
      Text := LowerCase(ini.ReadString('option',options[i],''));
      if Text = 'options_1then
        obj.options_1 := text;
      //...
Finde das aber recht unübersichtlich. Es gibt bestimmt was eleganteres wie oben, oder?
mfg
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: String in Variablen "umwandeln"

  Alt 26. Feb 2010, 15:46
Delphi-Referenz durchsuchenTIniFile
  Mit Zitat antworten Zitat
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#3

Re: String in Variablen "umwandeln"

  Alt 26. Feb 2010, 16:08
TIniFile ist doch das gleiche wie TMemIniFile. Damit kann ich das auch nicht machen.
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#4

Re: String in Variablen "umwandeln"

  Alt 26. Feb 2010, 16:44
So einfach wie in PHP gehts leider nicht dafür ist Delphi aber halt typsicher. Du könntest dir aber, wenn du D2010 im Einsatz hast, RTTI anschauen. Daniel hat da ein schönes Video dazu gepostet, das so ziemlich das abdeckt, was du haben willst.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

Re: String in Variablen "umwandeln"

  Alt 26. Feb 2010, 16:45
Zitat von Jackie1983:
Jetzt möchte ich gerne options_1 bis options_n auslesen und in einer Variable stecken.
Habe es zur Zeit so gelöst
Delphi-Quellcode:
const
  options : array[1..4] of String =
            (
             ('options_1'),
             ('options_2'),
             ...
            );
begin
  //...
      Text := LowerCase(ini.ReadString('option',options[i],''));
      if Text = 'options_1then
        obj.options_1 := text;
      //...
Dir ist klar das in Text niemals options_1 auftauchen wird? Sondern nur wert_1, wert_2 usw.?

Was verstehst Du denn unter einer Variablen? Eine Variable pro "Option"?

Delphi-Quellcode:
var
  option_1 : string;
  option_2 : string;
  
  Text := LowerCase(ini.ReadString('option','option_1',''));
  if Text <>'then option_1 := text;
  Text := LowerCase(ini.ReadString('option','option_2',''));
  if Text <>'then option_2 := text;
Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#6

Re: String in Variablen "umwandeln"

  Alt 26. Feb 2010, 17:15
Zitat von p80286:
Dir ist klar das in Text niemals options_1 auftauchen wird? Sondern nur wert_1, wert_2 usw.?
Hatte mich vertan, so ist das richtig. Unten muss dann options[i] hin.
Delphi-Quellcode:
const
  options : array[1..4] of String =
            (
             ('options_1'),
             ('options_2'),
             ...
            );
begin
  //...
      Text := LowerCase(ini.ReadString('option',options[i],''));
      if options[i] = 'options_1then //hier
        obj.options_1 := text;
      //...
Zitat von p80286:
Was verstehst Du denn unter einer Variablen? Eine Variable pro "Option"?
Delphi-Quellcode:
var
  option_1 : string;
  option_2 : string;
  
  Text := LowerCase(ini.ReadString('option','option_1',''));
  if Text <>'then option_1 := text;
  Text := LowerCase(ini.ReadString('option','option_2',''));
  if Text <>'then option_2 := text;
Richtig. Aber da ich noch was mehr machen muss mit der Variable, möchte ich es gerne in einer Schleife abfragen
um sourcen zu sparen.

Zitat von s.h.a.r.k:
So einfach wie in PHP gehts leider nicht dafür ist Delphi aber halt typsicher. Du könntest dir aber, wenn du D2010 im Einsatz hast, RTTI anschauen. Daniel hat da ein schönes Video dazu gepostet, das so ziemlich das abdeckt, was du haben willst.
Nein habe ich leider nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: String in Variablen "umwandeln"

  Alt 26. Feb 2010, 17:18
Vielleicht etwas umständlich, aber es geht.

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  MyIni: TIniFile;
  i: Integer;
  OptionNames: TStringList;
  OptionValues: array of string; // Enthält die Werte
begin
  // Ini lesen
  MyIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'options.ini');
  try
    OptionNames := TStringList.Create;
    try
      // alle Einträge (Namen) unter [option] einlesen und in StringList speichern
      MyIni.ReadSection('option', OptionNames);

      // Werte auslesen und dem Array hinzufügen
      SetLength(OptionValues, OptionNames.Count);
      for i := 0 to OptionNames.Count - 1 do
      begin
        OptionValues[i] := MyIni.ReadString('option', OptionNames[i], '');
      end;
    finally
      FreeAndNil(OptionNames);
    end;
  finally
    FreeAndNil(MyIni);
  end;

  // Sodele, hier sind nun alle Werte im Array

  // Testausgabe:
  for i := Low(OptionValues) to High(OptionValues) do
  begin
    ShowMessage(OptionValues[i]);
  end;
end;
Edit: Du kannst allerdings nicht mehr zuordnen, unter welchem Namen welcher Wert stand. OptionValues[0] enthält beispielsweise den ersten Wert in dem Abschnitt [option].
  Mit Zitat antworten Zitat
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#8

Re: String in Variablen "umwandeln"

  Alt 26. Feb 2010, 17:39
Zitat von Matze:
Edit: Du kannst allerdings nicht mehr zuordnen, unter welchem Namen welcher Wert stand. OptionValues[0] enthält beispielsweise den ersten Wert in dem Abschnitt [option].
Und genau das ist mein Problem. Ich brauche schon einen Namen, da ich nicht weis was bei 0,1,2 für Optionen stehen.
Wenn es so nicht geht muss ich das ganze anders lösen, habe schon einen Ansatz.....
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: String in Variablen "umwandeln"

  Alt 26. Feb 2010, 18:51
Ich habe ganz schlampig was zusammen getippt. Es ist nicht sauber, aber vielleicht kannst du in der Richtung etwas machen:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IniFiles, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    type TOptData = record
      OptName: string;
      OptValue: string;
    end;
    type TOptDataArray = array of TOptData;

    function GetOptionsFromIni: TOptDataArray;
    function GetOptValue(OptData: TOptDataArray; OptName: string): string;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.GetOptionsFromIni: TOptDataArray;
var
  MyIni: TIniFile;
  i: Integer;
  OptionNames: TStringList;
  OptionValues: array of string;
  OptionData: TOptDataArray;
begin
  MyIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'options.ini');
  try
    OptionNames := TStringList.Create;
    try
      MyIni.ReadSection('option', OptionNames);

      SetLength(OptionData, OptionNames.Count);
      for i := 0 to OptionNames.Count - 1 do
      begin
        OptionData[i].OptName := OptionNames[i];
        OptionData[i].OptValue := MyIni.ReadString('option', OptionNames[i], '');
      end;
    finally
      FreeAndNil(OptionNames);
    end;
  finally
    FreeAndNil(MyIni);
  end;

  Result := OptionData;
end;

function TForm1.GetOptValue(OptData: TOptDataArray; OptName: string): string;
var
  i: Integer;
begin
  Result := '';

  for i := Low(OptData) to High(OptData) do
  begin
    if OptData[i].OptName = OptName then
    begin
      Result := OptData[i].OptValue;
      break;
    end;
  end;
end;

// Beispielaufruf
procedure TForm1.Button1Click(Sender: TObject);
var
  OptionValues: TOptDataArray;
begin
  OptionValues := GetOptionsFromIni;

  ShowMessage(GetOptValue(OptionValues, 'options_1'));
  ShowMessage(GetOptValue(OptionValues, 'options_4'));
end;

end.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#10

Re: String in Variablen "umwandeln"

  Alt 26. Feb 2010, 19:33
Hallo,

wenn man statt ReadSection die Methode ReadSectionValues verwendet, wird die Sache etwas einfacher:

Delphi-Quellcode:
var
  Options: TStrings;
  Ini: TMemIniFile;
  i: Integer;
  OptionName: string;
  OptionValue: string;
begin
  Options := TStringList.Create;
  try
    Ini := TMemIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Options.ini');
    try
      Ini.ReadSectionValues ('option', Options);
    finally
      Ini.Free;
    end;

    for i := 0 to Options.Count - 1 do
      begin
        OptionName := Options.Names[i];
        OptionValue := Options.Values[OptionName]; // oder Options.ValueFromIndex[i]

        ShowMessage (Format('Wert von %s: %s', [OptionName, OptionValue]));
      end;
  finally
    Options.Free;
  end;
end;
Gruß Hawkeye
  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:12 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