AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein 2D-Strukturformel als String darstellen
Thema durchsuchen
Ansicht
Themen-Optionen

2D-Strukturformel als String darstellen

Ein Thema von Assarbad · begonnen am 16. Jan 2005 · letzter Beitrag vom 16. Jan 2005
Antwort Antwort
Assarbad
(Gast)

n/a Beiträge
 
#1

2D-Strukturformel als String darstellen

  Alt 16. Jan 2005, 17:19
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 :-]
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

Re: 2D-Strukturformel als String darstellen

  Alt 16. Jan 2005, 17:26
Möchtest du eine Valenzstrichformel abspeichern ?

Ist es wichtig, dass das Ergebnis lesbar ist, oder ist das nur zum parsen ?
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#3

Re: 2D-Strukturformel als String darstellen

  Alt 16. Jan 2005, 17:33
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.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#4

Re: 2D-Strukturformel als String darstellen

  Alt 16. Jan 2005, 17:39
Wie wäre es mit einer rekursiven Funktion, die
"Ihren" Knoten in den String schribt
Verbindungen zu anderen Knoten dazuschreibt, der noch nicht beschrieben wurde
sich für jeden dieser Knoten aufruft
Die Rückgabe an den String anhängt
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 ...
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#5

Re: 2D-Strukturformel als String darstellen

  Alt 16. Jan 2005, 17:55
Zitat von jfheins:
Wie wäre es mit einer rekursiven Funktion, die
"Ihren" Knoten in den String schribt
Verbindungen zu anderen Knoten dazuschreibt, der noch nicht beschrieben wurde
sich für jeden dieser Knoten aufruft
Die Rückgabe an den String anhängt
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.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#6

Re: 2D-Strukturformel als String darstellen

  Alt 16. Jan 2005, 18:19
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

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


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


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


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


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


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


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


V bereits in der Liste > Leerstring zurück


Ergebnis der Rekursion anhängen
zurückgeben des Strings (X:Y,V; Y:W; W:V; V:; )
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#7

Re: 2D-Strukturformel als String darstellen

  Alt 16. Jan 2005, 18:24
Okay, jetzt habe ich die Bindungen, aber dann fehlt ja noch die Struktur ...
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#8

Re: 2D-Strukturformel als String darstellen

  Alt 16. Jan 2005, 18:26
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.
Angehängte Dateien
Dateityp: pdf unifac-table1_788.pdf (64,4 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#9

Re: 2D-Strukturformel als String darstellen

  Alt 16. Jan 2005, 18:31
Die ergibt sich doch durch die Koordinaten automatisch ...

Mann muss dann halt die Beschreibungs- von der Darstellungsebene trennen, wenn in der Beschreibungsebene auch negative Werte auftreten können sollen ...
  Mit Zitat antworten Zitat
Assarbad
(Gast)

n/a Beiträge
 
#10

Re: 2D-Strukturformel als String darstellen

  Alt 16. Jan 2005, 21:38
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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:42 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