![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Inventar
![]() Registriert seit: 12.10.2000
Ort: Wien
Alter: 76
Beiträge: 1.963
|
![]() 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 |
![]() |
![]() |
![]() |
#2 |
Master
Registriert seit: 20.12.1999
Beiträge: 636
|
![]() nein ... vb braucht keine pointer (kann auch keine)
da ich kein PL/1 kann solltest du dein prob. genauer beschreiben Atlan |
![]() |
![]() |
![]() |
#3 |
Inventar
![]() Registriert seit: 12.10.2000
Ort: Wien
Alter: 76
Beiträge: 1.963
|
![]() 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 |
![]() |
![]() |
![]() |
#4 |
Master
![]() |
![]() 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««««««| ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ |
![]() |
![]() |
![]() |
#5 |
Master
Registriert seit: 20.12.1999
Beiträge: 636
|
![]() 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 |
![]() |
![]() |
![]() |
#6 |
Inventar
![]() Registriert seit: 12.10.2000
Ort: Wien
Alter: 76
Beiträge: 1.963
|
![]() 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 |
![]() |
![]() |
![]() |
#7 |
Veteran
![]() |
![]() <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. |
![]() |
![]() |
![]() |
#8 |
Veteran
![]() |
![]() 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 |
![]() |
![]() |
![]() |
#9 |
Master
Registriert seit: 20.12.1999
Beiträge: 636
|
![]() @Punschkrapfen
Jo stimmt, aber ich zähle die win32 API nicht mehr zu VB cu Atlan |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|