txt datei abfragen



  • Hallo erstmal an alle;

    ich hätte da ein kleines Problem, vielleicht kann mir ja jemand schnell auf die Sprünge helfen??

    Ich möchte aus einer txt Datei Messwerte abfragen die durch ";" getrennt sind.
    Die Messwerte sollen dann jeder einzeln einer Variablen zugewiesen werden und später dann verarbeitet werden.Probleme macht nur die Trennung durch ";".
    Leider steh ich so dermasen auf dem Schlauch! Hab noch keine so richtige Idee wie das wohl funktioniern kann.
    Und dazu bin noch ein ziemlicher Grünschnabel was C++ angeht.

    Bin dankbar für jede Hilfe...

    Gruß Jochen



  • Nutzt du CString? Dann schau dir:
    Find
    Left
    Mid
    Right
    an.



  • Danke schon mal, ich werd aber nicht richtig schlau daraus: soll ich jeden einzelnen Messwert einlesen bis zum ";" und dann sagen, alles was links vom ";" steht ist der Variablen m1 zuzuweisen usw.?? Wie soll denn die Syntax aussehen?? Da steckt mein Problem begraben...



  • Hier mal das Prinzip (ohne jegliche Fehlerbehandlung!!!):

    CFile inFile("messwert.txt", CFile::modeRead);
    CArchive archive(&inFile, CArchive::load, inFile.GetLength());
    CString line, value;
    while (archive.ReadString(line))
    {
        int n = 0;
        while (AfxExtractSubString(value, line, n++, ';')
        {
            DoSomethingWith(value);
        }
    }
    archive.Close();
    inFile.Close();
    

    Das CArchive kann man sich natürlich auch sparen, aber ich hab das ganze gerne auf einen Rutsch im Speicher, wenn es nicht grad mehrere 100MB-große Dateien sind.



  • Wie wäre es mit einem Array?



  • An ein Array hab ich auch mal kurz gedacht, nur da war das Problem das die Trennung der Messwerte durch ";" war/ist.

    Kann mir noch kurz jemand erklären was denn die einzelnen Schritte in jencas Lösung machen?? Ich bin nämlich Maschinenbauer und "leider" kein Informatiker...



  • mit den CString Methoden Find und Mid kannst du alles lösen.

    int pos = 0;
    int npos = 0;
    int ccount = 0;
    while(npos != -1)
    {
    	npos = DeinCString.Find(";",pos);
    	if(npos != -1)
    	{
    		//Hier an der Stelle ist POS die letzte(+1 Zeichen weiter, da du mit dem ; selbst ja nicht arbeiten willst) und NPOS die nächste Fundstelle
    		pos = npos+1;
    	}				
    }
    


  • Oh Shit, jetzt bin ich glaub ganz raus?!? Wo muss ich denn den Code reinpacken??
    Ich öffne die Datei "Messwerte.txt" mit nem ifstream eingabe; eingabe.open (...).
    und dann, wie solls weiter gehen?
    sorry für meine blöde Fragerei, aber wie gesagt, bin leider noch ein Grünschnabel..



  • rjochen schrieb:

    Oh Shit, jetzt bin ich glaub ganz raus?!? Wo muss ich denn den Code reinpacken??
    Ich öffne die Datei "Messwerte.txt" mit nem ifstream eingabe; eingabe.open (...).
    und dann, wie solls weiter gehen?
    sorry für meine blöde Fragerei, aber wie gesagt, bin leider noch ein Grünschnabel..

    Jencas Code deckt schon alles ab...in der Zeile DoSomethingWith(value); müsstest du ansetzen

    Bei dem Code den ich eben geposted hatte müsste der Inhalt der Textdatei bereits im CString DeinCString stehen.
    mit der MID Methode könntest du dann an der Stelle ansetzen wo ich kommentiert hatte


Anmelden zum Antworten