AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Übersetzung in VB-Code

Ein Thema von hansklok · begonnen am 26. Nov 2014 · letzter Beitrag vom 8. Dez 2014
Antwort Antwort
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#1

Übersetzung in VB-Code

  Alt 26. Nov 2014, 23:36
Hallo,

ich versuche grade Object Pascal Code nach VisualBasic bzw. Xojo zu übersetzen. An dieser Steller hapert es:
Code:
type
  TGEDCOMApproximated =
    (daExact, daAbout, daCalculated, daEstimated);

const
  GEDCOMDateApproximatedArray: array[TGEDCOMApproximated] of string[3] =
    ('', 'ABT', 'CAL', 'EST');
Kann mir bitte jemand einen Hinweis dazu geben?Es geht speziell darum "array[TGEDCOMApproximated] of string[3]".

Danke und gute Nacht
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Übersetzung in VB-Code

  Alt 27. Nov 2014, 07:46
Code:
  Public Enum TGEDCOMApproximated
     daExact = 0
     daAbout = 1
     daCalculated = 2
     daEstimated = 3
  End Enum
Code:
const varArray() As Variant = Array("", "ABT", "CAL", "EST")
Anschließend kannst du das Array mit split und den Delemiter "," auseinandernehmen

Code:
Dim fvarArray As String

varArray = Split(fvarArray , ",")
varArray(0) = ""
varArray(1) = "ABT"
usw..

gruss
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#3

AW: Übersetzung in VB-Code

  Alt 27. Nov 2014, 07:51
Afaik (und kurze Google-Suche bestätigt das) kann man in VB keine konstanten Arrays deklarieren. Das folgende wäre in ungefähr eine machbare Aproximation:

Code:
Enum TGEDCOMApproximated [ As Integer ]
  daExact
  daAbout
  daCalculated
  daEstimated
End Enum

Const AVALUES = ":ABT:CAL:EST"
Public GEDCOMDateApproximatedArray(3) As String
 
Public Sub FillArrayInInitialization()
    Dim vntTemp As Variant
    Dim intIndex As Integer
    vntTemp = Split(AVALUES, ":")
     
    For intIndex = 0 To 3
        GEDCOMDateApproximatedArray(intIndex) = vntTemp(intIndex)
    Next
End Sub
Ralph
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Übersetzung in VB-Code

  Alt 27. Nov 2014, 07:56
Zitat:
keine konstanten Arrays deklarieren


OK dann!
Code:
Enum TGEDCOMApproximated [ As Integer ]
   daExact
   daAbout
   daCalculated
   daEstimated
 End Enum
dein [ as Interger ] kannst dir sparen
Und Ich die zahlen dahinter die nummerieren sich automatisch von 0 -> endlos und sind Integer auch ohne angaben

Ach so wenn du es so genau nimmst.
Solltest du auch das Public vor
Code:
Public GEDCOMDateApproximatedArray(3) As String
in Privat ändern.. denn benutzerdefinierte Arrays sind in öffentlichen Mitgliedern von Objektmodulen nicht zugelassen.

Danach sollte es stimmen.

gruss

Geändert von EWeiss (27. Nov 2014 um 08:09 Uhr)
  Mit Zitat antworten Zitat
DbSam

Registriert seit: 27. Nov 2014
5 Beiträge
 
#5

AW: Übersetzung in VB-Code

  Alt 27. Nov 2014, 09:52
Guten Morgen Hans,

wie schon geschrieben, es gibt in VB.Net keine Arrays als Konstanten.

Es gibt sicher ein paar mögliche Lösungen für Dein Problem. Leider kenne ich den Hintergrund nicht ganz genau und kann daher nur eine funktionierende Lösung anbieten, welche mutmaßlich auf Deine Frage passen sollte.


Da .Net komplett objektorientiert aufgebaut ist, wäre eine mögliche Lösung die folgende - wenn ich Dein Anliegen richtig verstanden habe:
Zuerst eine kleine Miniklasse bauen, in etwa so:
Code:
Public Class GEDCOMDateApproximatedColl
    Inherits CollectionBase
    Public Enum eGEDCOMApproximated
        daExact
        daAbout
        daCalculated
        daEstimated
    End Enum

    Public Sub New()
        Me.Add("")
        Me.Add("ABT")
        Me.Add("CAL")
        Me.Add("EST")
    End Sub

    Private Sub Add(ByVal Item As String)
        Dim o As New GEDCOMApproximated
        o.Value = Item
        Me.InnerList.Add(o)
    End Sub

    Public Function GEDCOMDateApproximated(ByVal Item As eGEDCOMApproximated) As String
        Dim o As GEDCOMApproximated = CType(Me.InnerList(Item), GEDCOMApproximated)
        Return o.Value
    End Function

    Protected Class GEDCOMApproximated
        Public Property Value As String
    End Class
End Class
Sieht etwas aufwendig aus, geht sicher auch noch etwas kürzer.
Der Vorteil ist, dass alles in dieser Klasse gekapselt definiert und beliebig erweiterbar ist.

Deklaration und Aufruf funktioniert dann in etwa so:
Code:
    'Deklaration erfolgt an der Stelle wie und wo dies benötigt wird:
    Public DateApproximated As New GEDCOMDateApproximatedColl


    'Der Aufruf in etwa so:
    Private Sub Beispiel() Handles Button1.Click
        MessageBox.Show(Me.DateApproximated.GEDCOMDateApproximated(GEDCOMDateApproximatedColl.eGEDCOMApproximated.daAbout))
    End Sub
Mit der Hilfe von Intellisense muss man gar nicht so viel tippen wie es hier ausschaut...
Sicherlich kannst Du diesen Vorschlag noch verbessern, da Du ja das nötige Hintergrundwissen der von Dir benötigten Umsetzung besitzt.

Man könnte evtl. noch mit Generics, also einer 'List of T' arbeiten, muss dann aber auch wieder das Enum an anderer Stelle bauen. Deshalb habe ich das hier gleich alles gekapselt.


Gruß Carsten

PS:
Wobei man an den Namen noch etwas 'feilen' sollte...
Der Code sollte trotzdem nach menschlichem Ermessen lauffähig sein, wenn er denn richtig eingebaut wird.
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#6

AW: Übersetzung in VB-Code

  Alt 27. Nov 2014, 13:06
Geht das nicht so:
Code:
..
Dim GEDCOMDateApproximatedArray= {"", "ABT", "CAL", "EST"}
..
Oder redet ihr von einem anderen VB als dem hier?
  Mit Zitat antworten Zitat
DbSam

Registriert seit: 27. Nov 2014
5 Beiträge
 
#7

AW: Übersetzung in VB-Code

  Alt 27. Nov 2014, 13:44
Hallo zurück,

ja, natürlich würde Deine Zeile Code auch ausreichen.
Ein Array kann man leider nicht als Konstante deklarieren, genau das war aber die Frage.
Außerdem muss man immer daran denken, welches Enum nun gerade für dieses Array genommen werden soll.
Etc. pp. Also insgesamt funktionsfähig, aber doch sehr wackelig.

Mein Codebeispiel dient als Demonstration dieser Funktionalität, gekapselt in einer Klasse. Diese ist problemlos erweiterbar, ergibt einfach lesbaren Code(wenn anständige Namen vergeben wurden ) und verhindert falsche Zugriffe(vgl. Wertabfrage außerhalb des Arrays) schon beim programmieren. In größeren Projekten sind solche gekapselten Funktionalitäten ein unschlagbarer Vorteil.

Dass es andere Wege gibt, welche anscheinend einfacher sein könnten, das habe ich nicht ausgeschlossen.
Wenn man in einer objektorientierten Umgebung arbeitet und bei der Umstellung an ein paar Stellen auf Probleme stößt, warum dann nicht gleich richtig lösen?

Außerdem kann man an den zwei Delphi-Codefetzen doch nur erahnen, wann, wo und wie oft dies nun benötigt wird. Je nachdem kann man das nun ausbauen oder nicht...

Mal sehen wie sich Hans dazu äußert...



Gruß Carsten

Edit:
Wobei ich mich frage, warum diese Werte nicht in eine separate (Steuerungs-)Tabelle ausgelagert werden und man dann damit arbeitet. Aber das ist eine andere Frage.

Geändert von DbSam (27. Nov 2014 um 14:11 Uhr)
  Mit Zitat antworten Zitat
hansklok

Registriert seit: 14. Apr 2004
Ort: Karlsruhe
318 Beiträge
 
Delphi 2010 Architect
 
#8

AW: Übersetzung in VB-Code

  Alt 28. Nov 2014, 18:21
Hallo,

ich versuche grade Object Pascal Code nach VisualBasic bzw. Xojo zu übersetzen. An dieser Steller hapert es:
Code:
type
  TGEDCOMApproximated =
    (daExact, daAbout, daCalculated, daEstimated);

const
  GEDCOMDateApproximatedArray: array[TGEDCOMApproximated] of string[3] =
    ('', 'ABT', 'CAL', 'EST');
Kann mir bitte jemand einen Hinweis dazu geben? Es geht speziell darum "array[TGEDCOMApproximated] of string[3]".

Danke und gute Nacht
@DbSam
...aus meinem Beitrag gehen alle Eckpunkte exakt hervor
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#9

AW: Übersetzung in VB-Code

  Alt 28. Nov 2014, 18:54
Fand ich auch. Den "Mumpitz" würde ich gerne sehen...
  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 00:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz