Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

wandeln von string 2 zahl

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
brundie



Anmeldungsdatum: 09.08.2005
Beiträge: 13

BeitragVerfasst am: 18.11.2005, 17:11    Titel: wandeln von string 2 zahl Antworten mit Zitat

Hallo erstmal an alle die hier programmieren und helfen,

mein Problem ist das ich aus einer Datei mir eine Zahl hole die ich als solches
weiterverwnden möchte. Also öffne ich die Datei lese die Zeile in eine Stringvariable ein zerschneide die Zeile bis ich die Zahl in einer Stringvariablen habe und möchte die jetzt in eine Zahlvariable wechseln.

If len(ln$) > 0 then
s=mid$(ln$,6,2)
....

ln ist die Zeile
s = string der eine Zahl werden soll

cint(s) geht nicht

Jeder Versuch bis jetzt ist gescheitert hat jemand die Passende Funktion parat? ich weis das es da was im VB gibt aber es fällt mir nicht mehr ein.

Falls jemand helefen kann sag ich schonmal Danke

Grüße brundie lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 18.11.2005, 17:33    Titel: Antworten mit Zitat

Hallo.
Das geht ganz einfach mit val(variable as string), dabei muss die zahl am anfang stehen.

Code:

text$="12345askdlfhel"
zahl=val(text$)
text2$="asd12345a"
zahl2=val(text2$)

print zahl,zahl2


Siehe freebasic.de
_________________
Code:
#include "signatur.bi"


Zuletzt bearbeitet von Michael712 am 18.11.2005, 17:36, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 18.11.2005, 17:34    Titel: Antworten mit Zitat

Die Funktion, die du suchst, heißt VAL.

http://fb.exp-soft.de/r.php?s=VAL#2

CINT konvertiert nur Zahlen zum Typ Integer; das ist wichtig, wenn du mit direktem Speicherzugriff, festgelegter genauigkeit o.Ä. arbeitest.

Siehe dazu
http://fb.exp-soft.de/r.php?s=CINT

Have a nice day
Ciao
Dusky_Joe


//EDIT:
Eine Minute langsamer, dafür die genauen Links zwinkern
_________________
fully biological degradable

Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
brundie



Anmeldungsdatum: 09.08.2005
Beiträge: 13

BeitragVerfasst am: 22.11.2005, 11:34    Titel: Vielen Dank auch! Antworten mit Zitat

Vielen Dank, für die Antworten, sagt brundie. lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 24.11.2005, 16:49    Titel: Antworten mit Zitat

Hi AlleMann,
eigentlich habe ich auch schon lange nach einer Möglichkeit gesucht,
Strings in Zahlen umzuwandeln..
Val() erschien mir da keine schlechte Lösung zu sein, AAABER:
-Val wandelt um, was umzuwandeln ist
-am Rückgabewert 0 ist nicht zu erkennen, ob wirklich '0' gemeint ist
oder ob es sich um einen Umwandelfehler handelt
So habe ich s2n geschrieben(StringToNumber):
[Edit]
'Verbesserte' Version, jetzt geht auch -1E-4
[/Edit]
Code:
Option Explicit
Function S2N(ByVal s As String, Fehler As Integer=0) As Double
  Const h$="0123456789ABCDEF" 'Werte-Bereich für &B.., &O.., &H
  Dim z$, a$, Mx, i, u As Double, j, p, e, m, v 'Hilfsvariablen
  Dim Tr$="." '..obwohl Val() nur '.' umwandeln kann!!
  Fehler=0 'Fehler zurückgesetzen!!!
  z$=UCase$(Mid(s, 1, 2)) 'Prefix prüfen..
  Select Case z$
    Case "&B":Mx=2 'Soll binär sein
    Case "&O":Mx=8 'Soll oktal sein
    Case "&H":Mx=16 'Soll hexadezimal sein
    Case Else:Mx=10 'also 'normale' Zahl
  End Select
  If Mx<>10 Then 'Es ist also ein Integer mit Prefix
    If Len(s)>2 Then 'es müssen mehr als 2 Zeichen sein..
      For i=3 To Len(s) '..und dann bis zum Ende prüfen
        j=Instr(h$, UCase$(Mid$(s, i, 1))) 'ist die Ziffer im erlaubten Bereich von h$ ?
        If j>0 And j<=Mx Then 'Wenn ja, dann..
          z$=z$ &Mid$(s, i, 1) '..zum String basteln
        Else 'Nö..
          Fehler=i 'Fehler auf Stelle setzen
          z$="0" 'String auf 0 setzen
          Exit For 'raus hier
        End If 'ZiffernPrüfung beendet
      Next 'jetzt weiter mit der Schleife
      u=Val(z$) 'geprüfter String kann jetzt umgewandelt werden..
    Else '..also nur Prefix angegeben, guter Versuch..
      Fehler=2 '..wird aber bemerkt
      u=0
    End If
  Else 'Dann nehmen wir halt VAL(), aber über einen Umweg..
    v=IIF(Mid$(s, 1, 1)="-", 1, 0)
    If v Then z$="-" Else z$=""
    p=0
    For i=1 To Len(s)
      a$=Mid$(s, i, 1)
      Select Case a$
        Case Tr$:p=p+1
        Case "E"
          e=e+1
          If Mid$(s, i+1, 1)="-" Then m=m+1
      End Select
    Next
    For i=1+v to Len(s)
      a$=UCase$(Mid$(s, i, 1))
      j=Instr(h$, a$) 'ist die Ziffer im erlaubten Bereich von h$ ?
      If j>0 And j<=Mx Then 'Wenn ja, dann..
        z$=z$ &a$ '..zum String basteln
      Else 'Nö..
        Select Case a$
          Case Tr$
            If p>0 Then 'Max. einen Dezimaltrenner erlauben
              p=0 '..es kann nur einen geben..
              z$=z$+Tr$ '..und hinzufügen
            End If
          Case "E"
            If e>0 Then
              z$=z$+a$ 'Hier ist EIN 'E' erlaubt..
              e=0 '.. jetzt nicht mehr..
            End If
          Case "-"
            If m>0 Then
              z$=z$+a$ 'Hier ist auch EIN '-' erlaubt
              m=0 '.. jetzt nicht mehr..
            End If
          Case Else '..also Fehler
            Fehler=i 'Fehler auf Stelle setzen
            z$="0" 'String auf 0 setzen
            Exit For 'raus hier..
        End Select
      End If 'ZiffernPrüfung beendet
    Next 'jetzt weiter mit der Schleife
    u=Val(z$) 'geprüfter String kann jetzt umgewandelt werden..
  End If
  S2N=u
End Function

Dim As Double d
Dim As Integer i, j
Dim z$
?"lfd.", "z$", "S2N", "VAL", "Fehler"
For j=1 to 16
  Read z$
  d=s2n(z$, i)
  ?j, z$, d, Val(z$), i
Next
Sleep
Data "0", "0g", "&B012", "&B0110", "123.456", "-123.456", "&H0A", "&o11", "&O11", "&HAC01", "&h7FFFFFFF"
Data "&h80000000", "&h80000001", "&hFFFF", "&hFFFFFFFF", "-1E-4"

Sicherlich nicht perfekt, wandelt aber richtig um und liefert einen Fehlercode,
der abgefragt werden kann..
Nachteil: Die Zahlen müssen als numerische Strings vorliegen
Ist der Rückgabewert '0' UND Fehler=0 handelt es sich um '0'
Ist Fehler<>0, ist das die Position, an der der Fehler auftrat
Der Funktionswert ist Double, kann aber mit den übrigen Umwandelfunktionen in einen
anderen Typ geändert werden..
Viel Spaß beim Wandeln und viele Grüße
ytwinky
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz