Hilfe mit auslesen



  • vorweg buch hab ich heir: jürgen wolf c++ von a bis z

    und ich soll halt den kram auslesen das kann ich auch:

    #include <stdio.h> 
    #include <string.h> 
    
    int main() { 
      FILE *fh = fopen("/proc/cpuinfo", "r"); 
      if(!fh) { 
        perror("fopen"); 
        return 1; 
      } 
      enum { BufferSize = 2048 }; 
      char buffer[BufferSize]; 
      while( fgets(buffer, BufferSize, fh) ) { 
        size_t n = 0; 
        while( n < BufferSize && buffer[n] != '\0' ) { 
          printf("%s\n", buffer+n); 
          n += strlen(buffer+n) + 1; 
        } 
      } 
      fclose(fh); 
    }
    

    aber wie pack ich das nun oder speicher ich das nun in einer datei?


  • Mod

    Enno schrieb:

    das ganz soll über klassen gemacht werden 😕

    Klingt nach einer unsinnigen Anforderung, aber meinetwegen. Ich schlage vor:
    ifstream: Klasse die eine Datei wie einen Stream behandelt (lesend). Methoden und Member: Siehe C++-Standard
    ofstream: Klasse die eine Datei wie einen Strram behandelt (schreibend). Methoden und Member: Siehe C++-Standard.
    Eventuell noch:
    html_file: Klasse, die Informationen aus verschiedenen Quellen sammelt und zu einer HTML-Übersicht verarbeitet. Methoden: Irgendwas um Daten zuzufügen, vorzugsweise aus einem Stream. Irgendwas um das Ergebnis rauszuschreiben, vorzugsweise in einen Stream. D.h. im Klartext: Streamoperatoren überladen. Member: Irgendwas um die Informationen zu halten, z.B. einen Stringstream.

    meine stichwörter dazu sowas wie:

    fopen();

    Nein. C. Funktion, keine Klasse.

    pass file

    Nein. Häh, was? Wie kommst du auf dieses Stichwort?

    vllcht kennt ja jemand tuts oder hat paar tips code hab ich noch garnicht da ich irgentwie nicht weiß wie ich anfangen soll

    Vergiss C++-Tutorials (zumindest für Grundlagen wie diese), hol dir ein Buch, z.B. eines aus dem zweiten Link in meiner Signatur.


  • Mod

    Enno schrieb:

    vorweg buch hab ich heir: jürgen wolf c++ von a bis z

    Müll. Wegschmeißen. Nein! Besser verbrennen, damit es am Ende nicht noch jemand auf der Müllkippe findet und liest. Die Asche in einen Fluss streuen.

    und ich soll halt den kram auslesen das kann ich auch:

    #include <stdio.h> 
    #include <string.h> 
    
    int main() { 
      FILE *fh = fopen("/proc/cpuinfo", "r"); 
      if(!fh) { 
        perror("fopen"); 
        return 1; 
      } 
      enum { BufferSize = 2048 }; 
      char buffer[BufferSize]; 
      while( fgets(buffer, BufferSize, fh) ) { 
        size_t n = 0; 
        while( n < BufferSize && buffer[n] != '\0' ) { 
          printf("%s\n", buffer+n); 
          n += strlen(buffer+n) + 1; 
        } 
      } 
      fclose(fh); 
    }
    

    Das hat mit C++ und Klassen in etwa so viel zu tun wie, äh, C. Also gar nichts.



  • ich weiß mit klassen hab ich noch nichts

    man warum vermischt sich den c und c++ -.-

    also nur mal so ich programmiere seit 2 tagen 😃 mach grade parktikum und das is halt meine aufgabe:)

    mit den klassen werd ich dann mal schauen ob ich das so hinbekomme 😃

    mach ich die den in eine header datei???


  • Mod

    Enno schrieb:

    man warum vermischt sich den c und c++ -.-

    Historische Gründe. Es mischt aber nicht gut, man bekommt dabei allerlei Fehler. Ein C++-Compiler schluckt jedoch einfache C-Programme mit relativ wenig murren.

    Du mischt jedoch nicht. Der Code den du zeigst ist lupenreines C.

    also nur mal so ich programmiere seit 2 tagen 😃 mach grade parktikum und das is halt meine aufgabe:)

    Zunächst einmal solltest du herausfinden, welche Sprache ihr in dem Praktikum lernt. Man kann auch in C klassenähnliche Konstrukte machen, aber ides ist ein sehr gehobenes Thema, zu dem du definitiv noch lange nicht genug Grundlagen hast.

    mit den klassen werd ich dann mal schauen ob ich das so hinbekomme 😃

    Aber wie willst du das lernen? C++ hat mit C fast nichts gemeinsam, außer der Bedeutung der Sonderzeichen und den grundlegenden Kontrollstrukturen. Du müsstest aus dem Stand eine neue Sprache lernen.

    (Oder war der Code den du gezeigt hast gar nicht von dir sondern aus dem Internet zusammenkopiert?)

    mach ich die den in eine header datei???

    Diese Frage macht keinen Sinn. Headerdateien werden vielleicht vorkommen, vielleicht auch nicht. Das beantwortet sich aber von ganz alleine, wenn du die Grundlagen von C++ kannst und überhaupt weißt, was und wozu Headerdateien da sind.



  • 1. ich soll ambest hier gleich alles können 😃 c und c++
    aber ne das soll nun c++ werden

    2. code war ausm internet zusammenkopiert 😞

    also noch mal vom prinzip
    ich will nun etwas auslesen und das gelesen in einer datei speichern und für das auslesen wollte ich klassen machen um das dann zu nehmen und in eine datei zu schreiben



  • SeppJ schrieb:

    Die Asche in einen Fluss streuen.

    Nein, besser nochmal in einen Eimer Wasser schütten und einige Tage warten, bis sich das ganze pulverisiert hat. Nicht, dass am Ende noch ein Fisch einen Schnipsel mit char const* drauf findet.



  • im prinzip muss ich mir doch sowas in eine klasse packen oder?

    ifstream f;  // Datei-Handle
        string s;
        f.open(argv[1], ios::in); // Öffne Datei aus Parameter
        while (!f.eof())          // Solange noch Daten vorliegen
        {
            getline(f, s);        // Lese eine Zeile
            cout << s << endl;    // Zeige sie auf dem Bildschirm
    
        }
        f.close();                // Datei wieder schließen
    

  • Mod

    Etwas Inspiration, wie so etwas vom Grundgerüst her aussehen könnte:

    #include <fstream>
    #include <sstream>
    #include <iostream>
    
    class HTML_File
    {
    private:
      std::stringstream data;
    public:
      HTML_File& operator<<(std::istream& in)
      {
        data << "<pre>";
        for(char c; in.get(c);)
          if (c == '<') data << "&lt";  // HTML-Sonderzeichen ersetzen
          else 
            if (c == '>') data << "&gt";
            else
              data.put(c);
        data << "</pre>";
        return *this;
      }
      HTML_File& operator<<(const char *in)
      {
        data << in;
        return *this;
      }
    
      friend std::ostream& operator<<(std::ostream& out, const HTML_File& file)
      {
        return out << "<!DOCTYPE html>\n<html><body>"
                   << file.data.rdbuf()
                   << "</body></html>\n";
      }
    };
    
    int main()
    {
      HTML_File html; 
      std::ifstream cpu("/proc/cpuinfo");
      std::ifstream devices("/proc/devices");
      html << "Inhalt von /proc/cpuinfo:" << cpu
           << "Inhalt von /proc/devices:" << devices;
    
      std::ofstream out("example.html") ;
      out << html;
    }
    

    Ich vermute jedoch mal, dass du davon nicht ein Wort verstehst, richtig?


  • Mod

    Enno schrieb:

    im prinzip muss ich mir doch sowas in eine klasse packen oder?

    ifstream f;  // Datei-Handle
        string s;
        f.open(argv[1], ios::in); // Öffne Datei aus Parameter
        while (!f.eof())          // Solange noch Daten vorliegen
        {
            getline(f, s);        // Lese eine Zeile
            cout << s << endl;    // Zeige sie auf dem Bildschirm
    
        }
        f.close();                // Datei wieder schließen
    

    Das ist der typische Müll den man bei Jürgen Wolf lernt. Besser erst einmal abgewöhnen, dann richtig machen, dann in Klasse packen.

    Sieh auch:
    http://www.c-plusplus.net/forum/272350



  • zum glück bin ich ja nun hier 😃 kann ich den jürgy ab würgy xD



  • ich versteh vllcht 1/3

    wenn du mich jetzt auch noch teachen möchtest gerne 😃
    ansonst werd ich mir das alles so vornehmen



  • Enno schrieb:

    ich versteh vllcht 1/3

    wenn du mich jetzt auch noch teachen möchtest gerne 😃
    ansonst werd ich mir das alles so vornehmen

    Das sind Grundlagen, um ein gutes Buch wirste dich nicht herumschlängeln können. 😉



  • wo soll ich den nun ein gutes buch herzaubern?
    ich mein ich bin nur noch 2 tage hier
    und wenn ich das nicht schaffe darf ich nicht wieder kommen = no ausbildung


  • Mod

    Enno schrieb:

    ich versteh vllcht 1/3

    wenn du mich jetzt auch noch teachen möchtest gerne 😃
    ansonst werd ich mir das alles so vornehmen

    Ist vermutlich ein bisschen zu viel sowohl für meine Zeit als auch für den Inhalt, den man in so einem Internetforum noch transportieren kann. Vielleicht hilft es, wenn ich es so schreibe:

    #include <fstream>
    #include <iostream>
    #include <string>
    
    class HTML_File
    {
    private:
      std::string data;
    public:
      void add_verbatim(std::istream& in)
      {
        data += "<pre>";
        char c;
        while(in.get(c))
          if (c == '<') data += "&lt";
          else 
            if (c == '>') data += "&gt";
            else
              data += c;
        data += "</pre>";
      }
      void add_text(const char *in)
      {
        data += in;
      }
    
      std::string to_string()
      {
        std::string out = 
          "<!DOCTYPE html>\n<html><body>"
          + data
          + "</body></html>\n";
        return out;
      }
    };
    
    int main()
    {
      HTML_File html; 
      std::ifstream cpu("/proc/cpuinfo");
      std::ifstream devices("/proc/devices");
      html.add_text("Inhalt von /proc/cpuinfo:");
      html.add_verbatim(cpu);
      html.add_text("Inhalt von /proc/devices:");
      html.add_verbatim(devices);
    
      std::ofstream out("example.html") ;
      out << html.to_string();
    }
    

    Dies ist im Prinzip noch das gleiche Programm, ich habe die Operatorüberladung (Stichwort!) durch explizite Funktionsaufrufe ersetzt und den für Anfänger vielleicht etwas unintuitiven stringstream (ist eigentlich das gleiche wie die hoffentlich bekannten istream/ostream cin.cout) durch einen String ersetzt, bei dem die Operationen zum Zusammensetzen einfache Additionen sind (dürfte aber etwas weniger effizient sein, könnte man jedoch mit ein paar Konstrukten die ich jetzt nicht auch noch zusätzlich einführen möchte wieder ändern).

    Wenn jetzt noch wesentliches unklar ist (an der Technik), dann kann ich dich nur an die genannten Grundlagenbücher verweisen, ich kann das hier nicht alles erklären. Die Grundidee zur Vorgehensweise ist, die Dateien in eine verbatim-Umgebung zu packen (pre-Tags), dabei muss man die Zeichen mit Sonderbedeutung in HTML ersetzen, sonst denkt der Browser, dass das HTML-Code ist. Anderer Text wird einfach eingefügt (hier kann man auch weiteren HTML-Code einfügen, da ich nichts filtere). Bei der Ausgabe wird dann noch ein gültiger HTML-Header vor die Daten und die nötigen Tags drumherum gesetzt.



  • nno schrieb:

    ich mein ich bin nur noch 2 tage hier
    und wenn ich das nicht schaffe darf ich nicht wieder kommen = no ausbildung

    😮
    Dann aber mal schnell!



  • vielen dank 😃

    das hilft aufjeden fall 😃
    werd heutabend noch mal mit einem kumpel mich zusammen setzen
    und ich muss sagen ihr jungs seit fix hier

    ❤


Anmelden zum Antworten