String an Function übergeben und wieder zurückschreiben

  • VB6

Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von schoeler.k.

    String an Function übergeben und wieder zurückschreiben

    Hallo zusammen,

    eine Frage hätte ich noch. Ich habe folgenden Code:

    Visual Basic-Quellcode

    1. Dim schreiben As String
    2. schreiben = file.Name
    3. 'Funktion "unterstriche2" ausführen
    4. If (CheckStriche.Value = 1) Then
    5. unterstriche2
    6. End If


    Visual Basic-Quellcode

    1. Private Function unterstriche2
    2. On Error Resume Next
    3. 'falls in dem dateiname ein _ vorkommt
    4. If InStr(file.Name, "_") > 0 Then
    5. 'soll dieser durch ein leerzeichen ersetz werden
    6. schreiben = Replace(file.Name, "_", " ")
    7. End If
    8. End Function


    Ich hätte nun gern, dass die Variable "schreiben" an die Funktion übergeben wird und nachdem die funktion ausgeführt wurde wieder zurückgegeben wird.
    Wie funktioniert das?
    Danke schonmal für Hilfe.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „inoverse“ ()

    Dieses Forum ist leider nicht da, um dir fertigen Code zu liefern, sondern dich in die richtige Richtung zu bringen.
    Ich habe dein Problem gegoogled und das war nur der erste Treffer, also Frage ich mich, warum versuchst du nicht erstmal selbst dein Problem zu lösen, statt hier einen Thread zu eröffnen?

    EDIT:
    Wieder mal die böse SuFu, die man benutzen kann:
    [VB 6.0 und älter] Function - 2 Parameter zurückgeben
    :thumbup:

    Es hilft dir nicht, wenn jetzt jemand dein Beispiel für dich löst, sondern du dein Problem verstehst und es dann selbst löst. Nur so wirst du in der Programmierung weiter kommen.

    Grüße,
    aetium

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „aetium“ ()

    inoverse schrieb:

    Könntest du mir das einmal anhand meines beispieles zeigen?

    Public Function Foo(byval rein as string) As String
    Return rein & "Raus"
    End function

    BTW: Welchen nicht völlig blödsinnigen Grund gibt es, dass ein kompletter anfänger VB6 verwendet und nicht VB.Net (inder Version 2008 oder 2010)?
    @ aetium

    ich habe natürlich selbst gegoogelt. Das problem ist nur ich bekomme es im groben auch zustande, nur funktionier der befehl "return" nicht. Bekomme immer die fehlermeldung Compile error - syntax error jeoch kann ich keinen syntax fehler finden.
    @picoflop
    wie gesagt return funktioniert nicht....
    (übungsaufgabe berufsschule. Grundlagen)

    inoverse schrieb:

    wie gesagt return funktioniert nicht....

    Ich wette um 100 Euro, DASS Return funktioniert.


    übungsaufgabe berufsschule. Grundlagen

    Das bedeutet zweierlei:
    a) Aufpassen in der Schule ist nicht deine starke Seite
    b) Der Fachkräftemangel ist hausgemacht, wenn man an Schulen immer noch mit VB6 arbeitet. Entweder nimmt man eine "Lernsprache" (wie Pascal bzw seine "Nachfolger") oder man verwendet eine aktuelle (!) objektorientierte Programmiersprache. Alternativ lehrt man das Programmieren OHNE je einen Computer anzufassen.

    Schönen Gruß an den Lehrkörper und ich halte ihr Konzept für schwachsinnig und kontraproduktiv.

    funktioniert nicht.


    Nein die Aufgabenstellung war, dass wir uns über die unterrichtsfrei zeit auf der arbeit mit älteren programmiersprachen beschäftigen sollen und dazu einige übungsaufgaben machen.
    Normal lerne ich ja C#.
    VB6 mache ich also jetzt genau erst 2 tage...

    inoverse schrieb:

    funktioniert nicht.

    Doch.
    Du hast eine Function Deklariert OHNE Rückgabeparameter (weil du kein "As" geschrieben hast), also kannst/darfst du auch nix zurückgegben, In meinem Beispielcode oben sieht das irgendwie anders aus oder? Warum willst du Code haben, wenn du ihn nicht liest/verstehst?
    Geh mal mit dem Cursor auf Function und drücke auf F1 (Hilfe).
    Da kommt eine seite hoch, in der sollte stehen, wie die Syntax für Funktionen mit ByRef-Parametern ist.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Visual Basic-Quellcode

    1. Dim schreiben As String
    2. schreiben = file.Name
    3. 'Funktion "unterstriche2" ausführen
    4. If (CheckStriche.Value = 1) Then
    5. unterstriche2(schreiben)
    6. End If
    7. Private Function unterstriche2(byVal schreiben as string) as string
    8. On Error Resume Next
    9. 'falls in dem dateiname ein _ vorkommt
    10. If InStr(file.Name, "_") > 0 Then
    11. 'soll dieser durch ein leerzeichen ersetz werden
    12. schreiben = Replace(file.Name, "_", " ")
    13. 'return schreiben
    14. End If
    15. End Function
    Wie kommt denn file bzw file.Name in die Funktion rein?
    Deine Funktion hat keinen Rückgabewert.
    Das müsste Dir als C#-Programmierer auffallen.
    Dann musst Du es halt richtig machen:

    Visual Basic-Quellcode

    1. Private Function unterstriche2(byVal schreiben as string) as string
    2. On Error Resume Next
    3. 'falls in dem dateiname ein _ vorkommt
    4. If InStr(schreiben, "_") > 0 Then
    5. 'soll dieser durch ein leerzeichen ersetz werden
    6. schreiben = Replace(schreiben, "_", " ")
    7. 'return schreiben ' Das wäre doppelt gemoppelt
    8. End If
    9. End Function
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja ich habe es auch so wie du sagst, dass ist mir schon klar, trotzdem entfernt er mir die unterstriche nicht.
    Ich hab mal nen Breakpoint gesetzt und sehe, dass er den replace nicht macht.. oO

    Rückgabewert habe ich schon nur gibt er mir den string mit den unterstrichen zurück.

    EDIT: Die Variable schreiben bleit immer unverändert, was ja nicht sein sollte. (Selbst mit ByRef funktioniert es nicht)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „inoverse“ ()

    Dann sieh Dir mal die VB6-Syntax von Replace an.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Entweder du verwendest den Return-Wert einer Funktion

    Visual Basic-Quellcode

    1. Private Function ReplaceUnderscores(ByVal InString As String) as String
    2. Return Instring.Replace ("_", " ")
    3. 'Alternative geht auch der VB6-Modus: Return Replace (InString,"_"," ")
    4. End Function
    5. Sub Main
    6. Debug.Print ReplaceUnderScores("This_Text")
    7. End Sub

    oder du überschreibst die Variable in der Unterfunktion, dann musst du sie ByRef übergeben

    Visual Basic-Quellcode

    1. Private Sub ReplaceUnderscores(ByRef TheString As String)
    2. TheString = TheString.Replace("_", " ")
    3. End Function
    4. Sub Main
    5. Dim MyString as String = "This_Text"
    6. ReplaceUnderscores (MyString)
    7. Debug.Print MyString
    8. End Sub

    Wenn du nur einen Wert zum modifizieren benötigst, ist die Rückgabe über Return immer eleganter.
    Wenn du aber mehrere Rückgabewerte willst, kommst du um eine ByRef-Übergabe nicht herum.
    Bsp:

    Visual Basic-Quellcode

    1. Function SplitName (ByVal Name as String, ByRef Vorname as String, ByRef Nachname as String) As Integer
    2. Dim NameArray() as String = Name.Split()
    3. Dim ElementCount as Integer = UBound(NameArray)
    4. Vorname = NameArray(0)
    5. If ElementCount > 0 Then Nachname=NameArray(1) Else Nachname=""
    6. Return ElementCount
    7. End Function
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „petaod“ ()