- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 11

Thema: Array an Funktion übergeben

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578

    Array an Funktion übergeben

    Hi,

    ich möchte einen String nach bestimmten Zeichen durchsuchen. Da ich aber wenig Zeit dafür verwenden kann / darf, möchte ich mir selbst eine Funktion schreiben. Dazu lege ich ein Byte-Array als Overlay über einen String, bis hierhin ja noch kein Problem. Jetzt brauche ich eine Funktion, die mir die Position dieses Zeichens als Byte zurückgibt, das hab ich auch schon:
    Code:
    Function Searchstring(byval Strar As Byte , Byval Strsearch As Byte) As Byte
    
       Local I As Byte
    
       Searchstring = 0
    
       For I = 1 To 255 Step 1
          If Strar(i) = 10 Then                                 'Lf
             Exit For
          End If
          If Strar(i) = Strsearch Then
             Searchstring = I
             Exit For
          End If
       Next I
    
    
    End Function
    Der Code ist noch nicht optimiert, aber das mache ich erst, wenns funktioniert. Das Problem ist, wenn ich die Funktion aufrufe:
    Code:
       Tmp = Searchstring(gps_ovl(1) , 58)
    arbeitet er nur mit dem ersten Byte des Arrays, weils eben übergeben wurde. Ich möchte aber das ganze Array übergeben. Wie geht das? Bzw. geht das in Bascom überhaupt?
    Ich hab schon dran gedacht, die Speicheradresse des ersten Bytes zu übergeben und dann immer zu inkrementieren, aber die Lösung gefällt mir nicht so gut...
    Byref kann ich fürs Array nicht nutzen, da ich dann für jeden String eine eigene Funktion bräuchte und das zuviel Platz verbrauchen würde, den ich nicht habe.
    Ich hoffe ihr versteht mein Problem und jemand kann mir helfen?!

    Vielen Dank & Gruß
    Chris

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo Chris,
    wenn du wenig Zeit hast, dann geht ByVal eigentlich gar nicht, denn dann würde der ganze String in den Frame kopiert, was unendlich Zeit benötigt. Wieso du dann für jeden String eine eigene Funktion brauchst, verstehe ich nicht.

    Wenn du die Funktion so deklarierst:
    Declare Function Searchstring(Strar() as byte, strsearch as byte) as byte
    dann funktioniert die Übergabe als Array.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hi,

    ich weiß, aber anders weiß ich momentan nicht, wie ichs machen soll!?
    Wenn ich es so deklariere und dann so aufrufe:
    Code:
       Tmp = Searchstring(gps_ovl(1) , 58)
    gibts einen Fehler: "Byval should be used" weil eben gps_ovl() nicht in der Funktionsdeklaration drinnen ist.
    Mit Byref greife ich ja auf den schon vorhandenen String zu, d.h. ich muss schon beim Programm schreiben festlegen, welchen String ich verwenden will. Wenn ich jetzt 5 Strings habe (wie in meinem Fall), dann bräuchte ich doch 5 Funktionen, wenn ich Byref verwende, oder verstehe ich da was falsch?

    Gruß
    Chris

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo Chris,
    den ByVal Hinweis bekommst du für die 58, weil er die ja nicht per ByRef übergeben kann.
    In der Funktionsdeklaration ist natürlich ein lokales Array drin, nicht das Argument des Aufrufs. Daher brauchst du keine 5 Funktionen.

    Declare Function Searchstring(Strar() as byte, byVal strsearch as byte) as byte
    Tmp = Searchstring(gps_ovl(1) , 58)

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    31
    Beiträge
    1.578
    Hi,

    ok, der Fehler ist schonmal weg, danke!
    Ich dachte immer, mit Byref arbeitet man quasi mit einem Pointer, aber da war ich wohl falsch informiert.
    Jetzt meckert er aber wieder:
    Code:
    $sim
    $regfile = "xm32a4def.dat"
    $crystal = 32000000
    $framesize = 100
    $hwstack = 100
    $swstack = 100
    
    $lib "xmega.lib"
    $external _xmegafix_clear
    $external _xmegafix_rol_r1014
    
    
    Config Osc = Disabled , 32mhzosc = Enabled
    Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1
    
    
    Declare Function Searchstring(strar() As Byte , Strsearch As Byte) As Byte
    
    
    
    Dim Gpsdata As String * 100
    Dim Gps_ovl(100) As Byte At Gpsdata Overlay
    
    Dim Tmp As Byte
    
    
    
    Gpsdata = "asdfkjadshfb:lasdfjha:lasdj:laksdfj:"
    
    
    
    Do
    
    
       Tmp = 58                                                 'Asc( ":")
       Tmp = Searchstring(gps_ovl(1) , Tmp)
       Print Tmp
    
    
    Loop
    
    End
    
    
    Function Searchstring(strar() As Byte , Strsearch As Byte) As Byte
    
       Local I As Byte
    
    
       Searchstring = 0                                         'Vorbelegung, wenn Zeichen nicht gefunden
    
       For I = 1 To 255 Step 1
          If Strar(i) = 10 Then                                 'Lf
             'Exit For
          End If
          If Strar(i) = Strsearch Then
             Searchstring = I
             'Exit For
          End If
          Print Asc(strar(i)) ; ":" ;
       Next I
    
    
    End Function
    Bei der Zeile "If Strar(i) = 10 Then" ....

    Gruß
    Chris

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Arbeitest du vielleicht mit einer älteren Version des Compilers?
    Irgendwann wurde das mal umgestellt. Bei mir (2.0.7.6) meckert er nicht.

Ähnliche Themen

  1. Register an Funktion übergeben
    Von EDatabaseError im Forum C - Programmierung (GCC u.a.)
    Antworten: 15
    Letzter Beitrag: 02.11.2008, 15:10
  2. array an subs übergeben?
    Von rathma im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 09.05.2007, 14:47
  3. Datenregister an Funktion übergeben
    Von ach-feld im Forum C - Programmierung (GCC u.a.)
    Antworten: 10
    Letzter Beitrag: 21.03.2006, 09:11
  4. Variable in Funktion übergeben!?
    Von BASTIUniversal im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 5
    Letzter Beitrag: 04.03.2006, 17:19
  5. ARRAY an Sub ider Function übergeben
    Von darwin.nuernberg im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 15.01.2006, 13:38

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests