VisualBasic Jeder Ziffer eine Zahl aus einer Textdatei in ein Array speichern

CorvanDanavis

Cadet 2nd Year
Registriert
Jan. 2012
Beiträge
26
Guten Morgen allen zusammen,
wir haben in der Schule die Aufgabe bekommen die Euler'sche Zahl möglichst genau zu berechnen und auf Kommando eine Ziffer dieser Zahl ausgeben zu können.
Ich habe es schon geschafft e auf 216236 Stellen genau zu berechnen. Die Zahl steh jetzt in einer Textdatei. Um auf jede Ziffer zugreifen zu können (möglichst schnell), will ich die Zahl mit ihren Ziffern in ein Array speichern.
Doch leider habe ich keine Ahnung, wie man das am besten anstellt.


Über Hilfe würde ich mich sehr freuen.
 
Was ich auf die schnelle gefunden hab ist, dass man Datein in VB als String einliest.
Dann sollte es Stringoperationen geben, die teile des String wieder geben.
Also den eingelesenen String mittels Schleife, Ziffer für Ziffer, in dein Array schreiben.
 
Ich bin zwar kein Experte in VB, aber ich denke, dass ein Array dafür nicht geeignet ist. Grund ist einfach, dass ein Array vermutlich zu unperform ist. Was der Antworter über mir anspricht ist die Möglichkeit Dateien auszulesen und die Strings zu splitten. Das ist sinnvoll, wenn man zum Beispiel Anweisungen für das Programm in Dateien speichern will. Aber nicht für dich sinnvoll. Ich suche mal für dich nach einer Lösung^^ P.S. VB-Fragen sind besser hier aufgehoben: http://www.vb-paradise.de/ LG

Edit: Frage falsch verstanden xD Naja. Also so wie ich das verstanden habe, willst du die Datei auslesen. Ich schreibe jetzt mal einen kleinen Code, um die Datei auszulesen und auf jede Ziffer zu greifen zu können.

Import System.IO

Sub auslesen()
Dim reader as Streamreader = New Streamreader(Dateipfad)
Dim Text as String
Dim Zahl as Integer
Text = reader.Readline() 'Ich schätze mal die Zahl ist in der ersten Reihe
Zahl = Convert.ToInt32(Text)
End Sub

'Um auf alle Ziffern zu zugreifen:
'Beispiel du willst auf Ziffer 563 zugreifen
Dim Länge as Integer = Zahl.Length - 1
Dim Ziffer As Integer
Dim Zielziffer as Integer = 563
Ziffer = Länge - (Länge - Zielziffer)
Label1.Text = Ziffer
Ich hoffe mal, dass der Code so klappt xD LG
 
Zuletzt bearbeitet:
Also der Code, so wie du ihn geschrieben hast funktioniert leider nicht.

Dim euler As New IO.StreamReader("path")
Dim Zahl as String
Zahl = euler.ReadLine()

So habe ich die Zahl als String eingelesen. Doch wie funktioniert dein auslesen ?
 
CorvanDanavis schrieb:
Also der Code, so wie du ihn geschrieben hast funktioniert leider nicht.

Dim euler As New IO.StreamReader("path")
Dim Zahl as String
Zahl = euler.ReadLine()

So habe ich die Zahl als String eingelesen. Doch wie funktioniert dein auslesen ?

Also ja, mein Code war etwas fehlerhaft xD Also nochmal. Zunächst erstellst du einen neuen Streamreader:
Dim reader as Streamreader = New Streamreader(Path)
"Path" musst du durch den Dateipfad ersetzen. Entweder reinschreiben oder über ne Variable lösen. Dann erstellst du eine globale Variable, für den String(Z.B. Zahl). Also zwischen Subs/Funktionen. Dann geb ich dir mal zwei Möglichkeiten. Erstens: Die Zahl steht in einer Reihe, dann musst du einfach nur schreiben:
Zahl = reader.Readline()
Zweitens: Die Zahl steht in mehreren Reihen oder es sind mehrere Reihen. Dann schreibst du:
Do While Not reader.Endofstream()
Zahl = reader.Readline()
'dann kannst du damit arbeiten
Loop
So und nun zu meinem Kernfehler. Der Ausgabe einer bestimmten Stelle. Also du kannst bestimmte Stellen so ausgeben:
Dim Länge as Integer = Zahl.Length - 1
Dim Ziffer as Integer
Dim Zielziffer as Integer = 30 'Zum Beispiel
Ziffer = Convert.ToInt32(Zahl.ElementAt((Länge - ( Zahl.Length - Zielziffer)))
Messagebox.Show(Ziffer)
So jetzt etwas Erklärung: Zunächst erstelle ich Länge. Länge ist deshalb um 1 kleiner als "Zahl.Lenght", da VB Nullbasiert ist. Sprich hat ein Array 5 Items, kann man sie nur mit 0-4 abrufen(0,1,2,3,4). Dann wird der Punkt ausgewählt, an dem die Zahl entnommen werden soll(Sprich hier Stelle 30). Dann wird nur noch Ziffer ein Wert zugewiesen, der die Zahl enthält. Ich denke die Rechnung ist verständlich. Falls du ganze Ausschnitte von deiner Zahl abgeben willst, dann würde ich das in eine Schleife packen, und Ziffer dann nicht als Integer, sondern als String deklarieren. Dann kannste die Konvertierung weglassen, noch ne Variable Ausschnitt als String deklarieren und schreiben:
Ausschnitt = Ausschnitt & Ziffer
Dann werden die Werte nicht addiert(Sprich 1+1 = 2), sondern Ziffer wird nur angefügt(Sprich 1 & 1 = 11).
Bitte beachte, dass das Komma so auch ausgegeben wird, was zu Rechenfehlern im weiteren Verlauf führen kann.

So ich habe das jetzt so geschrieben, dass es jeder verstehen sollte. LG ChOoSe
 
So habe ich es auch gefunden. Doch nun kommt ein neues Problem: ElementAt reicht nicht mehr aus. Meine Zahl ist zu lang ...
 
Dann musst du dich leider an VB-Paradise.de im Forum unter Sonstige Problemstellungen wenden. Ich kenne mich leider auch nicht so gut aus :/ LG
 
Sag mal, warum wollt ihr denn überhaupt den eingelesenen String zu Integer konvertieren? Ich kann kein VB aber von dem was ich gelesen hab, funktionieren Strings dort ganz normal wie auch anderswo, d.h. ein String ist quasi ein Array of char.
 
Zurück
Oben