Deutsch
Forum

String in die Bereichsvariable bringen.

 

funkheld
Hallo, ich empfange jetzt Daten aus dem Clipboard.
Die Daten stehen ja dort als Text.
Mit:
text$=getclip$()
habe ich den text$ und mit Len erfahre ich die Länge.
Nun möchte ich den text$ in eine Bereichsvariable setzen um eine Zahl auszuwerten. Der String ist eigentlich eine Bytefolge und kann nicht mit "String" eingelesen werden, weil auch mitten drin eine "0" stehen kann.

Frage:
Wie bekomme ich den text$ in die Bereichsvariable zum auswerten?
Ich compiliere mit XPSE.

Danke.

Gruss
 
10.05.2012  
 




Jörg
Sellmeyer
Char verarbeitet auch Nullbytes.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
10.05.2012  
 



Genau, hier hilft die Prozedur char oder nutze die rtlMoveMemory Funktion.

XPSE-Kurzschreibweise:
string s="Mein Stringinhalt"
mem speicher=len(s)
rtlMoveMemory(speicher,addr(s),len(s))
//jetzt ist in der Bereichsvariable "speicher" der Stringinhalt
dispose speicher

oder:
var s$="Mein Stringinhalt"
declare speicher#
dim speicher#,len(s$)
char speicher#,0=s$
//jetzt ist in der Bereichsvariable "speicher" der Stringinhalt
dispose speicher#
 
10.05.2012  
 




funkheld
Ja, danke für die Vorschläge.

Gruss
 
10.05.2012  
 




funkheld
Jup, ich kann jetzt die Daten aus dem Clipboard empfangen und ausgeben.
Wenn jetzt dieses "if wert&=1" erfüllt ist und ich die Daten ausgeprintet habe, möchte ich anschliessend 5 Zählwerte weitergehen in der While-Schleife. Wie geht das?

Danke.
 {$cleq}
declare ende&,text$,bereich#,z&,laenge&,wert&
dim bereich#,128
ende&=1
Window 20,20-600,500

While Ende&

    sleep 5
    text$=getclip$()
    clearclip
    laenge&=len(text$)

    if laenge& > 5

        char bereich#,0=text$

        whileloop laenge&

            wert&=@byte(bereich#,&loop)

            if wert&=1

                print "tacho: ";
                print double(long(bereich#+&loop+1,0))

            endif

            if wert&=2

                print "bremse: ";
                print "bremse "+double(long(bereich#+&loop+1,0))

            endif

        endwhile

    endif

EndWhile

End
 
11.05.2012  
 



Machste einfach eine eigene Zählschleife z.B.:
var i&=0

while 1

    add i&,1

    if ...

        add i&,4
        continue...

oder xpseischer:
long i

do{

    i++

    if ... {

        add i,4
        continue...
 
12.05.2012  
 




funkheld
Jup, danke. das funktioniert.
Ich dachte man kann die Variable &Loop während des Ablaufes ändern.

Warum wird nach 10 durchläufen das Wort "ende" nicht geprintet?
 {$cleq}
declare ende&,zaehler&
ende&=1
Window 20,20-600,500

While Ende&

    sleep 5

    Whilenot 0

        sleep 5
        add zaehler&,1
        case zaehler& > 10 : continue
        print zaehler&

    EndWhile

    print "ende"

EndWhile

End
 
12.05.2012  
 




Wilfried
Friebe
Hi

Ich habe mal ein bisschen verändert allerdings ohne XPSE
declare ende&,zaehler&
ende&=1
Window 20,20-600,500

While Ende&

    sleep 5

    Whilenot zaehler& = 10

        sleep 5
        add zaehler&,1
        case zaehler& > 9 : Ende& = 0
        print zaehler&

    EndWhile

    print "ende"

EndWhile

waitinput
End

Gruß Wilfried
 
Board MSI B450M BAZOOKA CPU AMD Ryzen 7 2700x 8 Core 3,7-4,2 GH 32 Gb Ram NVIDIA GeForce GTX 3060 12 GB Ram Window 11 Prof 64 Bit

Sun-Guru-Barebone CPU I7-9750H 16 GB Ram NVIDIA GeForce GTX1660TI 6 GB Ram Window 11 Hom 64 Bit

Profan 4.5 bis Xprofan 14
Ein frisch geschriebenes Programm hat meistens einen großen Fehler.Sollte man versuchen diesen großen Fehler zu beseitigen, hat man viele kleine Fehler "Grins"
12.05.2012  
 




Jörg
Sellmeyer

Warum wird nach 10 durchläufen das Wort "ende" nicht geprintet?


Weil Du aus dieser Schleife nicht herauskommst:
Whilenot 0

    sleep 5
    add zaehler&,1
    case zaehler& > 10 : continue
    print zaehler&

EndWhile


Mit Continue springst Du immer wieder an den Schleifenanfang. Break unterbricht die Schleife.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
12.05.2012  
 




funkheld
Jup, danke für die verschiedenen Lösungen.

Gruss
 
14.05.2012  
 



Hi!

Wenn sich aus Deiner Sicht eines Deiner Themen "erledigt" hat,
dann das Thema einfach als "erledigt" markieren.

Dann wirds z.B. auch bei "Aktuelle Themen" (  [...]  ) als erledigt angezeigt.

Dafür einfach unten bei den "Themenoptionen" auf "erledigt" klicken.

Ebenso kannst Du Beiträge als "Lösung" markieren. Das wiederum geht wenn man
mit der Maus über den "Mehr"-Button fährt (jeder Beitrag hat solch Button unten rechts)
und die Option "Als Lösung deklarieren" bestätigt.
 
14.05.2012  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

12.209 Betrachtungen

Unbenanntvor 0 min.
H.Brill17.10.2022
RudiB.18.04.2021
Normann Strübli07.06.2020
funkheld14.12.2013
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie