AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Arrays auf ungleichheit Prüfen

Ein Thema von Starworld1000 · begonnen am 14. Jul 2017 · letzter Beitrag vom 15. Jul 2017
Antwort Antwort
Seite 1 von 2  1 2   
Starworld1000

Registriert seit: 19. Mär 2007
49 Beiträge
 
#1

Arrays auf ungleichheit Prüfen

  Alt 14. Jul 2017, 10:43
Hallo zusammen,

ich bin gerade etwas am verzweifeln da ich momentan nicht weiterkomme. Vielleicht hab ich aber auch nur einen Knoten im Hirn

Folgendes Problem:
Ich entwickle gerade eine Schnittstelle für Maschinen, die Störzeiten und dessen Fehlermeldungen in Arrays schreiben soll. Aktuell nutze ich dafür 3 mehrdim. Arrays.

Fall1:
Tritt eine Störung auf, schreibe ich diese in das Stoer1 Array1. Mit einem Timer übertrage ich dann Stoer1 in das Stoer2 Array2 und prüfe auf Gleichheit (ob die Störung noch die gleiche ist oder behoben wurde). Bei Gleichheit passiert nichts und bei Ungleichheit wird eine weitere Störung in Stoer2 übertragen.

Fall2:
Ist die Störung behoben, wird Stoer1 leer aber Stoer2 noch voll. In dem Fall soll Stoer2 eine Endzeit bekommen und in StoerDB (Array3) übertragen werden.

Fall3:
Habe ich mehrere Störungen in Stoer1 stehen und eine beliebige Störung verschwindet nach ein paar Sekunden. Diese entfernte Störung soll dann ebenfalls in StoerDB (Array3) übertragen werden.


Mein Problem das momentan besteht. Der Fall1 habe ich ohne große Probleme umgesetzt und funktioniert auch soweit, jedoch komme ich an Fall2 oder Fall3 nicht weiter.
Ich Prüfe immer nur auf Ungleichheit oder Gleichheit zwischen Stoer1 und Stoer2 aber wenn Stoer1 leer ist oder neue Störungen hinzugefügt werden tritt immer Fall 1 ein und nie Fall2 oder 3.


Könnt ihr mir bitte weiterhelfen bevor ich noch ausflippe, oder würde es jemand komplett anders machen

Code folgt noch wenn ich an dem anderen Rechner bin...

Viele Grüße
Starworld
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Arrays auf ungleichheit Prüfen

  Alt 14. Jul 2017, 10:56
Also ich kann Dein Problem so noch nicht nachvollziehen.

Versuch nochmal eine genauere Beschreibung.
Was genau willst Du wissen? Einen allgemeinen Lösungsansatz oder eine Lösung für ein Teilproblem?
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Starworld1000

Registriert seit: 19. Mär 2007
49 Beiträge
 
#3

AW: Arrays auf ungleichheit Prüfen

  Alt 14. Jul 2017, 11:04
Hey danke für die schnelle Antwort

Ich wollte alle behobenen Störungen Protokolieren damit man sie später Auswerten kann.
Leider habe ich es bisher immer nur geschafft das Fall1 zutrifft aber nie Fall2 oder Fall3.

Es kommt eine oder mehrere Störungen in Stoer1 die dann in Stoer2 zum vergleichen übertragen werden. Jedoch komme ich nicht weiter wenn eine Störung behoben wurde diese in das finale StoerDB wegzuschreiben, da ja immer Fall1 zutrifft

Ein allgemeiner Lösungsansatz wäre nicht verkehrt

Hast du eine Idee?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.753 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Arrays auf ungleichheit Prüfen

  Alt 14. Jul 2017, 11:06
.. musst Du 3 Array benutzen?

Könntest Du nicht mit einer Stoerung-Klasse arbeiten.
Diese kann neben den Daten zur Störung auch die Stati beinhalten.

Dann wäre das nur noch ein Array (ObjctList) und du müsstest nur noch die Stati vergleichen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.108 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Arrays auf ungleichheit Prüfen

  Alt 14. Jul 2017, 11:08
Genau so etwas habe ich auch, damit ich deine Bezeichner richtig verstehe:
  • Stör1: Neu festgestellte Störungen
  • Stör2: Alle akut anstehenden Störungen
  • StörDB: Langzeit-Archivierung für alle aufgetretenen Störungen

Bei dir taucht im Konzept nicht auf dass man Störungen explizit "zur Kenntnis nehmen" kann und man später auch sieht ob man die Störung überhaupt mitbekommen hat oder sie nur kurz da war und dann wieder verschwand?

Wenn ja, folgende Fragen:
  • Stör1 ist doch nur temporär für einen Durchlauf. Egal ob deine Gleichheit-Prüfung (nach welchen Kriterien auch immer) zutrifft oder nicht, müsste man die Störung nach den Tests nicht aus "Stör1" entfernen? Diese Liste ist doch sonst zu nichts mehr gut
  • Wo ist das Problem bei Fall 2? Wenn du weißt dass "Störung 42" jetzt nicht mehr auftritt gehst du deine Liste "Stör2" durch. Gefunden? Nimm den Eintrag, setze das End-Datum, entferne ihn aus "Stör2" und übertrage ihn in "StörDB"


Anbei: Tu dir den Gefallen und geh bei einem Management dass Elemente zwischen Containern überträgt von Arrays weg. Nimm einen halbwegs intelligenten Container wie eine Liste oder ein Dictionary dass anhand der ID deiner Störung dir schon ein passendes Element gibt. Das ganze Hin-und-her-Iterieren über Arrays und Elemente entfernen (eventuelle Lücken schließen) bläht doch den Code extrem auf und ist stark fehleranfällig.
  Mit Zitat antworten Zitat
Starworld1000

Registriert seit: 19. Mär 2007
49 Beiträge
 
#6

AW: Arrays auf ungleichheit Prüfen

  Alt 14. Jul 2017, 13:39
zum veranschaulichen habe ich jetzt mal ein paar Codeschnipsel beigefügt.

Code:
...

Str2.Text:=(Copy(htmlcode,48,999));

...

SetLength(Stoer1, Str2.Count );

                for i := 0 to High(Stoer1) do
                        begin
                        Label6.Caption:=inttostr(i);
                        s:=Str2[i];
                        p1:=pos(':',s);            //Teilbereich1 Störzeit
                        SubStr := Copy(s,1, p1+6);
                        delete(s, 1, p1+6);

                        p1:=pos('/',s);            //Teilbereich2 Störbereich
                        SubStr2 := Copy(s,1, p1-1);
                        delete(s, 1, p1);

                        p1:=pos('/',s);            //Teilbereich3 Störmeldung
                        SubStr3 := Copy(s,1, p1-1);
                        delete(s, 1, p1);
         
         Stoer1[i, 0]:=Datetostr(now);
                        Stoer1[i, 1]:=Substr;
                        Stoer1[i, 2]:=Substr2;
                        Stoer1[i, 3]:=Substr3;
         end;

...

setlength(Stoer2,length(Stoer1));
for i:=0 to High(Stoer1) do
        begin
        If (Stoer2[i, 1] <> Stoer1[i,1]) or (Stoer2[i, 4] <> Stoer1[i,4]) then
                begin
                 Stoer2[i, 0]:=Stoer1[i, 0];
                 Stoer2[i, 1]:=Stoer1[i, 1];
                 Stoer2[i, 2]:=Stoer1[i, 2];
                 Stoer2[i, 3]:=Stoer1[i, 3];
...

                 end;
          end;
...
Richtig Stoer1 ist immer nur temporär solange eine Störung da ist oder nicht

Ich bin mir halt nicht sicher ob das überhaupt der richtige weg ist oder nicht ?
Ich muss halt mit dem String in STR2 arbeiten.

Der sieht wie folgt aus:
13:39:47/005/049/Störung Modul 02B ist ausgefallen
Ist die Störung behoben sollte sie so ungefähr in StoerDB stehen:
13.07.2017 | 13:39:47 | 005 | 049 | Störung Modul 02B ist ausgefallen | 13.07.2017 | 16:09:21

Nur irgendwie komme ich nicht mehr weiter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.097 Beiträge
 
Delphi 12 Athens
 
#7

AW: Arrays auf ungleichheit Prüfen

  Alt 14. Jul 2017, 14:09
Pssst, in den ganz neuen Delphis gibt es jetzt String-Like-Array-Operatoren.

Also nicht nur arr := arr1 + arr2; , arr := arr1 + [xyz]; oder arr := arr1 - arr2;
sondern auch Operatoren zum Vergleichen oder filtern, so ala
Delphi-Quellcode:
arr := arr1 * arr2;
arr := arr1 = arr2;
arr := arr1 <> arr2;
arr := arr1 > arr2;
arr := arr1 in arr2;
arr := xyz in arr2;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#8

AW: Arrays auf ungleichheit Prüfen

  Alt 14. Jul 2017, 14:12
Zitat:
Pssst, in den ganz neuen Delphis gibt es jetzt String-Like-Array-Operatoren.
Der Vollständigkeit halber: wie sind denn die Namen
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

AW: Arrays auf ungleichheit Prüfen

  Alt 14. Jul 2017, 14:13
Zitat:
Pssst, in den ganz neuen Delphis gibt es jetzt String-Like-Array-Operatoren.
Der Vollständigkeit halber: wie sind denn die Namen


Also nicht nur arr := arr1 + arr2; , arr := arr1 + [xyz]; oder arr := arr1 - arr2;
sondern auch Operatoren zum Vergleichen oder filtern, so ala
Delphi-Quellcode:
arr := arr1 * arr2;
arr := arr1 = arr2;
arr := arr1 <> arr2;
arr := arr1 > arr2;
arr := arr1 in arr2;
arr := xyz in arr2;
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)

Geändert von Zacherl (14. Jul 2017 um 14:15 Uhr)
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#10

AW: Arrays auf ungleichheit Prüfen

  Alt 14. Jul 2017, 14:14
Ich glaube ich habe mich verlesen. Ich dachte hier eher an eine Funktion, der man Parameter übergibt und die Boolean zurückgibt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

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 06: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