C++ nur die erste Spalte eines .log auswerten

P

Paper

Guten Morgen :)

ich habe ein Problem und zwar folgendes.
Ich soll den einen Timestamp (der sich in der 1. Spalte befindet) anzeigen lassen.
Ich schaff es aber nur den Log komplett anzeigen zu lassen, also alle Spalten.
Die Splaten sind mit leerzeichen getrennt.
Hat jemand eine idee?

Danke im vorraus.


Bis jetzt sieht mein Code so aus:

C++:
#include <iostream>
#include <fstream>
#include <string>
#include <cstdio>

using namespace std;


int main() {

//Öffnet die Datei datei.log
ifstream file;
file.open ("datei.log");

//Schleife 
while (file)
cout << (char) file.get();

//Datei wird geschlossen
file.close(); 


//Fehler ausgabe wenn die Datei nicht geöffnet/gefunden werden kann
if (!file.eof()) {
                cerr << "Fehler beim ausgeben der Datei";}
                
//Wenn die Datei geöffnet/gefunden wurde                
cout <<endl <<endl;
cout <<"\t Zum schliessen druecken Sie Enter" <<endl <<endl;

        getchar();
        return 0;
        

    }
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

einfach das Leerzeichen suchen und nur den Teilstring bis dahin ausgeben:
C++:
ifstream file("datei.log");

if( file.is_open() )
{
    string str;
    
    while( getline(file, str) )
    {
        size_t nPos = str.find_first_of(' ');
        cout << (nPos != string::npos ? str.substr(0, nPos) : str ) << endl;
    }
    
    file.close();
}
Gruß
MCoder
 
Hallo,

danke für die schnelle antwort :)
wenn ich mal so ganz doof fragen darf was heißen diese Zeilen?

C++:
{
        size_t nPos = str.find_first_of(' ');
        cout << (nPos != string::npos ? str.substr(0, nPos) : str ) << endl;
    }
 
Zur Erklärung:

size_t nPos = str.find_first_of(' ');
Findet das erste Vorkommen eines Leerzeichens im string und gibt die Position zurück

cout << (nPos != string::npos ? str.substr(0, nPos) : str ) << endl;
Du kennst den Bedingsoperator ( ? ) in C? Es wird damit getestet, ob ein Leerzeichen gefunden wurde. Wenn ja, wird der Teilstring bis zum Leerzeichen ausgegen, ansonsten der gesamte String (es gibt dann nur eine Spalte).

Gruß
MCoder
 
Hi.

Um zu prüfen ob die Datei geöffnet werden konnte, solltest du die is_open Methode verwenden.

Anstatt die ganze Zeile in einen String einzulesen und darin zu Suchen, ist es auch möglich das erste Wort mit dem >> operator zu lesen und den Rest der Zeile mit ignore zu ignorieren:
C++:
if (file.is_open()) {
  std::string s;
  while (file >> s && file.ignore(std::numeric_limits<std::streamsize>::max(), '\n')) {
    std::cout << s << std::endl;
  }
}
Gruß
 
Zurück