Unix Programmierung & C++ ?!



  • Hallo zusammen,

    habe ein dickes Problem, und zwar haben wir heute eine Aufgabe für morgen bekommen, welche wir noch nie so behandelt haben...

    http://www.fotos-hochladen.net/uploads/bildschirmfotow3q205uhv4.png

    Dies ist unsere Aufgabe, wozu wir noch 2 txt Dateien erhalten haben, zum Ausprobieren und eine ReadFile.h.

    #ifndef __READFILE_H__
    #define __READFILE_H__
    
    #include<iostream>
    #include<fstream>
    #include<string>
    
    class ReadFile {  
    
    private:
      std::string filename;
      std::fstream file;
    
    public: 
      ReadFile(std::string f)  {
        filename = f;
        try {
          file.open(filename.c_str(), std::fstream::in | std::ios::binary);
        }
        catch( ... ) {
          std::cout << "Datei existiert nicht!\n";    
        };
      }
    
      ~ReadFile() { file.close();}
    
      bool eof(){ return file.eof();  }
    
      char GetChar() {
        char c = file.get();
        if (!file.eof()) return c;
      }
    };
    
    //using namespace std;
    #endif /* __READFILE_H__*/
    

    Das ganze haben wir noch nie behandelt, also wie ich von der CPP Programmierung auf die Konsole inklusive der Optionen komme.
    Problem an der Sache ist unseren Übungsgruppenleiter interessiert das herzlich wenig..
    Ich habe leider nicht den Ansatz einer Ahnung wie das funktionieren sollte...

    Ich nutze zwar auch Linux und habe dieses WC tool getestet und es funktionierte auch auf Anhieb, aber wie ich davon ein eigenes inklusive Optionen hinbekommen soll bleibt mir schlicht rätselhaft, da mir jeglicher Ansatz fehlt... 😮



  • huwul schrieb:

    ... also wie ich von der CPP Programmierung auf die Konsole inklusive der Optionen komme.

    Ich habe keine Ahnung, was mir diese Worte sagen sollen ...

    Vielleicht solltest du dir mal die Aufgabe inklusive "Hinweise" durchlesen.



  • Dann ums dir genauer zu erläutern, man soll in dem Linux - Terminal (Shell)
    eingeben gip-wc -l -w -c [DATEINAME]
    -l -w -c sind die Optionen zum Befehl gip-wc

    ich weiß allerdings nicht wie ich von einer Readfile klasse zu diesem Terminal komme, sodass es möglich ist dass ich diesen Befehl eingebe und das Ergebnis erscheint...



  • Hallo

    Wie manni66 schon erwähnt hat, solltest du dir den Hinweis mal durchlesen, da steht nämlich drin, wie du an die Parameter kommst, die deinem fertigen Programm übergeben werden.

    Nochmal explizit, die 2x Parameter an der main-Funktion sind hier sehr wichtig. Du musst nicht an die Konsole kommen, diese liefert es dir direkt mit.

    Solltest du auch damit nicht weiterkommen hier noch ein Link

    Der Klasse ReadFile gibts du dann den Dateinamen, denn du über die 2 oben genannten Parameter ermittelt hast, im Konstruktorargument um die Datei zu öffnen und deren Inhalt zu ermitteln.

    Mfg mdn



  • Suche im Internet mit einer Suchmaschine deiner Wahl nach: c++ main argc argv
    (ja, alle vier Wörter auf einmal)



  • Ja das habe ich ja auch alles soweit verstanden, aber wie soll man denn das Programm dazu kriegen, diese & jene Datei zu öffnen und zu lesen bzw nur auszulesen und zu zählen..

    Also der Zugriff auf die Datei fehlt mir irgendwie komplett..



  • huwul schrieb:

    Also der Zugriff auf die Datei fehlt mir irgendwie komplett..

    Was macht ReadFile?



  • Die Datei öffnen die als letzter Parameter von mir angegeben wird und danach wieder schließen und dazwischen muss ich mich einhaken, allerdings fehlen mir halt die ganzen Funktionen...

    Sprich ich weiß nicht wie ich wenn ich jetzt abc.txt öffne die Zeilen auslesen kann von dieser speziellen Datei.

    Wobei das auch nicht zu 100% stimmt, da hier kein wirklicher Zugriff erfolgt, eigentlich sollte er ja ausgeben wenn ich eine Datei habe, die es dort nicht gibt, dass es die Datei nicht gibt, was ebenfalls nicht erfolgt..



  • Was macht ReadFile::GetChar()?



  • Einen Buchstaben speichern und zurückgeben, welcher weiß ich nicht..

    Das Ding ist, ich muss ReadFile irgendwie den Filenamen übergeben, und so wie es aussieht mit dem string f.
    Allerdings scheint dies nicht ganz zu funktionieren...

    #include <iostream>
    #include "ReadFile.h"
    using namespace std;
    
    int main(int argc, char** argv)
    {
    	for(int i=0; i<argc; i++){
    	cout << argv[i]<<endl;
    	}
    	string f = argv[argc];
    	ReadFile read(string f);
    	read.GetChar();
    }
    

    Ebenso, wie ich mit der Instanz von ReadFile die Funktzion GetChar nicht nutzen kann, da sie angeblich nicht Member der Klasse wäre..



  • huwul schrieb:

    Einen Buchstaben speichern und zurückgeben, welcher weiß ich nicht..

    nicht einen, sondern den nächsten

    string f = argv[argc]; // das ist einer zu weit
    	ReadFile read(string f); // warum string?
    

    Grundsätzlich wäre noch anzumerken, dass ReadFile von einem Dilettanten geschrieben wurde. Der Konstruktor wird keinen Fehler feststellen und GetChar() ist fehlerhaft. Der Destruktor ist überflüssig.



  • Ja das stimmt, habe das ausversehen von einem Fehlversuch gerade kopiert..

    okay also wie ich das verstehe:

    ReadFile read( f);
    

    übergibt den eingegebenen Dateinamen an ReadFile?

    Das tut mir leid, derjenige Dilettant hat uns ja auch zu dem Thema nichts gesagt...

    Tut mir echt sehr leid, aber ich kriegs nicht in den Kopf rein, wie ich dann auf die Zeilen z.B. zugreifen kann..
    Das hier war mein verzweifelter Versuch aber durchblicken tue ich das nicht..

    void ReadFile::count()
    {
    	string s;
    	getline(file, s);
    	cout << s << endl;
    }
    

    ( Mal so am Rande, das geilste daran ist auch noch, wer das nicht schafft, darf seine Klausur nicht schreiben, obwohl explizit gesagt wurde, dass so etwas niemals hier drankommen wird.. )



  • Du kannst keine Zeilen lesen. Du kannst aber das nächste Zeichen lesen. Und das sogar solange, bis eof erreicht wird.


Anmelden zum Antworten