-
        

Ergebnis 1 bis 8 von 8

Thema: Strings sind nicht lang genug

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    31.07.2005
    Beiträge
    224

    Strings sind nicht lang genug

    Anzeige

    Hi,

    ich hab folgenen code, mit dem ich text eingeben kann, nur irgendwann nach dem ca. 250ten Zeichen das ich eingebe kommt der gesamte eingegebene text auf dem display verstreut angezeigt.

    Code:
    $lib "lcd4busy.lbx"                                         'ersetzt die Standard LCD Bibliothek
    $regfile = "m644def.dat"
    $crystal = 8000000
    $baud = 19200
    
    Config Lcd = 16 * 2
    Const _lcdport = Portc
    Const _lcdddr = Ddrc
    Const _lcdin = Pinc
    Const _lcd_e = 1
    Const _lcd_rw = 2
    Const _lcd_rs = 3
    Dim A As Integer
    Dim B As String * 1
    Dim Zeile As String * 999
    Dim Zeichen As Integer
    Dim Fzeichen As Integer
    Dim Chapter As Integer
    Config Keyboard = Pind.5 , Data = Pind.6 , Keydata = Keydata
    Initlcd
    Cursor Off Noblink
    Cls
    Config Pind.7 = Output
    Portd.7 = 1 'Beleuchtung
    
    Zeile = ""
    A = 0
    B = ""
    Zeichen = 0
    Cursor On Noblink
    Do
    
    
      A = Getatkbd()
    
      If A > 0 And A <> 7 And A <> 42 And A <> 8 Then
        Cls
        If A = 121 Then
          A = 122
        Elseif A = 122 Then
          A = 121
        End If
    
        B = Chr(a)
        Zeile = Zeile + B
      End If
    
      If A = 42 Then
        Cursor Off Noblink
        Chapter = 16
        Do
          A = Getatkbd()
          If A = 54 Then Chapter = Chapter + 5
          If A = 52 And Chapter > 16 Then Chapter = Chapter -5
          Locate 1 , 1
          Lcd Left(zeile , Chapter)
        Loop Until A = 13
        Cls
        Lcd "Wait..."
        Waitms 100
        Cls
        A = 0
        Cursor On Noblink
      End If
    
    
       If A = 7 Then
        Cls
        Zeile = ""
      End If
    
      If A = 8 Then
        Zeichen = Len(zeile) - 1
        Zeile = Left(zeile , Zeichen)
        Cls
      End If
    
      Locate 2 , 1
      Fzeichen = 999 - Len(zeile)
      Lcd "F. Zeichen:" ; Fzeichen
      Locate 1 , 1
      If Len(zeile) > 16 Then Lcd Right(zeile , 15)
      If Len(zeile) <= 16 Then Lcd Zeile
    
    Loop
    
    
    Keydata:
    ' Shift-Taste nicht gedrückt
    Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , &H5E , 0
    Data 0 , 0 , 0 , 0 , 0 , 113 , 49 , 0 , 0 , 0 , 122 , 115 , 97 , 119 , 50 , 0
    Data 0 , 99 , 120 , 100 , 101 , 52 , 51 , 0 , 0 , 32 , 118 , 102 , 116 , 114 , 53 , 0
    Data 0 , 110 , 98 , 104 , 103 , 121 , 54 , 7 , 8 , 44 , 109 , 106 , 117 , 55 , 56 , 0
    Data 0 , 44 , 107 , 105 , 111 , 48 , 57 , 0 , 0 , 46 , 45 , 108 , 48 , 112 , 43 , 0
    Data 0 , 0 , 0 , 0 , 0 , 92 , 0 , 0 , 0 , 0 , 13 , 0 , 0 , 92 , 0 , 0
    Data 0 , 60 , 0 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0
    Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0
    
    ' Shift-Taste gedrückt
    Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
    Data 0 , 0 , 0 , 0 , 0 , 81 , 33 , 0 , 0 , 0 , 90 , 83 , 65 , 87 , 34 , 0
    Data 0 , 67 , 88 , 68 , 69 , 0 , 35 , 0 , 0 , 32 , 86 , 70 , 84 , 82 , 37 , 0
    Data 0 , 78 , 66 , 72 , 71 , 89 , 38 , 0 , 0 , 76 , 77 , 74 , 85 , 47 , 40 , 0
    Data 0 , 59 , 75 , 73 , 79 , 61 , 41 , 0 , 0 , 58 , 95 , 76 , 48 , 80 , 63 , 0
    Data 0 , 0 , 0 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 13 , 94 , 0 , 42 , 0 , 0
    Data 0 , 62 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0 , 0
    Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0

    Kann der String nur maximal 250 Zeichen lang sein oder liegts am Display oder woran sonst??? Wahrscheinlich hört es bei 255 Zeichen auf und es liegt daran das Bits nur bis 255 gehen, aber wie könnte ich es dann umgehen?

    Mfg

    Elektronik303

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Kann der String nur maximal 250 Zeichen lang sein oder liegts am Display oder woran sonst???
    Ein Blick in die Bascom-Hilfe hätte die Frage schon längst vollständig beantwortet.

    Unter "Language Fundamentals" steht "String (up to 254 bytes)......"
    Bacom checkt beim Compilieren zwar ob der String ins Ram paßt aber nicht ob die Längenangabe auch gültig ist sonst hättest du beim Compilieren eine Fehlermeldung bekommen.
    Ich habs mal als Anmerkung an MCS gemailt

    Wahrscheinlich hört es bei 255 Zeichen auf und es liegt daran das Bits nur bis 255 gehen,
    Richtig,die Grenze liegt darin das 8 Bit (1 Byte) als Längenangabe genutzt wird.

    In der Bascom-Hilfe geht der obige Satz weiter mit

    "....Strings are stored as bytes and are terminated with a 0-byte. A string dimensioned with a length of 10 bytes will occupy 11 bytes.
    "

    Damit ist dann auch schon fast erklärt warum ein String von den maximal 256 Byte nur 254 Zeichen lang sein kann.
    1 Zeichen für "Ende" (0-Byte) und ein weiteres vermutlich für Verwaltungszwecke.


    aber wie könnte ich es dann umgehen?
    Wenn du also unbedingt deine 999 Zeichen haben möchtest dann kannst du sie entweder auf 4 oder mehr Strings aufteilen ,ein Array draus machen oder du verwaltest sie gänzlich eigenständig indem du sie manuell speicherst.
    Gruß
    Ratber

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.11.2006
    Ort
    Geislingen a. d. Steige
    Alter
    26
    Beiträge
    344
    Wie währe es wenn du eine 16bit variable nehmen würdest?

    Martin

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Zitat Zitat von MartinFunk
    Wie währe es wenn du eine 16bit variable nehmen würdest?

    Martin
    ??

    Ich glaub du bist auf dem falschen Dampfer

    Der Zähler für Stringvariablen ist ein interner Zähler.
    8-bittig ist er weil die Entwickler bei MCS es eben so festgelegt haben.
    Gruß
    Ratber

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.11.2006
    Ort
    Geislingen a. d. Steige
    Alter
    26
    Beiträge
    344
    Oh sorry,
    hab mich da verdenkt.

    Martin

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    31.07.2005
    Beiträge
    224
    Ich kann ja mal ne Mail zu den Entwicklern schicken und mich beschweren Ne also dann muss ich das wohl aufteilen. Danke!

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    @Martin

    Oh sorry, Embarassed
    hab mich da verdenkt.
    Macht ja nix.


    @Elektronik

    Ich kann ja mal ne Mail zu den Entwicklern schicken und mich beschweren
    Ja,mach ruhig.
    Je mehr Leute sich was wünschen desto warscheinlicher wird es gemacht.
    Ich bin auch immer Frei mit Ideen.


    Ne also dann muss ich das wohl aufteilen.
    Ich würde Arrays nehmen.

    Da du ja eh jedes Zeichen einzeln einliest kann man das schön mit 2 Zählern machen.

    Edit: immer diese Schreibfehler
    Gruß
    Ratber

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    31.07.2005
    Beiträge
    224
    Hmm dann mach ichs mit Arrays Mail hab ich grad geschickt ^^

Berechtigungen

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