[C#] - Brauche Hilfe

Saba2k6

blub Oo
3 Januar 2007
543
81
N'abend erstmal
Ich, ein totaler C# Anfänger, brauche dringend eure Hilfe :p

Ich habe in einer Datei zwei Werte abgespeichert, die durch ein ";" getrennt sind ( wert1;wert2) .
Diese beiden Werte will ich getrennt voneinander in einem mehrdimensionalen Array abspeichern ...
Dazu habe ich folgendes geschrieben:

Code:
string[] data = File.ReadAllLines(Application.StartupPath + @"\realms.wtf");
            
string[,] temp = new string[15, 2];

            for (int i = 0; i < data.Length; i++)
            {
                temp[i, 0] = data[i].Substring(0, data[i].IndexOf(';'));
               
 temp[i, 1] = data[i].Substring(data[i].IndexOf(';'), (data[i].Length - data[i].IndexOf(';')));
            }
Der erste Wert wird wie gewünscht abgespeichert, was man vom zweiten aber nicht behaupten kann :(
Da der Anfang des zweiten Wertes durch den Index des Semikolon angegeben wird, wird das Semikolon mit abgespeichert ... um das zu verhindern müsste ich dann ja eigentlich den Index um +1 erhöhen, was aber nicht klappen will, da ich dann folgende Fehlermeldung erhalte:
Der Index und die Länge müssen sich auf eine Position in der Zeichenfolge beziehen.
An der Syntax liegt es nicht, da ich den Index ohne Probleme vermindern kann...

Hat jemand ne Ahnung was ich falsch mache ?

edit: Sry, irgendwie werden beim Code die Leerzeichen ignoriert :(
 
Zuletzt bearbeitet:
Deine verwendete Sytax kommt mir gänzlich unbekannt vor...
Code:
string[] data = File.ReadAllLines(Application.StartupPath + @"\realms.wtf");
            
string[][] temp = new string[15][2];

            for (int i = 0; i < data.Length; i++)
            {
                temp[i][0] = data[i].Substring(0, data[i].IndexOf(';'));
               
 temp[i][1] = data[i].Substring(data[i].IndexOf(';'), (data[i].Length - data[i].IndexOf(';')));
            }
 
Euer Code (Saba & burnred) unterscheidet sich doch jetzt nur darin, dass das eine ein mehrdimensionales Array ist (mit Index [x, y]), das andere ein Array von Arrays ([x][y]), sonst tut ihr doch beide genau das selbe...
Wenn du den Index, ab dem gelesen werden soll, um eins erhöhst, musst du natürlich gleichzeitig die Länge um eins verringern. (Oder eben, wie cyman schreibt, gar keine Länge angeben, da dann einfach bis zum Ende des Strings gelesen wird.)
 
Danke euch :D

Und genau das hatte ich vergessen marac ... ich hatte zwar den Startindex erhöht, aber den Endindex hatte ich beim alten gelassen :shifty:
 
Sooo, ich hab nochmal eine kleine Frage :)
Da die Datei mehrere Zeilen enthält muss ich den Filepointer nach jedem Durchgang auf die nächste Zeile setzen ... doch wie mach ich das ?
Oder wäre es besser wenn ich für das Einlesen einen Streamreader verwende ?
 
Ne, wenn du File.ReadAllLines() benutzt, dann liest er ja von alleine alle Zeilen ein und gibt dir dann schon den String Array der gesamten Datei zurück.

Für StreamReader gibt es hier ein Beispiel:
https://msdn2.microsoft.com/en-us/library/db5x7c0d.aspx

Das auf die nächste Zeile springen passiert hier automatisch, nachdem du dir eine Zeile mit ReadLine() geholt hast. Gibt ReadLine() null zurück, bist du am Ende der Datei.

Aber mit File.ReadAllLines() sparst du dir das halt alles. Wenn du eine sehr große Datei hast, hast du bei der StramReader Variante halt den Vorteil, dass die Datei stückchenweise gelesen wird und nicht wie bei ReadAllLines gleich alles in Speicher geladen wird.
 
Hab ich Anfangs auch gedacht ... aber ich habe die Frage gestellt, da das Programm komischerweise nur beiden Werte der ersten Zeile abspeichert - Die kommenden werden ignoriert :-?
 
Das ist merkwürdig, eigentlich sollte es so gehen. Hast du mal einen Breakpoint gesetzt und geschaut ob in deinem data Array wirklich nur die erste Zeile steht?
 
Klar hab ich das :p
Mit dem Data-Array stimmt alles ! Das Problem ist, das die For-Schleife nur einmal durchlaufen wird ... deshalb werden im temp-Array auch nur die Werte der ersten Zeile abgespeichert :S

Allerdings ist es mir ein Rätsel wieso ! Im Moment habe ich vier Zeilen in der Datei angelegt, und dementsprechend ist data.length = 4 ... doch wo liegt der Fehler?!
Code:
int i=o; i < data.length ; i++
 
Zuletzt bearbeitet:
Das ist merkwürdig, vor allem, weil ich deinen Code ausschnitt eben mal bei mir ausprobiert hab und da geht es ohne Probleme. ;)
Zumindest in der Version, die du oben gepostet hattest.

Code:
int i=o; i < data.length ; i++
da ist ein o statt einer 0?

Veränderst du i innerhalb der schleife, wie groß ist o? oder war das nur ein Tippfehler?
 
Das mit dem o war nur ein Tippfehler :)

edit: Jetzt klappts ... ich hab jetzt einfach das Zeug neu geschrieben. Ist zwar das komplett Gleiche wie vorher, aber komischerweise geht es jetzt o_O
 
Zuletzt bearbeitet: