Zeichen ersetzen (gelöst)

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

Sereyanne

Betreff: Zeichen ersetzen (gelöst)

BeitragMi, Mai 09, 2012 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo allerseits,

ich benutze die Funktion TextFieldReplace, hier noch mal der Code:
Code: [AUSKLAPPEN]
;Einleitung

   ;Rückgabe =  TexfieldReplace(textfield_id[,modus][,auswahltext])

   ;Programmiert von Jonas Cleve

   ;Parameter:

      ;tf_id   : Handle des mit "CreateTextField" erstellten Textfields

      ;mode   : Modus der Funktion, welche sind:

         ;0   : [Standard] Es sind nur Zahlen erlaubt (0-9)

         ;1   : Es sind nur Buchstaben erlaubt (A-Z,a-z) (ACHTUNG: KEINE LEERZEICHEN!!!)

         ;2   : Es sind nur Buchstaben und Zahlen erlaubt (0-9,A-Z,a-z) (KEINE LEERZEICHEN!!!)

         ;3   : "Dateinamen"-Eingabemodus; Es sind die Zeichen nicht erlaubt,
               ;die von Windows aus nicht im Dateinamen vorkommen dürfen

         ;4   : Bei diesem Modus muss man beim dritten Parameter alle Zeichen übergeben,
               ;die nicht vorkommen dürfen
               ;Bsp: 'TextfieldReplace(textfield,4,"ABCDEFabcdef")'
               ;(Bei diesem Beispiel würden diese Buchstaben entfernt)

         ;5   : Wie 4 nur übergibt man alles was vorkommen darf

   ;Rückgabe: Wenn erfolgreich dann wird 1 ansonsten 0 zurückgegeben

;Ende der Einleitung
Function TextFieldReplace(tf_id,mode=0,a_txt$="")
   If (mode < 0) Or (mode > 5) Then Return 0
   Local change = 0
   Local ascii = 0
   Local ftext$ = TextFieldText$(tf_id)
   Local i
   Local j
   Local ftextmid$
   Local repl$
   Local in
   Select mode
      Case 0
         For ascii = 0 To 44
            If Instr(ftext$,Chr$(ascii)) Then
               change = 1
               ftext$ = Replace$(ftext$,Chr$(ascii),"")
            EndIf
         Next
         For ascii = 46 To 47
            If Instr(ftext$,Chr$(ascii)) Then
               change = 1
               ftext$ = Replace$(ftext$,Chr$(ascii),"")
            EndIf
         Next
         For ascii = 58 To 255
            If Instr(ftext$,Chr$(ascii)) Then
               change = 1
               ftext$ = Replace$(ftext$,Chr$(ascii),"")
            EndIf
         Next
         If Len(ftext$) > 1 Then
            ftext2$ = Right(ftext$,Len(ftext$)-1)
            If Instr(ftext2$,"-") Then
               ftext2$ = Replace(ftext2$,"-","")
               ftext$ = Left(ftext$,1)+ftext2$
               change = 1
            EndIf
         EndIf
      Case 1
         For ascii = 0 To 64
            If Instr(ftext$,Chr$(ascii)) Then
               change = 1
               ftext$ = Replace$(ftext$,Chr$(ascii),"")
            EndIf
         Next
         For ascii = 91 To 96
            If Instr(ftext$,Chr$(ascii)) Then
               change = 1
               ftext$ = Replace$(ftext$,Chr$(ascii),"")
            EndIf
         Next
         For ascii = 123 To 255
            If Instr(ftext$,Chr$(ascii)) Then
               change = 1
               ftext$ = Replace$(ftext$,Chr$(ascii),"")
            EndIf
         Next
      Case 2
         For ascii = 0 To 47
            If Instr(ftext$,Chr$(ascii)) Then
               change = 1
               ftext$ = Replace$(ftext$,Chr$(ascii),"")
            EndIf
         Next
         For ascii = 58 To 64
            If Instr(ftext$,Chr$(ascii)) Then
               change = 1
               ftext$ = Replace$(ftext$,Chr$(ascii),"")
            EndIf
         Next
         For ascii = 91 To 96
            If Instr(ftext$,Chr$(ascii)) Then
               change = 1
               ftext$ = Replace$(ftext$,Chr$(ascii),"")
            EndIf
         Next
         For ascii = 123 To 255
            If Instr(ftext$,Chr$(ascii)) Then
               change = 1
               ftext$ = Replace$(ftext$,Chr$(ascii),"")
            EndIf
         Next
         If Instr(ftext$,"-") And Left(ftext$,1) <> "-" Then
            ftext$ = Replace(ftext$,"-","")
            change = 1
         EndIf
      Case 3
         If Instr(ftext$,"\") Then
            ftext$ = Replace$(ftext$,"\","")
            change = 1
         EndIf
         If Instr(ftext$,"/") Then
            ftext$ = Replace$(ftext$,"/","")
            change = 1
         EndIf
         If Instr(ftext$,":") Then
            ftext$ = Replace$(ftext$,":","")
            change = 1
         EndIf
         If Instr(ftext$,"*") Then
            ftext$ = Replace$(ftext$,"*","")
            change = 1
         EndIf
         If Instr(ftext$,"?") Then
            ftext$ = Replace$(ftext$,"?","")
            change = 1
         EndIf
         If Instr(ftext$,Chr(34)) Then
            ftext$ = Replace$(ftext$,Chr(34),"")
            change = 1
         EndIf
         If Instr(ftext$,"<") Then
            ftext$ = Replace$(ftext$,"<","")
            change = 1
         EndIf
         If Instr(ftext$,">") Then
            ftext$ = Replace$(ftext$,">","")
            change = 1
         EndIf
         If Instr(ftext$,"|") Then
            ftext$ = Replace$(ftext$,"|","")
            change = 1
         EndIf
      Case 4
         For i = 1 To Len(a_txt$)
            repl$ = Mid$(a_txt$,i,1)
            If Instr(ftext$,repl$) Then
               ftext$ = Replace(ftext$,repl$,"")
               change = 1
            EndIf
         Next
      Case 5
         For i = 1 To Len(ftext$)
            ftextmid$ = Mid$(ftext$,i,1)
            in = 0
            For j = 1 To Len(a_txt$)
               repl$ = Mid(a_txt$,j,1)
               If ftextmid$ = repl$ Then in = 1
            Next
            If in = 0 Then
               ftext$ = Replace(ftext$,ftextmid$,"")
               change = 1
            EndIf
         Next
   End Select
   If change Then SetGadgetText(tf_id,ftext$)
   Return 1
End Function

Ich arbeite momentan mit dem Modus 5 und übergebe alles, was stehen bleiben darf.

Mein Proggi soll eine Art Taschenrechner werden, deswegen habe ich alle Zahlen und das Komma übergeben.

Es funktioniert auch alles. Problem bei BB ist halt nur, dass das Programm anstatt Kommas für Nachkommastellen einen Punkt nutzt. Wenn ich meine Zahlen zum Rechnen mit Punkt eingebe (und natürlich den Punkt auch als erlaubtes Zeichen im Modus 5 übergebe), ist ja auch alles prima.

Ich möchte aber gern unbedingt das Komma verwenden. Wie kann ich dem Programm erklären, dass jedes eingegebene Komma zum Berechnen in einen Punkt verwandelt werden soll?

Oder gibt es eine leichtere Lösung?

Versteht ihr meine Frage?

Danke im Voraus

LG
Sereyanne
  • Zuletzt bearbeitet von Sereyanne am Fr, Mai 11, 2012 19:11, insgesamt 2-mal bearbeitet

Xeres

Moderator

BeitragMi, Mai 09, 2012 22:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum benutzt du nicht Replace um alle Kommas zu Punkten zu machen (zum berechnen) und für die Darstellung nochmal umgekehrt.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Sereyanne

BeitragMi, Mai 09, 2012 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Das frag ich mich jetzt auch..... Embarassed
Danke für deine Hilfe!
Jaja, wenn man nicht mit der Nase drauf gestoßen wird, sieht man's nicht. Ich glaub ich geh lieber schlafen, ist wohl doch schon zu spät für mich. Mr. Green

Danke und noch eine schöne Nacht!

-------------------

Guten Morgen.
Ich hab noch mal drüber nachgedacht und das ausprobiert. Irgendwie klappt es immer noch nicht so recht. Replace ist zwar der Befehl, den ich gesucht hab. Aber es funktioniert nicht.

Ich habe ja ein TextField. Mittels TextFieldReplace übergebe ich alle Zeichen, die vorkommen dürfen (Zahlen und Komma). Von der Logik her müsste ich jetzt einfach Replace nehmen und die eingegebenen Kommata in Punkte verwandeln. In der Praxis geht das aber nicht, weil mir der Debugger lange Zahlenfolgen à la "42745200" ausspuckt. Ist ja klar, dass er da nix umwandeln kann, kommt ja kein Komma drin vor.

Auszug:
Code: [AUSKLAPPEN]
         If EventSource()=betragwert1 Then
            textfieldreplace(betragwert1,5,"0123456789,") ;beim dritten Parameter übergibt man alles was vorkommen darf
            neu$=Replace$(betragwert1 ,",",".")
            betragswert1=neu$
         EndIf

"betragwert1" ist der Name des TextFields.
Das ist jetzt auch nur ein Codeauszug von den vielen Versuchen, die ich schon durch probiert habe.
Ich hab auch schon versucht, alles in Strings zu wandeln, aber mit demselben Ergebnis. Eigentlich müsste doch das TextField schon ein String sein, oder? Von daher müsste ich das doch gar nicht brauchen.
Was mach ich falsch?

The Shark

BeitragDo, Mai 10, 2012 10:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau dir den Befelh an: TextFieldText
Rette deine Freiheit

KnorxThieus

BeitragDo, Mai 10, 2012 16:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Variable des Textfelds verrät nichts über den Inhalt dessen.

Du musst folgendes machen:
BlitzBasic: [AUSKLAPPEN]
SetGadgetText betragswert1, Replace(TextFieldText$(betragswert1), ",", ".")


Probier's mal!
Version: BlitzPlus / Blitz+

Sereyanne

BeitragFr, Mai 11, 2012 7:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke euch beiden.
Da sieht man mal wieder den Wald vor lauter Bäumen nicht. Ich arbeite schon ständig mit TextFieldText, aber dass ich hier an der Stelle den Wert natürlich erst mal auslesen muss, bevor ich ihn verarbeiten kann, dafür musste erst jemand mit dem Vorschlaghammer kommen.
Und genauso verhält es sich auch mit SetGadgetText - natürlich kann ich nix anzeigen lassen, was ich nie übergeben habe. Oh man.....

Danke schön!

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group