Italia
Foro

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 Io l' text$ und mit Len erfahre ich die Länge.
Nun möchte Io l' text$ in un 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 Io l' 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 per die Proposte.

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

Saluto 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 per die verschiedenen Lösungen.

Gruss
 
14.05.2012  
 



Hi!

Wenn sich aus Deiner Sicht eines Deiner Argomenti "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 circa den "Mehr"-Button fährt (jeder Beitrag hat solch Button unten rechts)
und die Option "Als Lösung deklarieren" bestätigt.
 
14.05.2012  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Topic-Options

12.432 Views

Untitledvor 0 min.
H.Brill17.10.2022
RudiB.18.04.2021
Normann Strübli07.06.2020
funkheld14.12.2013
Di più...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autori  |  Chat  |  Informativa sulla privacy  |  Download  |  Entrance  |  Aiuto  |  Merchantportal  |  Impronta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Giochi  |  Cerca  |  Support

Ein Projekt aller XProfaner, die es gibt!


Il mio XProfan
Private Notizie
Eigenes Ablageforum
Argomenti-Merkliste
Eigene Beiträge
Eigene Argomenti
Zwischenablage
Annullare
 Deutsch English Français Español Italia
Traduzioni

Informativa sulla privacy


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