WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   vb5 redefine möglich??? (http://www.wcm.at/forum/showthread.php?t=11014)

nordbahnfredi 28.10.2000 22:46

Hallo VB5-Spezialisten!

Kann man in VB5 einen string mit einer struktur überlagern?
Gibt's in VB5 pointer???

wie z. B. in PL/1:
variable ... based(addr(...)) oder variable ... based(pointer)

MfG

Nordbahnfredi

Atlan 14.11.2000 01:09

nein ... vb braucht keine pointer (kann auch keine)
da ich kein PL/1 kann solltest du dein prob. genauer beschreiben

Atlan

nordbahnfredi 14.11.2000 07:21

Hallo ATLAN !

Hier die Beschreibung meines Problems, vielleicht kannst Du dir etwas vorstellen.

Option Explicit

Dim Tag As Integer
Dim Monat As Integer
Dim Jahr As Integer
Dim Stunde As Integer
Dim Minute As Integer
Dim Sekunde As Integer

Dim parameter As String

' das aufrufende pgm. übergibt einen parameter mit
' folgendem Inhalt:
' Spalte 01-08 TT.MM.JJ
' 09-16 hh:mm:ss
' ich möchte nun auf jedes Feld einzeln zugreifen können
' also JJ, MM, TT, hh, mm und ss um die Felder einzeln
' auf bestimmte Inhalte zu prüfen.
'
' in PL/1 würde dies so aussehen:
'
' dcl parameter char(16);
' dcl 1 parm_struc based(addr(Parameter)),
' 2 struc_tag char(2),
' ......
' 2 struc_sekunde char(2);
'
' gibt es so etwas ähnliches in VB5 ???


Private Sub Form_Load()

parameter = Command()
Tag = struc_tag

If Tag > 31 Then
'Fehlermeldung
End If

' usw.
End Sub

MfG

Nordbahnfredi



Sonic 14.11.2000 10:05

Hi nordbahnfredi!

Wieso sagst du das denn nicht gleich!? :)

In VB kannst du ganz einfach einzelne stellen aus einen String auslesen mit mid$.
Syntax:

mid$(String,[stelle], [anzahl])

bsp.:

datum="14.11.2000"

tag=mid$(datum,1,2) 'liest ab dem 1. Zeichen 2 Zeichen lang in tag

Jahr=mid$(datum,7,4) 'liest ab dem 7. Zeichen 4 Zeichen ein

es gibt auch noch ähnliche Funktionen:

left(string, [länge]); right(string [länge]) lesen [länge] zeichen von links oder rechts.

ltrim (string); rtrim(string), trim (string) schneiden leerzeichen von links, rechts oder von links und rechts ab.

Ich hoffe das hilft dir weiter und war verständlich.

MfG


------------------
__________________
|»»»»»SONIC««««««|
¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Atlan 14.11.2000 12:10

Sonic hat vollkommen recht ;-)

das ist die einfachst metode, wie du zu deinen Daten kommst.
Der einzige nachteil, ist die vieleicht geschwindigkeit, da die mid$ Funktionen relativ langsam sind
um diesen Nachteil zu umgehen ist aber deutlich mehr programmieraufwand nötig. Es rentiert sich erst,
wenn du sehr oft die Mid Funktion verwenden würdest. Der vollstängigkeit halber werde ich dir ein paar tipps
geben.

du müsstest dir dazu ein Datenfeld erstellen, das du abfragen kannst. natürlich musst du es vorher dimesionieren
und mit daten befüllen

In Visual Basic können Sie mehrdimensionale Datenfelder deklarieren.
Die folgende Anweisung deklariert beispielsweise ein zweidimensionales Datenfeld mit
10 mal 10 Elementen in einer Prozedur:

Static MatrixA(9, 9) As Double

zum Beispiel:

Dim I As Integer, J As Integer
Static MatrixA(1 To 10, 1 To 10) As Double
For I = 1 To 10
For J = 1 To 10
MatrixA(I, J) = I * 10 + J
Next J
Next I


oder du verwendest ein Benutzterdefiniertes Datenfeld


zum Beispiel:

Option Explicit

Type TypeFehler
VBErr As Long
VBError As String
Funktion As String
Statement As Integer
MyError As String
BtnClicked As Integer
ODBCTabFirst As Integer
End Type


sub xy()

Dim Fehlertype(100) As TypeFehler
Dim Rück as variant
...
...
Fehlertype.VBErr = 120


Rück = Fehlertype.VBErr
Rück = Fehlertype.VBError
...
...

end sub

cu Atlan

nordbahnfredi 14.11.2000 13:58

Hallo SONIC! Hallo ATLAN!

Da soll noch einer etwas über die heutige Jugend sagen. Danke für eure Hilfe.

ich habe das Problem ursprünglich so gelöst:

parm als Textbox angelegt
dim jahr as integer
parm = command()
parm.selstart = 0
parm.sellength = 2
jahr = parm.seltext
usw.

Hat mir aber nicht so richtig gefallen. In PL/1 und COBOL am Großrechner gab's mehr und elegantere Möglichkeiten.

Mein Problem ist nun, wie lerne ich VB5 kennen?

mid$ gibt's auch in PL/1 z.B.
jahr = string(parm,1,2)

Bis zur nächsten Frage und
mfG

Nordbahnfredi


Punschkrapfen 23.11.2000 13:17

<BLOCKQUOTE><font size="1" face="Verdana, Arial">quote:</font><HR>Original erstellt von Atlan:
nein ... vb braucht keine pointer (kann auch keine)
<HR></BLOCKQUOTE>
Pointer sind "Long"-Variablen. Wenn man Windows-APIs verwendet braucht man sie auch. zB die Funktion EnumWindows liefert die Pointer zu allen Tasks die momentan aktiv sind über callback, dh man gibt einen Pointer auf eine eigene Funktion mit und EnumWindows ruft sie dann auf.

Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long

Public Function EnumWindowsCallback(ByVal lHWnd As Long, ByVal lMyParam As Long) As Long
'tu was
End Function

Call EnumWindows(AddressOf EnumWindowsCallback, 1)

der AdressOf - Operator erzeugt dabei einen Pointer auf die Funktion.

Punschkrapfen 23.11.2000 13:28

dcl 1 ty_datum,
3 jahr char(4),
3 monat char(2),
3 tag char(2);

würde ich in vb so formulieren:

Type tDatum
jahr As String
monat As String
Tag As String
End Type
dim ty_datum as tDatum

Befüllt wird es gleich, also ty_datum.jahr = "1234"

basen kann man das aber nicht

Atlan 23.11.2000 18:18

@Punschkrapfen
Jo stimmt, aber ich zähle die win32 API nicht mehr zu VB

cu Atlan


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag