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!