Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   2D-Strukturformel als String darstellen (https://www.delphipraxis.net/38239-2d-strukturformel-als-string-darstellen.html)

Assarbad 16. Jan 2005 16:19


2D-Strukturformel als String darstellen
 
Hi,

ich will eine 2D-Strukturformel sinnvoll als String darstellen. Wichtig ist dabei insbesondere, daß der String relativ leicht zu parsen ist.

Ach ja, nicht nur Aliphaten, sondern auch Aromaten sollen dargestellt werden können. Außerdem verschiedene Ringstrukturen (5/6) und Heterozyklen. Das ist das eigentliche Problem.

Es geht also um Chemie :-]

jfheins 16. Jan 2005 16:26

Re: 2D-Strukturformel als String darstellen
 
Möchtest du eine Valenzstrichformel abspeichern ?

Ist es wichtig, dass das Ergebnis lesbar ist, oder ist das nur zum parsen ?

Assarbad 16. Jan 2005 16:33

Re: 2D-Strukturformel als String darstellen
 
Zitat:

Zitat von jfheins
Möchtest du eine Valenzstrichformel abspeichern ?

Ist es wichtig, dass das Ergebnis lesbar ist, oder ist das nur zum parsen ?

Die "Valenzstriche" sollen quasi implizit enthalten sein. Es soll nicht direkt menschenlesbar sein (höchstens in der Form wie man Assembler oder eine andere Programmiersprache liest, also nur für "Eingeweihte").
Der wichtige Punkt ist, daß ich es nicht binär abspeichern kann ... logo, weil es dann Probleme zwischen Systemen mit Little und Big Endian gibt. Als Matrix ist auch problematisch:

Was machst du zB wenn sowas auftritt:

Code:
-  H -
R C H
-  H -
... nun stell dir vor du mußt bei R noch eine Polymerkette anfügen. Dann bist du in Problemen, weil du die komplette Matrix erweitern und den alten Teil "nach rechts" kopieren mußt :-/

Es gibt da übrigens CML als XML-Abkömmling. Nur weder existiert eine ausreichende Doku noch existieren die Pakete zur Benutzung von CML mit C++ und anderen Sprachen als Download.

jfheins 16. Jan 2005 16:39

Re: 2D-Strukturformel als String darstellen
 
Wie wäre es mit einer rekursiven Funktion, die
:arrow: "Ihren" Knoten in den String schribt
:arrow: Verbindungen zu anderen Knoten dazuschreibt, der noch nicht beschrieben wurde
:arrow: sich für jeden dieser Knoten aufruft
:arrow: Die Rückgabe an den String anhängt
:arrow: Den String zurückgibt

Also für
Code:
X - Y
|   |
V - W
z.B.
Code:
X:Y,V; Y:W; W:V; V:;
Die Buchstaben müsste man dann duch Koordinaten ersetzen ...

Assarbad 16. Jan 2005 16:55

Re: 2D-Strukturformel als String darstellen
 
Zitat:

Zitat von jfheins
Wie wäre es mit einer rekursiven Funktion, die
:arrow: "Ihren" Knoten in den String schribt
:arrow: Verbindungen zu anderen Knoten dazuschreibt, der noch nicht beschrieben wurde
:arrow: sich für jeden dieser Knoten aufruft
:arrow: Die Rückgabe an den String anhängt
:arrow: Den String zurückgibt

Also für
Code:
X - Y
|   |
V - W
z.B.
Code:
X:Y,V; Y:W; W:V; V:;
Die Buchstaben müsste man dann duch Koordinaten ersetzen ...

Ich verstehe noch nicht so ganz das Konzept. Im zweiten Schritt, sollte Y doch wiederum für X aufgerufen werden, da es ja ein "stateless automaton" ist, oder? Das hieße dann auch, daß es eine unendliche Schleife wird, zumindest wenn Ringstrukturen auch als Ringe betrachtet werden.

jfheins 16. Jan 2005 17:19

Re: 2D-Strukturformel als String darstellen
 
Also, wichtig ist eine liste, oder so, die als var-Parameter übergeben wird.
Da trägt sich jeder Knoten erstmal ein.
Und dann ruft er die Knoten auf, mit denen er verbunden ist, aber die noch nicht aufgerufen wurden.

Beispiel von oben:
Code:
X - Y
|   |
V - W
Es wird bei einem beliebigen Knoten angefangen, hier X

:arrow: Koordinaten von X werden in den String geschrieben
:arrow: X wird in die Liste eingetragen
:arrow: Y und V (Koord.) werden in String geschr.
:arrow: Rekursion mit Y


:arrow: :arrow: Koordinaten von Y werden in den String geschrieben
:arrow: :arrow: Y wird in die Liste eingetragen
:arrow: :arrow: W (Koord.) wird in String geschr. (da X bereits drin ist > Liste)
:arrow: :arrow: Rekursion mit W


:arrow: :arrow: :arrow: Koordinaten von W werden in den String geschrieben
:arrow: :arrow: :arrow: W wird in die Liste eingetragen
:arrow: :arrow: :arrow: V (Koord.) wird in String geschr. (da Y bereits drin ist > Liste)
:arrow: :arrow: :arrow: Rekursion mit V


:arrow: :arrow: :arrow: :arrow: Koordinaten von V werden in den String geschrieben
:arrow: :arrow: :arrow: :arrow: V wird in die Liste eingetragen
:arrow: :arrow: :arrow: :arrow: Alle Verbindungspunkte in der Liste > Rückgabe des Strings (V:; )


:arrow: :arrow: :arrow: Ergebnis der Rekursion anhängen und String zurückgeben (W:V; V:; )


:arrow: :arrow: Ergebnis der Rekursion anhängen und String zurückgeben (Y:W; W:V; V:; )


:arrow: Ergebnis der Rekursion anhängen (X:Y,V; Y:W; W:V; V:; )
:arrow: Rekursion mit V


:arrow: :arrow: V bereits in der Liste > Leerstring zurück


:arrow: Ergebnis der Rekursion anhängen
:arrow: zurückgeben des Strings (X:Y,V; Y:W; W:V; V:; )

Assarbad 16. Jan 2005 17:24

Re: 2D-Strukturformel als String darstellen
 
Okay, jetzt habe ich die Bindungen, aber dann fehlt ja noch die Struktur ...

Assarbad 16. Jan 2005 17:26

Re: 2D-Strukturformel als String darstellen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich überlege schon, ob ich einfach einen XymTeX-kompatiblen Parser baue ... oder zumindest eine ähnliche Struktur wie XymTeX ansetze. Dort werden bestimmte Strukturen vorgegeben, die dann auch verschachtelt werden dürfen.

ZB \bzdrv und \bzdrh sind Benzolringe, bei denen man bestimmte Einstellungen vornehmen kann (Soll der Aroma-Ring oder die verteilten Valenzen angezeigt werden) und die 6 Ringatome belegen kann.

Es muß garnicht so schön aussehen, wie die Tabelle im Anhang (hab ich mit XymTeX erstellt) - aber zumindest die Struktur muß zum Erstellen einer Space Matrix noch erhalten bleiben.

jfheins 16. Jan 2005 17:31

Re: 2D-Strukturformel als String darstellen
 
Die ergibt sich doch durch die Koordinaten automatisch ... :gruebel:

Mann muss dann halt die Beschreibungs- von der Darstellungsebene trennen, wenn in der Beschreibungsebene auch negative Werte auftreten können sollen ...

Assarbad 16. Jan 2005 20:38

Re: 2D-Strukturformel als String darstellen
 
Ich habe mir ein paar Anregungen von http://www.xml-cml.org/ geholt und werde nun einen eigenen Dialekt davon benutzen, der sich aber zumindest an XML hält.

Beispiel:
Code:
<?xml version="1.0" encoding="ISO-8859-1"?>
<molecule title="Molekülname">
  <string title="comments">Kommentar</string>

  <atomArray>
    <atom id="a1" elementType="O" x2="1.0" y2="1.0" hydrogenCount="0" />
    <atom id="a2" elementType="C" x2="2.0" y2="1.0" hydrogenCount="0" />
  </atomArray>

  <bondArray>
    <bond id="b1" atomRefs2="a1 a2" order="2" />
  </bondArray>
</molecule>
Ich brauche nämlich noch mehr Node-Elemente als <molecule>.

Danke aber einstweilen für deine Hilfe. Deine Anregungen haben zumindest auch ein paar andere Überlegungen bei mir gefördert.


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