Einlesen bis zu einen bestimmten Zeichen --> Weiterlesen



  • Hallo,
    ich habe eine Frage:
    Ich würde gerne Daten, die sich in einer Text-Datei befinden auslesen:
    Wert1|Wert2 [Leertaste]
    Wert1 soll seperat gespeichert werden, sowei Wert2.
    Dabei soll auch nur bis zum Leerzeichen eingelesen werden.
    Wie kann ich dies in C# umsetzen?
    Grüße



  • Die naivste Lösung wäre immer nur ein Zeichen einzulesen und dieses dann zu vergleichen. Falls dir das nicht sagst, solltest du dich erst mal mit weiteren Grundlagen beschäftigen bevor du dich mit Datei-IO beschäftigst.



  • schau dir mal

    String.Split('');
    

    an. Vllt hilft das.



  • Ich würde auch String.Split(); verwenden. Eine Alternative wäre Substring-Behandlung per String.IndexOf() und String.LastIndexOf();

    LG


  • Administrator

    @denjo303 & #Darius#,
    Ich würde euch raten, nochmals die genauen Anforderungen durchzulesen 😉
    Man kann zwar diese Anforderungen hinterfragen, aber dann sollte man dies auch explizit tun.

    @RaFb,
    Wie "ghjghjghj" es gesagt hat, Zeichen für Zeichen einlesen und vergleichen. Was anderes bleibt dir nicht übrig. Eine fertige Lösung gibt es dafür nicht und die würde schlussendlich auch nichts anderes machen.

    Grüssli



  • OK, danke.
    Wie kann ich denn nur Zeichen für Zeichen einlesen.
    Mit StreamReader das Stream Objekt erstellen und dann die Textdatei angeben?
    Gibt es da eine Methode für, Vllt. mit Hilfe der File Klasse, sodass
    ich die Zeichen in einem Char-Array abspeichern kann?
    Und dann evtl. if char.contains :, dann die stelle wo das : steht herausfinden
    (wie?) und dann diese stelle -1 (im array) in einer variable abspeichern?


  • Administrator

    Die Dokumentation darfst du selber lesen:
    http://msdn.microsoft.com/en-us/library/system.io.streamreader.aspx

    Grüssli



  • Ich würde die Datei eher mit File.ReadAllText oder Lines auslesen. Jenachdem wie du es brauchst.

    foreach (string line in File.ReadAllLines("bla.txt")
    {
        foreach (char c in line)
            // tu was
    }
    

    Ich muss allerdings gestehen, dass ich nicht weiß, ob das in der Mitte klappt. Sonst halt umformatieren in ein CharArray oder per for-Schleife und Substrings durcchlaufen / die zweite Schleife ersetzen:

    for (int i = 0; i < line.Length; i++)
        /* tu was mit */ line.Substring(i, 1)
    


  • Also ich habe jetzt in der Doku folgende interessante Informationen gefunden:
    StreamReader.Read(char buffer[], int index, int count);
    Ich glaube, ich weiss, wie ich das auslese:
    Ich kann den Inhalt der Textdatei selber bestimmen,
    es ist eine LOG-Datei, und die Logs werden von einem anderen Programm
    von mir erstellt. Ich werde dort einstellen,
    dass Wert1:Wert2 immer 5 Zeichen ergibt.

    char buffer[6];
    StreamReader lesen = new StreamReader(@"C:\Users\.....");
    lesen.Read(buffer, 0, 5);
    string Stunden = new string (buffer[0] + buffer[1]);
    string Minuten = new string (buffer[3] + buffer[4]);
    // Kann ich die Felder des Arrays denn einfach so
    // in einem string zusammenführen lassen?
    

    Jetzt sollte Minuten die ersten beiden Zahlenziffern beinhalten,
    und Stunden die letzten beiden. Ich bin mir unsicher, ob ich ich
    die Char-Elemente so aneinanderhängen kann.


  • Administrator

    Lern bitte zuerst die Grundlagen von C#, sonst hat das keinerlei Sinn.

    Grüssli



  • Jo, bin dabei.
    Ich bin eigentlich Umsteiger von C++, da ich denke,
    dass für meine Projekte C++ einfach unvorteilhaft wäre,
    habe ich nun mit C# angefangen.
    Ich habe einen Logger geschrieben,
    dieser dokumentiert, wann welcher Benutzer
    sich anmeldet, und nun ich will diesen so umbauen,
    dass er die Uhrzeit mit einer Pseudo-Zufallszahl
    multipliziert, sodass man nur mit einem bestimmten
    Programm diese Uhrzeit "entschlüsseln" kann.
    Der Pseudo-Zufallsfaktor wird dabei auch in eine Text-
    datei hineingeschrieben.
    Der Viewer[Das Entschlüsselungsprogramm] liest diesen
    Faktor aus un speichert ihn. Jetzt kommt der Teil,
    an dem ich hängen bleibe:
    Dann liest er die verschlüsselten Zahlen aus und
    devidiert diese mit dem ausgelesenen Faktor.
    Wenn ich weiss, wieviele Zeichen Wert1/Wert2 (inklusive dem 🙂 verbrauchen
    , und diese Zahl immer gleich ist,
    kann ich doch die ersten Zeichen in einen char-array und die nachfolgenden in einem anderen Array speichern. Damit dies Zeichenlänge immer dieselbe ist, muss ich Uhrzeiten [Stunden/Minuten] < 10 mit 10 multiplizieren. Richtige oder toal falsche Denkweise?


Log in to reply