Variablen aus Tabelle einlesen



  • ich schreibe gerade ein programm das eine tabelle (*.txt datei, spalten sind durch TABs und zeilen durch Zeilenumbrueche getrennt) aus einer datei einliest und dann die Inhalte ueberprueft.

    Dazu muss ich allerdings die einzelnen Felder als variablen definieren.
    Wie stelle ich es an da sie ja nur durch \t getrennt sind???
    ich muesste immer genau die Zeile und die spalte wissen in der die variable ist die ich gerade ueberpruefe.

    fuer meinen bisheriger code habe ich diesen post etwas abgeaendert
    http://www.c-plusplus.net/forum/viewtopic.php?t=78131

    #include "stdafx.h"
    #include <iostream> 
    #include <fstream> 
    #include <string> 
    #include <sstream> 
    
    const char * const pFILENAME1 = "C:\\1.txt"; // Telegrammdatei 
    const char * const pFILENAME2 = "C:\\out.txt"; // Ausgabedatei 
    
    using namespace::std; // Namensraum std einbinden 
    
    int main() //Hauptfunktion 
    { 
        ifstream inFile; // Datei öffnen 
        inFile.open(pFILENAME1);
        if (!inFile) // Prüfen ob Datei vorhanden 
        { 
            cout << "Datei " << pFILENAME1 << " konnte nicht gefunden werden." << endl; 
            exit (1); 
        } 
    
        ofstream outFile; // Ausgabedatei öffnen bzw anlegen 
        outFile.open(pFILENAME2); 
        if (!outFile) // Prüfen ob Datei vorhanden 
        { 
            cout << "Datei " << pFILENAME2 << "ist nicht vorhanden." << endl; 
            exit (1); 
        } 
    
        do // Komplette Datei bearbeiten 
        {        
            string line; // Stringvariable Zeile 
            string spalte; // Stringvariable Kanalnummer        
            istringstream isspalte; // Konvertierungsstream
    		string ergebnis;
    
            getline(inFile, line); // Zeile einlesen 
    
            if (inFile.eof()) // Bei erreichen des Dateiendes Rest überspringen (!!!) 
                continue; 
            isspalte.str(line); // Eingelesene Zeile dem Konvertierungsstream zuweisen 
    
            getline(isspalte, spalte, '\n'); // Daten aus der Zeile extrahieren 
    
    		if( spalte[1] == '1') // Prüfung um welche art von file es sich handelt: SCPER File
            {
    			spalte[1];
    			spalte[2];
                outFile << line << endl; // Extrahierte Daten in Ausgabedatei schreiben                
            } 
    
            else 
            { 
    			cout << "Fehler! Es handelt sich nicht um eine Admoss oder GeoCENTREX Datei" << endl; 
            }            
        } 
        while (!inFile.eof()); 
            inFile.close(); // Datei wieder schliessen 
    }
    

    allerdings habe ich hier das problem das ich durch die getline funktion nicht weiss in welcher zeile ich bin...dies ist allerdings wichtig da die Tabelle einen tabellenkopf besitzt der natuerlich nicht ueberprueft werden soll...

    die tabelle sieht so aus:

    DataCalltype Summary Data				
    
    CallType	TaskGroup	Attempted	Queued	Presented
    NI.TR.XY	TR.NDA  	0	0	0
    IBO.03  	DI.IBO  	0	0	0
    IBO.TR  	DI.IBO  	0	0	0
    AN.INTER	TO.IBO  	0	0	0
    NI.DL.GR	DI.NDA  	0	0	0
    NI.VN.GR	        	0	0	0
    NI.PP.VI	DI.NDA  	10	0	10
    NI.PP.D1	DI.NDA  	0	0	0
    NI.PR.D1	DI.NDA  	0	0	0
    NI.IR.EN	DI.NDA  	0	0	0
    

    und die einzelnen muessen nun z.B. auf ihre laenge (1-8 ASCII Zeichen) oder miteinander (Attempted= Presented+Queued) verglichen werden. Falls Fehler auftreten sollen diese am ende der Zeile beschrieben werden.

    Das Programm ist fuer meine Ferialpraxsis, habe schon sehrviel herumexperimentiert und auch viele gute hilfen in eurem forum gefunden. Hoffe das ihr mir weiterhelfen koennt da ich in der schule nicht soooo viel C++ programmiert habe.

    THX schon jetzt!!!



  • kann mir da keiner weiterhelfen??? 😞



  • Du könntest das Tabellen-System so umstellen wie es zum Beispiel bei CSV-Dateien ist. Dort werden die Spalten durch ein Semikolon getrennt wodurch das einlesn schon etwas einfacher wird. So kannst du dann nach dam Semikolon suchen, den Text speichern und zum nächsten Semikolon springen usw.



  • ich kann das zeichen leider nicht aendern da es von dem programm das die tabelle erzeugt so vorgegeben ist.
    allerdings muss es doch egal sein ob ich nach einem Semikolon oder \t suche oder?

    Ich wuerde gerne wissen wie ich es am besten mache die 2te spalte einzulesen, oder bessergesagt den bereich zwischen den \t
    beim ersten ist es ja einfach weil von zeilenanfang bis \t, aba danach???

    Bitte um hilfe!



  • hilfe!


Anmelden zum Antworten