Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Wie verkette ich richtig Strings?

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ooops



Anmeldungsdatum: 03.10.2005
Beiträge: 16
Wohnort: Bremen

BeitragVerfasst am: 28.03.2009, 20:06    Titel: Wie verkette ich richtig Strings? Antworten mit Zitat

Hallo, hier FB-Anfänger (sonst VBA)! Meine Frage:

Code:
Declare Function num (ByVal S As String) As String

Function num (ByVal S As String) As String
Dim i as integer
num = ""
For i = 1 To Len(S)
  If 5 > Abs(Asc(Mid(S, i, 1)) - 52.5) Then _
  num = num & Mid(S, i, 1)
Next
End Function


meldet beim Kompilieren:

num.bas(cool error 1: Argument count mismatch, found '&' in 'num = num & Mid(S, i, 1)'

Nehme ich + statt &, kommt die gleiche Meldung. Was sollte ich anders machen? Danke für Antworten!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 28.03.2009, 20:13    Titel: Antworten mit Zitat

Hallo,

so funktioniert's:
Code:
Declare Function num (ByVal S As String) As String

Function num (ByVal S As String) As String
Dim i as integer
Dim temp as string
temp = ""
For i = 1 To Len(S)
  If 5 > Abs(Asc(Mid(S, i, 1)) - 52.5) Then _
  temp = temp & Mid(S, i, 1) 'oder kürzer: temp &= Mid(S, i, 1)
Next
num = temp 'oder: Return temp
End Function

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ooops



Anmeldungsdatum: 03.10.2005
Beiträge: 16
Wohnort: Bremen

BeitragVerfasst am: 28.03.2009, 20:17    Titel: Antworten mit Zitat

Funktionswerte dürfen anscheinend so in der Funktion selbst nicht behandelt werden. VBA ist da schlampiger. Ohne Meldung läuft durch:
Code:

Declare Function num (ByVal S As String) As String

Function num (ByVal S As String) As String
Dim i as integer, n as string
n = ""
For i = 1 To Len(S)
  If 5 > Abs(Asc(Mid(S, i, 1)) - 52.5) Then _
  n = n + Mid(S, i, 1)
Next
num = n
End Function
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ooops



Anmeldungsdatum: 03.10.2005
Beiträge: 16
Wohnort: Bremen

BeitragVerfasst am: 28.03.2009, 20:23    Titel: Antworten mit Zitat

Sebastian hat Folgendes geschrieben:
Hallo,

so funktioniert's: (Code)
Viele Grüße!
Sebastian


Danke, Sebastian!

Nächstes Problem: Commandzeilen-Error bei fbc:
"Syntax Error in def file num.def:0"

Wattn dat? Habe nur num.bas und num.dll ...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Nitroxis



Anmeldungsdatum: 27.02.2008
Beiträge: 300
Wohnort: Irgendwo...

BeitragVerfasst am: 28.03.2009, 20:40    Titel: Antworten mit Zitat

Du musst die Funktion als Export funktion definieren.
Also so:
Code:
Declare Function num (ByVal S As String) As String

Function num (ByVal S As String) As String Export '<<<<<<
Dim i as integer
Dim temp as string
temp = ""
For i = 1 To Len(S)
  If 5 > Abs(Asc(Mid(S, i, 1)) - 52.5) Then _
  temp = temp & Mid(S, i, 1) 'oder kürzer: temp &= Mid(S, i, 1)
Next
num = temp 'oder: Return temp
End Function
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ooops



Anmeldungsdatum: 03.10.2005
Beiträge: 16
Wohnort: Bremen

BeitragVerfasst am: 28.03.2009, 20:53    Titel: Antworten mit Zitat

Hat auch geklappt! Keine Meldung mehr in der Kommandozeile.

In Excel habe ich nun die Referenzierung darauf:

Code:
Declare Function num Lib "num" Alias "nums@4" ( _
  ByVal S As String)

Function nums( _
  ByVal S As String)
   num S
   nums = S$
End Function


... aufgerufen in einer Zelle mit =nums(A1)

(in A1 steht ein String)

Excel meldet nun WERT! Das bedeutet: Die Funktion kennt es, denn wenn ich sage =numss(A1), fehlermeldet es NAME!

Hast Du dazu noch eine Idee?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 28.03.2009, 21:53    Titel: Antworten mit Zitat

ja grinsen
Beispiel FB\examples\dll\VB\fbside.bas

Code:
''
'' compile as: fbc fbside.bas -dll
''

#include once "windows.bi"
#include once "win/ole2.bi"

'' notice the mangling method, it must be "windows-ms" or VB won't find any function
extern "windows-ms"

   '':::::
   function dupme ( byval arg as zstring ptr ) as BSTR export
      dim res as BSTR
      
      '' Note: according to MSDN, VB will only accept an BSTR result in
      ''        Unicode format *if* a COM type-library is created for the
      ''       DLL that is been called, otherwise the BSTR result must
      ''       be in ANSI format, what is this case
      
      '' allocate a ANSI BSTR with twice the size
      res = SysAllocStringByteLen( arg, len( *arg ) * 2 )
      
      '' duplicate (BSTR's point to the data stream so just a cast is enough)
      *cast( zstring ptr, res ) += *arg
      
      '' return as-is
      function = res
      
   end function
   
end extern
Was für VB gilt, gilt auch für VBA!

EDIT/
siehe http://forum.qbasic.at/viewtopic.php?p=72452#72452
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz