Ergebnis 1 bis 8 von 8

C#: Daten aus .txt-Datei auslesen und in Array einlesen

  1. #1 Zitieren
    Schwertmeister Avatar von Wundawuzi
    Registriert seit
    Mar 2008
    Beiträge
    716
    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!

    - Wundawuzi
    Wundawuzi ist offline

  2. #2 Zitieren
    Knight Commander Avatar von Kellendil
    Registriert seit
    Jul 2009
    Beiträge
    2.112
    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.
    Kellendil ist offline

  3. #3 Zitieren
    Held Avatar von Lolomoloko
    Registriert seit
    Aug 2006
    Ort
    ~/
    Beiträge
    5.700
    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.
    Code:
    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".
    Lolomoloko ist offline

  4. #4 Zitieren
    Pretty Pink Pony Princess  Avatar von Multithread
    Registriert seit
    Jun 2010
    Ort
    Crystal Empire
    Beiträge
    11.307
    Der schönste weg wäre natürlich eine ZUstandsmaschine wo man Zeichen für Zeichen durchgeht und auch escape Zeichen haben kann.
    [Bild: AMD_Threadripper.png] Bei Hardware gibt es keine eigene Meinung, bei Hardware zählen nur die Fakten.


    Probleme mit der Haarpracht? Starres Haar ohne Glanz? TressFX schafft Abhilfe. Ja, TressFX verhilft auch Ihnen zu schönem und Geschmeidigen Haar.
    [Bild: i6tfHoa3ooSEraFH63.png]
    Multithread ist offline

  5. #5 Zitieren

    Batmanistrator
    Avatar von Thoronador
    Registriert seit
    Jul 2005
    Ort
    Morrowind, Vvardenfell-Distrikt
    Beiträge
    20.794
    Zitat Zitat von Multithread Beitrag anzeigen
    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() in Kombination mit System.String.Split(). Die Grundidee läuft dabei in etwa nach dem Schema:
    Code:
    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 daten die aus der Datei gelesenen Daten.

    Ein Tipp zum Schluss: Im MSDN 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.
    Thoronador ist offline

  6. #6 Zitieren
    Schwertmeister Avatar von Wundawuzi
    Registriert seit
    Mar 2008
    Beiträge
    716
    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 :/
    Wundawuzi ist offline

  7. #7 Zitieren
    Kämpfer
    Registriert seit
    May 2008
    Beiträge
    326
    Ö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.
    nikva ist offline

  8. #8 Zitieren
    Schwertmeister Avatar von Wundawuzi
    Registriert seit
    Mar 2008
    Beiträge
    716
    Zitat Zitat von nikva Beitrag anzeigen
    Ö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
    Wundawuzi ist offline

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •