 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
brundie
Anmeldungsdatum: 09.08.2005 Beiträge: 13
|
Verfasst am: 18.11.2005, 17:11 Titel: wandeln von string 2 zahl |
|
|
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  |
|
Nach oben |
|
 |
Michael712 aka anfänger, programmierer
Anmeldungsdatum: 26.03.2005 Beiträge: 1593
|
Verfasst am: 18.11.2005, 17:33 Titel: |
|
|
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 |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 18.11.2005, 17:34 Titel: |
|
|
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  _________________ 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 |
|
 |
brundie
Anmeldungsdatum: 09.08.2005 Beiträge: 13
|
Verfasst am: 22.11.2005, 11:34 Titel: Vielen Dank auch! |
|
|
Vielen Dank, für die Antworten, sagt brundie.  |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 24.11.2005, 16:49 Titel: |
|
|
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 |
|
 |
|
|
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.
|
|