Entwickler-Ecke

IO, XML und Registry - Matrix einlesen und Integer rausfilter


kamson - So 18.04.10 23:33
Titel: Matrix einlesen und Integer rausfilter
Hallo Leute,


ich bin grad dabei mir etwas c# anzueignen und steck grad nen bissl fest (:.
Es geht darum eine Datei einzulesen, die in Matrixform dargestellt ist. Die 1. Zeile und 1. Spalte sind Buchstaben alle übrigen Einträge sind Zahlen

Bsp:
X X X X
Y 6 -5 5
Y 2 -1 3
Y -1 0 2

Bis jetzt hab ich die erste Zeile erfolgreich eingelesen und in ein chararray geschrieben. Davon die Länge bestimmt und dann ein 2DIM Array für die Ints angelegt.
Das Problem ist jetzt, dass ich nicht weiß, wie ich bestimme, ob der nächste Char nen Int ist und die Sache mit den negativen Ints...

In java gabs vergleichsweise mit der Scannerklasse die Methode hasNextInt --> damit konnte man die Abfrage ganz gut machen.
Ich hatte folgenden Code schon zum laufen gebracht, aber da kamen nur komische Sachen bei der Textausgabe raus ( ganz andere Zahlen, viel mehr etc.)




C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
            int i = 0;
            String cstring = "";
            StreamReader reader = new StreamReader(@matlocation + ".mat");
            reader.ReadLine();
           
            int a = 0;
            int b = 0;

            string test = "";
            while (a <= chararray.Length - 1)
            {
                while (b <= chararray.Length - 1)
                {
                    if ((reader.Peek()).GetType() == i.GetType())
                    {
                        intmatrix[a,b] = reader.Read();
                        test = test + reader.Read();

                        b++;
                    }
                    else
                    {
                        reader.Read();
                    }

                }
                b = 0;
                a++;
            }
            reader.Close();


Wär kewl, wenn mir jmd nen Lösungsvorschlag hätte.

Beste Grüße
kamson

Moderiert von user profile iconKha: Code- durch C#-Tags ersetzt


Kha - Mo 19.04.10 00:25

:welcome:

Mit einem StreamReader machst du dir hier das Leben unnötig schwer. Lies die Datei über File.ReadAllLines in ein String-Array ein, davon teilst du die einzelnen String-Zeilen per String.Split() wiederum in String-Arrays der einzelnen Elemente auf, die du schließlich mit int.TryParse auf Int/Nicht-Int überprüfen kannst. Aber wenn der Aufbau der Datei sowieso so regelmäßig ist, weißt du ja eigentlich an jeder Stelle, ob danach ein Int kommen sollte oder nicht.


kamson - Mo 19.04.10 11:34

Hey,

danke für deine Antwort, ich wusste ich hatte das int.TryParse schon gesehen konnte mich nur net mehr dran erinnern. In den meisten Fällen ist die Datei so regelmäßig, einzig die Leerzeichen variieren, sollte aber kein Problem sein.


Vielen Danke erstmal (:


Kha - Mo 19.04.10 11:51

user profile iconkamson hat folgendes geschrieben Zum zitierten Posting springen:
In den meisten Fällen ist die Datei so regelmäßig, einzig die Leerzeichen variieren, sollte aber kein Problem sein.
Dann benutze line.Split(null, StringSplitOptions.RemoveEmptyEntries) :) .