  | 
					
						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, 16: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, 16: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, 16:36, insgesamt einmal bearbeitet | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Dusky_Joe
 
  
  Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
  | 
		
			
				 Verfasst am: 18.11.2005, 16: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, 10: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, 15: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.
  | 
   
 
     |