Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bedingungen für IF-Abfragen aus einem String entnehmen (https://www.delphipraxis.net/169361-bedingungen-fuer-if-abfragen-aus-einem-string-entnehmen.html)

RWarnecke 14. Jul 2012 17:43


Bedingungen für IF-Abfragen aus einem String entnehmen
 
Hallo zusammen,

ich habe eine ListView mit mehreren Spalten. Diese Spalten enthalten unterschiedliche Daten. Diese Daten muss ich in eine andere ListView übertragen. Die Daten können immer variieren. Ich möchte in einem Assistenten zum Beispiel folgendes für Spalte 2 vorgeben können :
Zitat:

F=0;M=1
Wenn das Programm jetzt die Spalte 2 in die andere Listview überträgt, dann soll in jeder Zeile von der ersten ListView wo ein F steht in die Zeile in der zweiten Listview eine 0 eingetragen werden. Das gleiche natürlich auch für M. Die Vorgabe kann ebenfalls variieren, so dass mal 1 oder 3 oder 5 Bedingungen angegeben sind. Die Syntax für die Bedingung soll hier nur ein Beispiel sein, damit ich es besser erklären kann.

Meine Frage ist nun, wie realisiere ich so einen Vorgang, wo unterschiedliche viele IF-Abfragen durchgeführt werden können ?

Helmi 14. Jul 2012 17:55

AW: Bedingungen für IF-Abfragen aus einem String entnehmen
 
Hallo,

was mir dazu einfallen würde, wäre folgendes:

Aus deiner Vorgabe machst du es wie mit einer Ini-Datei Schlüssel F, Wert 0 (natürlich in einer StringList).
Und das für alle Vorgaben.

Wenn du dann die Spalte 2 z. B. kopierst, dann schaust dir in einer Schleife nach ob der Zellwert in einem der Schlüssel ist, falls ja, dann wird der Zellinhalt mit dem dazugehörigen Wert in die neue ListView geschrieben

Amateurprofi 14. Jul 2012 18:23

AW: Bedingungen für IF-Abfragen aus einem String entnehmen
 
Zitat:

Zitat von RWarnecke (Beitrag 1174694)
Hallo zusammen,

ich habe eine ListView mit mehreren Spalten. Diese Spalten enthalten unterschiedliche Daten. Diese Daten muss ich in eine andere ListView übertragen. Die Daten können immer variieren. Ich möchte in einem Assistenten zum Beispiel folgendes für Spalte 2 vorgeben können :
Zitat:

F=0;M=1
Wenn das Programm jetzt die Spalte 2 in die andere Listview überträgt, dann soll in jeder Zeile von der ersten ListView wo ein F steht in die Zeile in der zweiten Listview eine 0 eingetragen werden. Das gleiche natürlich auch für M. Die Vorgabe kann ebenfalls variieren, so dass mal 1 oder 3 oder 5 Bedingungen angegeben sind. Die Syntax für die Bedingung soll hier nur ein Beispiel sein, damit ich es besser erklären kann.

Meine Frage ist nun, wie realisiere ich so einen Vorgang, wo unterschiedliche viele IF-Abfragen durchgeführt werden können ?

Auf die Schnelle und ohne größerere Prüfung auf Fehler (nicht getestet)

Delphi-Quellcode:
type
   TConst=Record
      Name:string;
      value:integer;
   End;
   TConsts=array of TConst;

var
   Consts:TConsts;

PROCEDURE GetConsts(const s:string);
var p,i,j,len:integer; name:string; value:integer;
begin
   Consts:=Nil;
   len:=Length(s);
   p:=1;
   repeat
      i:=p;
      while (i<len) and (s[i]<>'=') do inc(i);
      if i>=len then exit;
      j:=i;
      while (j<len) and (s[j]<>';') do inc(j);
      // Jetzt zeigen:
      // p auf den Namen (F oder M etc)
      // i auf das "="
      // j auf das ';' oder hinter das Ende des Strings
      SetLength(Consts,Length(Consts)+1);
      with Consts[High(Consts)] do begin
         Name:=Trim(Copy(s,p,i-p));
         Value:=StrToInt(Trim(Copy(s,i+1,j-i-1)));
      end;
      p:=j+1;
   until p>len;
end;

RWarnecke 14. Jul 2012 18:31

AW: Bedingungen für IF-Abfragen aus einem String entnehmen
 
Hallo Ihr beiden,

danke erstmal für eure Antworten. Die Erstellung einer INI Datei wollte ich vermeiden, da es teilweise recht große ListViews werden können. Die Idee mit den Record und dem Array finde ich garnicht schlecht. Ich werde dazu mal ein paar Tests machen.

Aber ich bin auch noch offen für andere Lösungen. Wie gesagt, die Syntax ist kein muss.

Helmi 14. Jul 2012 18:37

AW: Bedingungen für IF-Abfragen aus einem String entnehmen
 
Zitat:

Zitat von RWarnecke (Beitrag 1174704)
Die Erstellung einer INI Datei wollte ich vermeiden

Ich meinte ja auch nur "wie eine Ini-Datei"

Also so:

F=1
A=3
C=5
...

Popov 14. Jul 2012 18:58

AW: Bedingungen für IF-Abfragen aus einem String entnehmen
 
Eigentlich ganz simpel. Ich will es nicht vorprogrammierten (hab das Gehirn in Leerlauf geschaltet), deshalb nur eine Beschreibung

Funktion 1 zerlegt String mit F=0;M=1 in Stringlist mit eben so vielen Items, wobei die Werte natürlich auch zerlegt sind, z. B: Item0 > F=0; Item1 > M=1; usw.

Funktion 2 mit zwei Parametern und Boolean als Rückgabe. Die Werte werden geprüft und True's gezählt. Entspricht Anzahl Count der Anzahl True's, ist die Abfrage erfüllt.

DeddyH 15. Jul 2012 10:14

AW: Bedingungen für IF-Abfragen aus einem String entnehmen
 
TStringlist bringt doch eigentlich alles mit, was Du brauchst. Splitte den String am ";" auf (Delimiter, DelimitedText), auf die Items kannst Du dann über Names bzw. Values zugreifen.

Furtbichler 15. Jul 2012 10:24

AW: Bedingungen für IF-Abfragen aus einem String entnehmen
 
Zitat:

Zitat von RWarnecke (Beitrag 1174694)
Diese Spalten enthalten unterschiedliche Daten. Diese Daten muss ich in eine andere ListView übertragen. ... dann soll ... eine 0 eingetragen werden.

Das ist ein Widerspruch: Entweder überträgst Du Daten oder Du trägst eine 0 (immer eine 0?) ein.
Zitat:

Meine Frage ist nun, wie realisiere ich so einen Vorgang, wo unterschiedliche viele IF-Abfragen durchgeführt werden können ?
Mit einer Schleife.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 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