Ausgabe in Datei



  • Wenn es dir rein um die Ausgabe in eine Datei geht (.txt zum Beispiel) kannst du das unter Anderem mit Streams erreichen.

    Ein einfaches Beispiel:
    http://www.kleincodiert.at/cpp_adv.php?selected=lang#Streams



  • @Wirago:

    Wenn ich das richtig sehe habe ich eine einzige Variable, die alle Zahlen von A bis B hochzählt, jedesmal geprüft wird und falls die Prüfung positiv ist im BSFenster ausgegeben wird.

    Ich müßte also dies Variable, ... ja was mach' ich mit der und dem Stream?
    Soweit ich das sah muß ich da Programmteile dazutun #include aber was. Und wie krieg ich die Variable in den Stream und ... überhaupt schrieb ich
    Zitat: "ps. Ich will nicht C++ lernen".
    Soweit war das gut gemeint aber leider hoffnungslos Wirago.

    grüsse fiona



  • Wenn du nicht C++ lernen willst siehe die Antwort von SeppJ. Da musst du nichtmal dein Programm verändern. Wenn das nicht dem gewünschten entspricht musst du wohl doch ein wenig C++ lernen oder jemanden finden, der die Änderungen für dich vornimmt.



  • Wirago schrieb:

    Ein einfaches Beispiel:
    http://www.kleincodiert.at/cpp_adv.php?selected=lang#Streams

    Da die verlinkte Website auch in deiner Signatur zu finden ist nehme ich an, dass du der Betreiber dieser Seite bist. Zu dem Beispiel möchte ich anmerken, dass die Konstruktion for each (string s in list) kein gültiges C++ ist. Das scheint irgendeine wirre Visual Studio Erweiterung zu sein.



  • Wie schon die anderen schrieben, entweder selber ein wenig was lernen oder einen anderen Weg suchen.

    @sebi707
    Danke für den Hinweis, for each (x in y) ist zwar in C++/CLI Projekten verfügbar (zumindest in Visual Studio) aber kein korrekter C++ - Standard. Wohl in alter C# Manier falsch übersetzt. Werde ich ausbessern.



  • aufruf_deines_programms > zieldatei:

    Das über das Betriebssystem und die Eingabeaufforderung geht wohl nicht, denn da gibt es noch eine Abfrage aus dem Programm heraus.

    grüsse fiona



  • type abfrage.txt | programm.exe > zieldatei.txt
    

    oder so ähnlich 🙂
    in anfrage.txt steht dann die Benutzereingabe die erwartet wird.


  • Mod

    Bitmapper schrieb:

    type abfrage.txt | programm.exe > zieldatei.txt
    

    oder so ähnlich 🙂
    in anfrage.txt steht dann die Benutzereingabe die erwartet wird.

    Ich denke, er meint, dass da irgendeine Abfrage vom Programm ausgegeben wird, die dann auch in der Ausgabedatei landet, dies aber nicht passieren soll. Denn auch ein Programm mit umgeleiteter Ausgabe kann man mit beliebiger Eingabequelle benutzen.

    Falls ich Recht habe, wäre das eine Sache für nachgeschaltete Filter. Das ist dann aber nicht trivial für jemanden, der nicht programmieren möchte. Zwar sollte ein einfaches head/tail reichen, aber für den Laien ist das vermutlich schon zu viel.



  • @ SeppJ:
    @ alle:

    Ich meine, dass im Programm eine Abfrage eines Datums stattfindet, die dann auch über die von Dir vorgeschlagene Umleitung(Eingabeaufforderung > textfile.txt) funktionieren muss, denn sonst geht es ja mit dem Programm nicht weiter.

    Ich habe jetzt die Abfrage genullt (//) und die Variable im Code gleich gesetzt, was aber echt umständlich ist.
    Bei einer Zahl funktioniert es. Bei einer höheren (die ich aber brauche) nicht. Da kommt dann die Meldung:

    <Das Programm oder Feature "..." kann aufgrund einer Inkompatibilität mit 64-bit Versionen von Windows nicht gestartet bzw. ausgeführt werden. ...>

    Ausserdem ist die Ausgabeformatierung dabei verloren gegangen. Jetzt erhalte ich jede Zahl in eine eigene Zeile.

    Ich poste mal ein paar Zeieln (das Programm ist nicht von mir, ich kann es also nicht komplett zeigen.

    #include<iostream>
    #include<fstream>
    #include<cmath>
    using namespace std;
    
    int main(void){
        unsigned limit;
    
        //cout << "Please insert upper limit.\n";
        //cin >> limit;
    ...
    ...
    ...
    
    for(unsigned i=0; i<=limit; ++i){
            if(!Stroke[i]) cout << i << endl;
        }
       // printf(prime);
    
    	delete[] Stroke;
    
        return 0;
    }
    

    Was und wohin mit dem Vorschlag:

    type abfrage.txt | programm.exe > zieldatei.txt

    grüsse fiona


  • Mod

    ahnung.slos schrieb:

    Ich meine, dass im Programm eine Abfrage eines Datums stattfindet, die dann auch über die von Dir vorgeschlagene Umleitung(Eingabeaufforderung > textfile.txt) funktionieren muss, denn sonst geht es ja mit dem Programm nicht weiter.

    An irgendeiner Stelle wirst du lernen müssen, wie man einen Computer bedient. Entweder musst du C++ lernen und dein Programm ändern; oder du musst lernen, wie du die grundlegenden Mittel deines Betriebssystems nutzen kannst, um ein Programm zu starten und die Ausgabe umzuleiten.

    Die Abfrage von irgendwas in deinem Programm ist dabei überhaupt kein Problem. Du siehst bloß die Frage nicht, weil diese eben in die Datei geschrieben wurde. Das hindert dich aber nicht da dran, eine Eingabe zu machen oder diese anderweitig zur Verfügung zu stellen.

    Ausserdem ist die Ausgabeformatierung dabei verloren gegangen. Jetzt erhalte ich jede Zahl in eine eigene Zeile.

    In der Datei steht Zeichen für Zeichen das, was dein Programm ausgibt. Eventuelle Unterschiede können zustande kommen, wenn:
    a) Du aus irgendeinem Grund die Zeichen bei der Ausgabe der Textdatei anders interpretierst. Das passiert beispielsweise gerne, wenn Tabulatorzeichen im Spiel sind, da unterschiedliche Anzeigeprogramme diese eventuell unterschiedlich interpretieren.
    b) Das Programm gibt nicht einfach nur die Zahlen plus Formatierungszeichen aus, sondern hat eine Art "grafische" Oberfläche, die direkt mit dem Terminal kommuniziert und dieses veranlasst, die Ausgaben an eine bestimmte Stelle zu zeichnen. In dem Fall ist dein Problem praktisch nicht lösbar, ohne das Programm gänzlich umzuschreiben, denn der Autor des Programms hat dieses aus irgendeinem Grund so geschrieben, dass es nur in bestimmten Terminals funktioniert.

    Ich greife mal dein Beispielprogramm auf

    #include<iostream>
    using namespace std;
    
    int main()
    {
        unsigned limit;
    
        cout << "Please insert upper limit.\n";
        cin >> limit;
    
        for(unsigned i=0; i<=limit; ++i)
        {
            cout << i << endl;
        }
    }
    

    Übersetzen wir das mal bei einem Online-Compiler und lassen es ausführen:
    http://ideone.com/SVWo7E
    Das Programm benötigt Eingaben und macht Ausgaben. Das Programm wird irgendwo auf irgendeinem Server im Internet ausgeführt, trotzdem kannst du die Ausgabe auf einer Webseite sehen und ich konnte eine Eingabe ("15") machen, obwohl ich gar nicht an dem Server sitze. Wie haben die das gemacht? Sie haben eben meine Eingabe von dem Webformular an das Programm weitergeleitet und die Ausgabe des Programms in eine Datei gespeichert, die nun Teil der Webseite ist. Eben das, was wir dir hier schon seit der ersten Antwort empfohlen haben.



  • @ SeppJ:

    Dank für Deine ausführliche Antwort!

    So wie Du das in Deinem Link vorführst, gerade so geht es eben leider auf meiner Windows [Win 8 64] Plattform nicht.
    Aber: Kannst Du denn darüber die ausgegebenen Zahlen 0-15 auch in eine Datei schreiben, die auf Deinem Rechner liegt? Das wäre vielleicht etwas für mich.

    ... und dein Programm ändern.
    

    Es ist ja nicht "mein" Programm. Ich komme ja nicht hier an, tue ahnungslos um mir "mein" Programm von Euch korrigieren zu lassen. Da würde ich schon mit offenen Karten spielen, wie sich das gehört.

    Das mit den Zeilen hab' ich hingekriegt. Ich wähle in der Textdatei Option 'Zeilenumbruch'. Aber ich bräuchte zwischen den Zahlen wenigstens ein Semikolon.

    Aber warum krieg ich einen Fehler nur weil ich für den Zähler eine höhere Zahl im Code einführe? Genauer: Bei limit=10^6 läuft es, bei limit=10^7 kommt der Fehler. Ist das nicht ungewöhnlich?

    grüsse fiona

    ps.: Ich hab' da online ausführbare Programme gesucht, die so was machen. Aber die schwächeln auch bei hohen Limits. Da kommt dann "Ein Skript auf dieser Seite ist eventuell beschäftigt oder es antwortet nicht mehr. Sie können das Skript jetzt stoppen oder fortsetzen, um zu sehen, ob das Skript fertig wird."
    Und ich suche Zahlen bis 10^10.


  • Mod

    ahnung.slos schrieb:

    ps.: Ich hab' da online ausführbare Programme gesucht, die so was machen. Aber die schwächeln auch bei hohen Limits. Da kommt dann "Ein Skript auf dieser Seite ist eventuell beschäftigt oder es antwortet nicht mehr. Sie können das Skript jetzt stoppen oder fortsetzen, um zu sehen, ob das Skript fertig wird."
    Und ich suche Zahlen bis 10^10.

    Moment mal! Es geht also letztlich gar nicht darum, dass du die Ausgabe dieses speziellen Programms in einer Datei haben musst? Stattdessen willst du einfach das Ergebnis einer gewissen Rechenaufgabe in einer Datei haben, egal wie? Warum fragst du nicht stattdessen gleich nach dem was du erreichen möchtest? Stattdessen hast du jede Menge Zeit und so ziemlich allen guten Willen der Helfer damit verschwendet, dir bei der Methode zu helfen, die du dir dafür ausgedacht hast. Dabei wäre es vermutlich extrem einfach gewesen, dir ein Programm für deine Rechenaufgabe zu schreiben, das alles in eine Datei ausgibt. Inzwischen dürften aber vermutlich so ziemlich alle potentiellen Helfer vergrault worden sein.



  • Achje, geht es hier etwa um Primzahlen?
    Das wäre ja langweilig!


  • Mod

    hustbaer schrieb:

    Achje, geht es hier etwa um Primzahlen?
    Das wäre ja langweilig!

    Da du mit der Vermutung so gut wie sicher Recht haben wirst, können wir uns auch sparen, auf eine Antwort des Threaderstellers zu warten:
    https://primes.utm.edu/lists/small/millions/
    Geht praktischerweise bis ganz knapp vor 10^10. Mehrere Dateien aneinander zu hängen bekommt er hoffentlich selber hin. Das war der erste Treffer zu Google: list of prime numbers as file, etwas was der Threadersteller, wenn du recht haben solltest, zuallererst hätte machen sollen.

    verlinkte Seite schrieb:

    Besides, downloading primes is a better use of bandwidth then much of the downloading done on the Internet.

    😃


Anmelden zum Antworten