Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Daten aus INI-Datei lesen und mit Stringlist bearbeiten (https://www.delphipraxis.net/33695-daten-aus-ini-datei-lesen-und-mit-stringlist-bearbeiten.html)

Tommy111 14. Nov 2004 10:36

Re: Daten aus INI-Datei lesen und mit Stringlist bearbeiten
 
Also, wenn ich ne feste Position angebe klappt ja jetzt, aber wenn sie net fest ist das is noch net so ganz richtig!

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);



  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }

  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

var pos : integer;
    sl: TStringList;
    s,v1,v2 : string;

procedure TForm1.Button6Click(Sender: TObject);
begin
 Close
end;

procedure TForm1.Button7Click(Sender: TObject); // Stringliste >> Memofeld
var zahl: boolean;
    zahlstart, zahllength,i: integer;
    zahlstring: string;

begin
 (*with OpenDialog1 do
 begin
  Filter := 'Textdateien (*.TXT)|*.TXT';
  DefaultExt := 'TXT';
  if Execute then sl.LoadFromFile(Filename)
 end
 FileName := 'C:\Dokumente und Einstellungen\Tommy\Desktop\Delphi2'; *)
 
 s:='0.001   abc  1.45';       //zum Testen
 zahl:=false;
 for i:=1 to length(s) do begin
    if (ord(s[i])>=48) and (ord(s[i])<=57) then begin
       zahl:=true;
       zahlstart:=i;
    end;
    if zahl then begin
       if (s[i]<>'.') then begin
          if (ord(s[i])<48) or (ord(s[i])>57) then begin
             zahl:=false;
             zahllength:=i-zahlstart;
             zahlstring:=copy(s,zahlstart,zahllength);
          end;
       end;
    end;
 end;

 pos:=sl.Add(zahlstring);   //wenn Position nicht feststeht


 (* v1:='v1='+copy(s,1,5);    //bei fester Position
 pos:=sl.Add(v1);
 v2:='v2='+copy(s,15,18);
 pos:=sl.Add(v2); *)

 Memo1.Lines.AddStrings(sl)
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 sl := TStringList.Create
end;

end.
??? Will, wenn Position nicht feststeht genauso meine Stringliste auf em Memo ausgeben, wie bei fester Position.

ub60 14. Nov 2004 12:19

Re: Daten aus INI-Datei lesen und mit Stringlist bearbeiten
 
Mal ne ganz andere Idee:

Delphi-Quellcode:
s:='Variable=Wert';

var p : Integer;
    Trennstring, Variablenstring, Wertstring : String;
begin
  // Trennstring definieren
  Trennstring:='=';
  // seine Position ermitteln
  p:=Pos(Trennstring,s);
  // davor steht die Variable
  Variablenstring:=Copy(s,1,p-1);
  // die braucht man jetzt nicht mehr, das Trennzeichen auch nicht
  Delete(s,1,p+Length(Trennstring)-1);
  // der Rest ist die Zahl (jetzt noch als String)
  Wertstring:=s;
end;
Der Quellcode sollte beliebig modifizierbar sein, Du musst Dir nur überlegen, welche Trennstrings oder Trennzeichen Du benutzt.

Minz 14. Nov 2004 16:10

Re: Daten aus INI-Datei lesen und mit Stringlist bearbeiten
 
Code:
s:='0.001   abc  1.45';       //zum Testen
zahl:=false;
for i:=1 to length(s) do begin
    if (ord(s[i])>=48) and (ord(s[i])<=57) and (not zahl) then begin
       zahl:=true;
       zahlstart:=i;
    end;
    if zahl then begin
       if (s[i]<>'.') then begin
          if (ord(s[i])<48) or (ord(s[i])>57) then begin
             zahl:=false;
             zahllength:=i-zahlstart;
             zahlstring:=copy(s,zahlstart,zahllength);
             pos:=sl.add(zahlstring);
          end;
       end;
    end;
end;
probiers so mal ... pos:=sl.add(zahlstring); musst du am ende jetzt wegnehmen weils in der schleife steht -
ganz wichtig das "and (not zahl)"

@ub60
kann es sein das dein ding nicht für mehrere Zahlen in einem String funktioniert?
habs mir aber net so genau angeschaut...

SirThornberry 14. Nov 2004 17:09

Re: Daten aus INI-Datei lesen und mit Stringlist bearbeiten
 
[OT]
Zitat:

Zitat von Tommy111
Code:
FormatListe.Strings[0] := 'v1=1,5' //d.h. Variable 1 geht von Bit 1 bis 5
FormatListe.Strings[1] := 'v2=15,18' //d.h. Variable 2 geht von Bit 15 bis 18

Es handelt sich hier nicht um Bits sondern um Bytes.
[/OT]

Minz 14. Nov 2004 17:10

Re: Daten aus INI-Datei lesen und mit Stringlist bearbeiten
 
Recht haddu, aber ich wusste ja was gemeint war...

Tommy111 15. Nov 2004 14:49

Re: Daten aus INI-Datei lesen und mit Stringlist bearbeiten
 
Also ich bekomms einfach net auf die Reihe.
Wenn ich
Code:
pos:=sl.Add(zahlstring);
jetz in die Schleife mit einsetze wie du gesagt, dann gibt der mir immer nur ne 1 auf em Memo aus! komm da net mit :wall:. Eigentlich müßt der mir doch die Zahl in die Stringliste schreiben?! Oder? Sieht so aus als ob ich immer nur die Anfangsposition ausgebe. Was meinst du denn mit "and (not zahl)" ???
Glaub ich geh jetz erst mal en Bier trinken :cheers: .

IngoD7 15. Nov 2004 15:29

Re: Daten aus INI-Datei lesen und mit Stringlist bearbeiten
 
Zitat:

Zitat von Tommy111
Was meinst du denn mit "and (not zahl)" ???

Das in dieser Zeile:
Delphi-Quellcode:
if (ord(s[i])>=48) and (ord(s[i])<=57) and (not zahl) then begin

Tommy111 15. Nov 2004 20:30

Re: Daten aus INI-Datei lesen und mit Stringlist bearbeiten
 
:spin2: danke für den Tip Ingo, hat jetz funktioniert.
Vielen Dank auch an Minz, hast mir sehr geholfen!! :coder:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:38 Uhr.
Seite 2 von 2     12   

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