AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Verwendung von Aufzählungstypen

Ein Thema von OsCor · begonnen am 15. Feb 2011 · letzter Beitrag vom 16. Feb 2011
Antwort Antwort
OsCor

Registriert seit: 1. Jan 2009
Ort: Kenzingen, Südbaden
51 Beiträge
 
Delphi 10.3 Rio
 
#1

Verwendung von Aufzählungstypen

  Alt 15. Feb 2011, 22:51
Hallo Foristen,

ich habe eine Protokolldatei auszuwerten, in der Kategorien eingetragen wurden. Ich möchte also etwa die Häufigkeit einer Sammelkategorie „Auskunft” herausbekommen, die aus den (8) Unterkategorien 'Allgemein', 'Status', 'Befund' etc. besteht (und noch einige andere Sammelkategorien).
Spontan schien mir die Verwendung von Aufzählungstypen eine Möglichkeit; nach Lektüre von Handbüchern und der Onlinehilfe stehe ich aber vor einer Wand: Ich erhalte eine Unterkategorie als String. Wie muß ich vorgehen, um etwa mit case die Zugehörigkeit einer Unterkategorie zu bestimmen, wenn ich mit set of die Unterkategorien gruppiere?

Oswald
  Mit Zitat antworten Zitat
Mike_

Registriert seit: 26. Mär 2008
98 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Verwendung von Aufzählungstypen

  Alt 15. Feb 2011, 23:16
Guten Abend OsCor,

ich würde dir gerne helfen, jedoch erfasse ich die Aufgabenstellung nicht vollständig.

Post doch bitte ein Stück der ini und beschreibe genau, was das Programm tun soll bzw welche Ausgabe du dir wünscht.

Mike
Delphi-Nachwuchs
  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
 
#3

AW: Verwendung von Aufzählungstypen

  Alt 16. Feb 2011, 00:11
Welche Ini-Datei? Er spricht doch von einer Protokoll-Datei.

Ein alternativer Ansatz wäre die Protokoll-Daten in eine DB zu importieren. Dort hat man sehr viele Möglichkeiten der Auswertung.

Ansonsten wandelt man einen String in einen Enum mit dem Befehl Delphi-Referenz durchsuchenGetEnumValue um.
Wie dir ein Set aber bei der Gruppierung der Unterkategorien helfen soll?

Das kann man nur beantworten, wenn man die Daten bzw. alle möglichen Kombinationen kennt.

Pauschal würde ich aber sagen, das geht so nicht
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 stahli
stahli
Online

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.236 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Verwendung von Aufzählungstypen

  Alt 16. Feb 2011, 00:37
Case kann nur mit Ordinalwerten verwendet werden.
Das Umwandeln von Texten in ordinale Typen ist möglich (siehe Sir Rufo), aber rel. aufwendig.

Wenn es nur um das einmalige Prüfen geht, würde ich einfach eine Funktion basteln:
Delphi-Quellcode:
function IsTypeA(S: String): Boolean;
begin
  Result := (S = 'Allgemein') or (S = 'Status') or (S = 'Befund');
end;
Wenn Du "richtige Enum-Werte" hast (z.B. "alClient" o.ä.) und diese entsprechenden Typvariablen zuweisen willst um damit weiter zu arbeiten, ist das natürlich etwas anderes.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
OsCor

Registriert seit: 1. Jan 2009
Ort: Kenzingen, Südbaden
51 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Verwendung von Aufzählungstypen

  Alt 16. Feb 2011, 08:30
Tut mir leid, dass ich das gestern zu ungenau ausgedrückt habe. Es soll die Häufigkeit des Auftretens von Mitgliedern der Kategorien A, B etc. herausgefunden werden.

KategorieA
- Unterkategorie Aa
- Unterkategorie Ab
- Unterkategorie Ac
...
KategorieB
- Unterkategorie Ba
- Unterkategorie Bb
- Unterkategorie Bc
...
Tritt also Unterkategorie Ba auf, soll die Häufigkeit der Kategorie B um 1 erhöht werden usw.

Lösen wollte ich so:

type TUnterA = (Unterkategorie Aa, Unterkategorie Ab, Unterkategorie Ac);
type TUnterB = (Unterkategorie Ba, Unterkategorie Bb, Unterkategorie Bc);
.
.
case KatString of
Unterkategorie Aa, Unterkategorie Ab… : Inc(Häufigkeit KategorieA);
Unterkategorie Ba, Unterkategorie Bb… : Inc(Häufigkeit KategorieB);

@Sir Rufo
GetEnumValue war mir noch nicht bekannt. Die Anzahl der möglichen Kombinationen ist übrigens bekannt.

Ich möchte einfach eine unübersichtliche If...then-Orgie vermeiden.

Ich hoffe, es ist jetzt klarer.

Oswald
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Verwendung von Aufzählungstypen

  Alt 16. Feb 2011, 08:52
nur als Vorschlag:

in FUeberKathArray wäre nach Abarbeitung der Schleife die jeweilige Anzahl der Überkathegorien, der Rückgabewert von GetUeber ist eigenlich nur Debugkram.

Delphi-Quellcode:
unit Unit1;

interface

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

type
TUeberKathArray=Array[0..1] of Integer;

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
  FUeberKathArray:TUeberKathArray;
    function GetUeber(UKath: String): String;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

Function TForm1.GetUeber(UKath:String):String;
Const
  KArray:Array[0..7] of String=('K1','K1','K1','K1','K2','K2','K2','K2');
var
  index, KathIndex:Integer;
begin
   index := AnsiIndexText(UKath,['UA1','UA2','UA3','UA4','UB1','UB2','UB3','UB4']);
   if (Index>-1) and (Index<=High(KArray)) then
      begin
      Result := KArray[index];
      KathIndex := AnsiIndexText(Result,['K1','K2']);
      if (KathIndex>-1) and (KathIndex<=High(FUeberKathArray)) then
          inc(FUeberKathArray[KathIndex]);
      end
   else Result := 'KEINE AHNUNG';

end;


procedure TForm1.Button1Click(Sender: TObject);
begin

    Caption := GetUeber('ua1');
end;

end.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
OsCor

Registriert seit: 1. Jan 2009
Ort: Kenzingen, Südbaden
51 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Verwendung von Aufzählungstypen

  Alt 16. Feb 2011, 09:44
Klasse! Die Lösung steckt also in der Verwendung der Funktionen AnsiIndexStr oder AnsiIndexText.
Jetzt muss ich nur noch schauen, wie die „Begleitmusik” für mich angepasst werden muss.

Ich dachte daran, alle möglichen 35 Unterkategorien in ein einziges Array zu stecken und nach der Bestimmung des Index einfach zu sagen: 0-9 entspricht Kategorie A, 10-15 entspricht Kategorie B usw.
Allerdings - eine allgemeinere Nutzungsmöglichkeit im Hinterkopf - kann man wohl die Entscheidungskriterien, also bei „case ... of 0..9: Do something” den Bereich vor dem Doppelpunkt nicht variabel gestalten. Oder doch?

Oswald
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#8

AW: Verwendung von Aufzählungstypen

  Alt 16. Feb 2011, 10:34
Du könntest die Arrays dynamisch gestalten und die Werte z.B. in einer INI-Datei ablegen....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
OsCor

Registriert seit: 1. Jan 2009
Ort: Kenzingen, Südbaden
51 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Verwendung von Aufzählungstypen

  Alt 16. Feb 2011, 11:18
Das habe ich verstanden, muß es aber ausprobieren, wie dynamisch man so etwas gestalten kann, ohne den Überblick zu verlieren.

Vielen Dank auf jeden Fall
Oswald
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#10

AW: Verwendung von Aufzählungstypen

  Alt 16. Feb 2011, 11:30
Du könntest Die Listen auch in der Art anlegen
Code:
Kath1=U1K1
Kath1=U1K2
Kath1=U1K3
Kath1=U1K4
Kath1=U1K5
Kath2=U2K1
Kath2=U2K2
Kath3=U3K3
Kath3=U3K4
Kath3=U3K5
und entsprechend auslesen, oder
Code:
[Kath1]
U1k1=
U1k2=
U1k3=
U1k4=
[Kath2]
U2k1=
U2k2=
per ini (Sections lesen und über die Sections iterieren)

oder, oder
wobei Sir Rufo freilich recht hat, daß eine Datenbank mit Kath,Count(*) Group by Kath
mit 2 gejointen Tabellen der beste Ansatz wäre.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
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 18:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf