.txt Zeilenweise einlesen



  • Hallo zusammen,
    Ich bin totaler Anfänger und versuche ein Programm in C++ zu schreiben. Um verschiedene Berechnungen anstellen zu können muss ich Werte aus einer Tabelle auslesen, welche ich gern als .txt speichern möchte. Die Tabelle sieht vom Prinzip her so aus:
    4 3 5 …
    4 5 8 …
    6 6 7 …
    6 9 3 …
    Im Grunde benötige ich immer nur eine Zeile. Die Auswahlkriterien sind Werte in Spalte 1 und 2.
    Ich möchte also die Tabelle so lange durchsuchen, bis z.B. der Wert in Spalte I 4 ist und der aus Spalte II 5. Im Anschluss sollen dann alle anderen Werte der Zeile als Variablen abgespeichert werden.

    Als Code habe ich bisher Folgendes, nur um erst einmal das Einlesen der .txt überhaut hin zubekommen, was allerding leider bisher nicht funktioniert:
    #include "stdafx.h"
    #include <fstream>
    #include <string>
    #include <sstream>
    using namespace std;

    int _tmain(int argc, _TCHAR* argv[])
    {
    ifstream datei("C:\\Users\\Marcel\\Desktop\\test.txt");
    string zeile;

    while (getline(datei,zeile))
    {
    stringstream zeilenpuffer(zeile);
    double a;
    double b;
    double c;

    zeilenpuffer >> a >> b >> c;
    }

    return 0;
    }

    Den Code habe ich mir hier abgeschaut: https://www.youtube.com/watch?v=rnGoCWNtNR0
    Außerdem verwende ich Visual Studio 2012.

    Bei mir kommen dann folgende Meldungen:

    "Tabelle.exe" (Win32): "C:\Users\Marcel\Desktop\Tabelle\Tabelle\Debug\Tabelle.exe" geladen. Symbole wurden geladen.
    "Tabelle.exe" (Win32): "C:\Windows\SysWOW64\ntdll.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
    "Tabelle.exe" (Win32): "C:\Windows\SysWOW64\kernel32.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
    "Tabelle.exe" (Win32): "C:\Windows\SysWOW64\KernelBase.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
    "Tabelle.exe" (Win32): "C:\Program Files (x86)\AVG\Av\avghookx.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
    "Tabelle.exe" (Win32): "C:\Windows\SysWOW64\msvcr120d.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
    "Tabelle.exe" (Win32): "C:\Windows\SysWOW64\msvcp120d.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
    Das Programm "[4704] Tabelle.exe" wurde mit Code 0 (0x0) beendet.

    Ich hoffe ihr könnt mir etwas weiter helfen.

    LG Marcel 🙂



  • Das Programm ist fehlerfrei durchgelaufen. Wo ist das Problem?



  • Ich habe wie im Video einen breakpoint gesetzt um zu schauen ob die Werte im Auto-Fenster bei den jeweiligen Variablen erscheinen. (Im Debugger). Tun sie aber leider nicht. Eine Fehlermeldung bekomme ich ebenfalls nicht, also es läuft, aber eben ohne das irgend etwas aus der Tabelle eingelesen wird. Oben wohl etwas schlecht Formuliert von mir.



  • Mars schrieb:

    Oben wohl etwas schlecht Formuliert von mir.

    Das kann man wohl sagen.

    Das Programm hält bei einem Brechpunkt in der Schleife, zeigt aber nicht den erwartetet Variableninhalt? Füge noch eine Zeile Code ein (am Besten gleich die Ausgabe der Variablen) und setze den Brechpunk dort hin.

    Ansonsten: du testest nicht, ob die Datei geöffnet werden konnte.



  • Erst "getline" und dann ein "stringstream". Laß das bloß nicht SeppJ oder Werner Salomon sehen 😉



  • Th69 schrieb:

    Erst "getline" und dann ein "stringstream". Laß das bloß nicht SeppJ oder Werner Salomon sehen 😉

    Hauptsache es geht überhaupt, ich habe erst vor ein paar Tagen mit C angefangen ;).

    Zunächst mal danke für die Hilfe, das Programm macht nun was es bis hier her soll und ließt eine Zeile nach der anderen und schreibt die einzelnen Werte auf die Variablen, allerdings nur bis zum nächsten Schleifendurchgang, dann werden Sie überschrieben...

    Wenn mir wer jetzt noch weiterhelfen mag wär das super :).

    Ich habe jetzt eine weitere Variablen x und y. Sobald x=a und y=b ist soll die Schleife stoppen und c auf z schreiben. Kann mir wer für Anfänger verständlich einen Tipp geben wie das Umsetzbar ist?

    LG Marcel



  • if(x==a&&y==b) {
      z=c;
      break;
    }
    


  • manni66 schrieb:

    if(x==a&&y==b) {
      z=c;
      break;
    }
    

    Eingefügt und geht, peinlich auf sowas Einfaches nicht selbst zu kommen. Nochmals vielen vielen Dank! 🙂



  • manni66 schrieb:

    ... Das Programm hält bei einem Brechpunkt in der Schleife, zeigt aber nicht den erwartetet Variableninhalt?...

    Diese 1:1 Übersetzungen sind wirklich lustig 👍 👍 👍


Log in to reply