Aus einer Datei lesen



  • Hallo!

    Ich muss eine Datei auslesen, die aus Strings bestehet. Die sehen ungefähr so aus:

    [
    S>a;
    ABB>ab;
    Abb>ss;
    usw.
    ]

    Hierbei sind Semikolon und > Zeichen eine vorher vereinbarte Zeichen.

    Ich habe dafür eine class entwickelt, mit zwei strings. Es muss jeweils linke Seite in erste string und rechte seite in zeite String eingelesen werden.
    Im Endefekt ist es egal, das werde ich irgendwie schon regeln, aber was ich nicht kann, wie ich ifstream veranlasse ab bestimmte Zeichen, in meinem Fall nach > Zeichen eine andere string auszulesen, und nach Semikolon die Zeile zu wechseln?
    Leider hatten wir im ersten Semester eine "Magere Einführung in C++" gehabt, wobei nichtmal ifstream erwähnt wurde.
    Wer könnte mir helfen?
    Danke!



  • Einmal könnte man mittels getline bis zu einem bestimmten char einlesen:

    int main()
    {
       string data;
       ifstream read("file");
       while(!read.eof())
       {
          getline(read,data,'>');
          cout << data << endl;
          getline(read,data,';');
          cout << data << endl;
          getline(read,data,'\n');
       }
       read.close();
       return 0;
    }
    

    oder aber man liest die komplette zeile und trennt dann den string:

    int main()
    {
       string data;
       ifstream read("file");
       int pos;
       while(!read.eof())
       {
          read >> data;
          pos=data.find('>');
          cout << data.substr(0,pos) << endl;
          cout << data.substr(pos+1,data.find(';')-pos-1) << endl;
       }
       read.close();
       return 0;
    }
    


  • Gut, vielen Dank!
    Ich werde mal schauen ob ich es hinkriege!



  • Hallo,

    ich als blutiger Anfänger in C++ Programmierung versuche mich auch grad ein wenig in die Materie einzuarbeiten und hab ein ganz anderes Problem. Ich wollt euren Quellcode mal ausprobieren, aber ich bekomme beim compilieren immer die Warning

    "main.cpp:18:2: warning: no newline at end of file"

    und wenn ich das Executable dann ausführe, wirft es viele Fehlermeldungne der Art "
    ./readfile: line 56: __LC_MEASUREMENT: command not found
    ./readfile: line 57: __LC_IDENTIFICATION: command not found
    ./readfile: line 61: extern: command not found
    ./readfile: line 63: struct: command not found
    ./readfile: line 67: char: command not found
    ./readfile: line 68: char: command not found
    ./readfile: line 74: char: command not found
    ./readfile: line 80: char: command not found
    "

    Woran liegts?

    Ach ja, ich compiliere unter Linux mit cpp, vielleicht ist das von Bedeutung.



  • #include <fstream>
    #include <iostream>
    
    int main()
    {...}
    


  • So hab ich das auch gemacht. War auch mein erster Gedanke, daß er ein include nicht findet 😕



  • ähm..hast du ..

    using namespace std;

    vergessen?



  • x_y schrieb:

    Einmal könnte man mittels getline bis zu einem bestimmten char einlesen:

    int main()
    {
       string data;
       ifstream read("file");
       while(!read.eof())
       {
          getline(read,data,'>');
          cout << data << endl;
          getline(read,data,';');
          cout << data << endl;
          getline(read,data,'\n');
       }
       read.close();
       return 0;
    }
    

    Hallo!

    Hätte noch eine frage.
    Wie kann ich die Anzahl der Zeilen und/oder Zeichen herausfinden?
    Bei den Zeichen so, dass es vorher vereinbarte Zeichen "übersehen" werden.
    Danke im Voraus!



  • wenn du bestimmte zeichen"übersehen" willst bleibt dir wirklich nur die zählmethode..

    length=string.length();
    for(int i=0;i<string.length()){
        if(string[i]==verbotenes_zeichen){
            --length;
        }        
    }
    


  • Ok, das hilft mir weiter.
    Aber, wie mache ich es mit Zeilen?
    (Zeilen müssen nicht übersehen werden)



  • Hat sich erledigt!
    Google macht's! 👍



  • Hi,
    namespace hab ich auch.

    Mittlerweile schmeißt er keinen Fehler mehr beim compilieren, aber ausführen läßt sich das Ding immernoch nicht fehlerfrei 😞

    Hat jemand noch einen anderen Tip?

    Ich werd mal schaun, ob die includes überhaupt da sind, aber da würde er ja auch beim compilieren schon meckern?

    Leiben Gruß an alle,
    Wiesnbrezn



  • Hi bin scheinbar doch nicht so doof.

    Es scheint nicht am Code, sondern am Compiler zu liegen. der cpp funzt scheinbar nicht richtig, bzw. das was hinten rauskommt. Mittlerweile verhunzt er auch mein ehemals funktionierendes Hallo Welt.

    Danke aber für eure Unterstützung, und falls jemand weiß, wiie dem Problem abhilfe zu schaffen sit, hab ich für anregungen natürlich immer ein offenes Ohr

    Winke Winke
    Wiesnbrezn



  • benutzt du den bcb und templates? dann is das normal^^


Anmelden zum Antworten