PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C#: Daten aus .txt-Datei auslesen und in Array einlesen



Wundawuzi
17.03.2015, 18:53
Hallo zusammen.

Ich hab mal ein Semester lang ein Multimediastudium versucht. Dabei wurde u.a. mit C# programmiert. Ich habe also minimale Grundkenntnisse die aber auch schon etwas verstaubt sind.

Im Grunde möchte ich nur Werte in eine .txt Datei eingeben und diese dann in einem Array auslesen, um sie später abfragen zu können. Die einzelnen "Datensätze" stehen in der txt-Datei zeilenweise und die einzelnen Daten sind mit ":" getrennt.

Sieht dann ungefähr so aus:

rot:grundfarbe
blau:grundfarbe
gelb:grundfarbe
orange:rot:gelb
grün:blau:gelb
violett:blau:rot
braun:blau:rot:gelb

der einfachheit halber jetzt mit Farben.

Würde es sich um einzelne Zeilen mit nur 1 Datensatz handeln würd ichs noch hinkriegen, also Streamreader ist mir bekannt und ich habs auch schon hinbekommen die einzelnen Zeilen als ganzes auszulesen und in string variablen zu packen. Nur weiß ich aber nicht genau wie ich das handhaben soll dass das Array eine Variable anzahl an Datensätzen haben kann. braun besteht beispielweise aus 4, rot nur aus 2.
Meine erste Lösungsidee wäre gewesen ein Array mit bsp. 20 "slots" zu erstellen und dann sobald das zeilenende erreicht ist die "übrigen" einfach mit "0" zu füllen oder so. Das ist aber denk ich nicht unbedingt die beste Lösung.
Kann mir an dem Punkt vielleicht nochmal kurz wer erklären wie das nochmal mit den [] und [,] arrays war? ich denke das wär hier jetzt wichtig aber als das damals gekommen wäre hab ich das Studium grad abgebrochen.

Mein zweites Problem habe ich mit dem Split-Befehl. Ich hab ihn zwar online gefunden aber irgendwie krieg ich ihn trotz 3 verschieder Seiten die es alle gleich erklären nicht hin.

Danke schonmal im Vorhinein! :gratz

- Wundawuzi

Kellendil
17.03.2015, 19:11
Ich kann nur Java, sollte aber in C# ähnlich laufen:

split bekommt normalerweise das Trennzeichen als Parameter und gibt dann ein Array mit den Stringteilen zurück, z.B:
String gesamt = "a:b:c"
String[] geteilt = gesamt.Split(':'); //teilt den String bei ':' in 3 Teile auf: geteilt = ["a","b","x"]


Zu Arrays: Ich nehme mal an auch in C# haben Arrays ne feste Größe. Deswegen benutzt man quasi nie Arrays sondern Listen, z.B. ArrayList. Dazu sollte viel im Netz stehen. Generell hilfreich ist es bei Google "example" dazuzuschreiben, damit du richtige Beispiele siehst. Als Anfänger ist offizielle Doku schwerzu verstehen.

Lolomoloko
19.03.2015, 10:56
Kapsel die farben in Objekte.


Also z.B. eine Klasse Farbe mit den membern Name und einem Array der mischfarben (einfach String oder andere farbobjekte).
Dann hättest du nur noch einen eintrag pro zeile in dem Array oder der Liste.


class colour{
String name
String[] mixed
}


Beim einlesen der Zeile "gelb:grundfarbe"
würde man dann also ein objekt erstellen, bei dem der name "gelb" ist und das array leer.
Und bei "orange:rot:gelb" entsprechend der name "orange" und das array mit den zwei elementen "rot" und "gelb".

Multithread
19.03.2015, 13:56
Der schönste weg wäre natürlich eine ZUstandsmaschine wo man Zeichen für Zeichen durchgeht und auch escape Zeichen haben kann.

Thoronador
22.03.2015, 13:28
Der schönste weg wäre natürlich eine ZUstandsmaschine wo man Zeichen für Zeichen durchgeht und auch escape Zeichen haben kann.
Ja nee, is' klar, man lässt natürlich eine Person, die laut eigener Aussage über "minimale Grundkenntnisse" in der Sprache verfügt, gleich eine Zustandsmaschine implementieren.

Im Prinzip führen hier schon zwei einfache, vordefinierte Methoden zum Ziel: System.IO.File.ReadAllLines() (https://msdn.microsoft.com/de-de/library/s2tte0y1%28v=vs.110%29.aspx) in Kombination mit System.String.Split() (https://msdn.microsoft.com/de-de/library/system.string.split%28v=vs.110%29.aspx). Die Grundidee läuft dabei in etwa nach dem Schema:

string[] zeilen = System.IO.File.ReadAllLines("C:\\Pfad\\zur\\Quelldatei.txt");
string[][] daten = new string[zeilen.Length][];

int i;
for(i = 0; i < zeilen.Length; ++i)
{
daten[i] = zeilen[i].Split(new char [] {':'});
}
Danach liegen im verzweigten Array (https://msdn.microsoft.com/de-de/library/2s05feca.aspx) daten die aus der Datei gelesenen Daten.

Ein Tipp zum Schluss: Im MSDN (https://msdn.microsoft.com/de-de/library/67ef8sbd.aspx) gibt es eine Suchfunktion. Mit etwas Geduld und den richtigen Suchbegriffen sollte man dort für die meisten grundlegenden Problemstellungen auch eine Lösung mittels C# finden.

Wundawuzi
29.03.2015, 17:05
Hallo zusammen,

also ich hab jetzt ein bisschen gebastelt und die Datei ist im Grunde fertig. Ist nicht schön, vermutlich super aufwändig und absolut nicht eingabesicher aber da sie ja eh nur von 2-3 Personen benutzt wird macht das nichts.

Ich hab jetzt nur folgendes Problem: Ich hab die Datei auf meinem Laptop mit VisualStudio (Ich glaub 2010 oder 2012) unter Windows 8 geschrieben. Dort funktioniert auch alles und ich hab die .exe aus dem "Debug"-Verzeichnis auch auf den Desktop verschiebene können und dort starten.

Nur sobald ich die exe auf meinem PC jetzt ausführe startet er zwar den Prozess (auch mehrmals gleichzeitig falls öfters gestartet), jedoch mach er sonst nix. Fehlermeldung o.ä. kommt keine.
Ich hab jetzt gegoogled und die "Standardlösung" für dieses Problem ist das installieren von ".net". Ich hab das versucht aber wenn ich .net 4.5 installieren will sagt er mir eine gleiche oder höhere Version is schon installiert.
Woran kann das dann liegen? Die Datei frodert mindestens 1 usereingabe also ein "automatischer durchlauf" kanns ned sein :/

nikva
05.04.2015, 01:00
Öffne dein Projekt in Visual Studio und öffne die Projekteigenschaften (Rechtsklick auf das Projekt im Projektmappenexplorer -> Eigenschaften oder Projekte -> Eigenschaften (Bei VS13 ist der Hotkey Alt+Enter)).
Dort überprüfst du dann, welches Zielframework ausgewählt ist. Ich vermute, dass dein Projekt als Zielframework .net 3 oder 3.5 ausgewählt hat, du allerdings nur .net 4.5 oder 4.6 installiert hast.

Wundawuzi
17.04.2015, 07:45
Öffne dein Projekt in Visual Studio und öffne die Projekteigenschaften (Rechtsklick auf das Projekt im Projektmappenexplorer -> Eigenschaften oder Projekte -> Eigenschaften (Bei VS13 ist der Hotkey Alt+Enter)).
Dort überprüfst du dann, welches Zielframework ausgewählt ist. Ich vermute, dass dein Projekt als Zielframework .net 3 oder 3.5 ausgewählt hat, du allerdings nur .net 4.5 oder 4.6 installiert hast.

Das habe ich versucht aber bei der Installation kam ständig irgendeine Fehlermeldung.
Dann hab ich nochmal gegoogled und dadurch kam ich dann drauf dass ich noch 2 Windows updates hatte die sich nicht von selbst installiert hatten. Eines davon war für .net.

Danach gings dann.
Danke an alle für die hilfe :gratz