werte auslesen und summieren



  • Kann jemand helfen ? 🙂
    In diesem Programm geht es um folgendes: information aus mehrern daten lesen und nur *bestimmte* werte in eine neue datei speichern
    z.b:
    textdatei1.txt:dies sind beispiel werte [stunden gearbeitet_10} und [dateien erstellt_2]
    textdatei2.txt: dies sind beispiel werte [stunden gearbeitet_32} und [dateien erstellt_4]

    die zahlen sollen summiert werden und in einer neuen datei gespeichert werden
    z.b:fertigedatei.txt:stunden gearbeitet =42 dateien erstellt=6

    jemand eine idee wie ich dies hinbekomme ? oder auch tipps ? danke im voraus

    #include <iostream>
    #include <fstream>
    #include <string>
    
    using namespace std;
    
    //für die nummerierung
    int var1 = 1, var2 = 2    , var3 = 3     , var4 = 4     , ;
    
    int main ()
    {
        // 4 verschiedene text dateien deren inhalt  zusammen in eine csv gebracht werden sollen 
        fstream fin( "C:/Ruby193/1.txt" );
      string buffer;
      string tmp_array[100];
      int i=0;
      while (fin.good()) {
        getline(fin,buffer);
        tmp_array[i]=buffer;
        i++;
    }
    
       fstream fin2( "C:/Ruby193/2.txt" );
      string buffer2;
    
      int a=0;
      while (fin2.good()) {
        getline(fin2,buffer2);
        tmp_array[a]=buffer2;
        a++;
    }
    
       fstream fin3( "C:/Ruby193/3.txt" );
      string buffer3;
    
      int e=0;
      while (fin3.good()) {
        getline(fin3,buffer3);
        tmp_array[e]=buffer3;
        e++;
    }
    
       fstream fin4( "C:/Ruby193/4.txt" );
      string buffer4;
    
      int v=0;
      while (fin4.good()) {
        getline(fin4,buffer4);
        tmp_array[v]=buffer4;
        v++;
    }
       //csv erstellen 
       ofstream myFile;
       myFile.open ("C:/Ruby193/hallo.csv");
       // Wenn keine fehler
       if (myFile)
       {
          // Daten schreiben
          myFile << var1 << buffer << endl;
          myFile << var2 << buffer2 << endl;
          myFile << var3 << buffer3 << endl;
          myFile << var4 << buffer4 << endl;
    
          // Dateien schliessen
          myFile.close();
          fin.close ();
          fin2.close ();
          fin3.close ();
          fin4.close ();
       }   
    }
    

  • Mod

    Cevin19994 schrieb:

    Kann jemand helfen ? 🙂
    In diesem Programm geht es um folgendes: information aus mehrern daten lesen und nur *bestimmte* werte in eine neue datei speichern
    z.b:
    textdatei1.txt:dies sind beispiel werte [stunden gearbeitet_10} und [dateien erstellt_2]
    textdatei2.txt: dies sind beispiel werte [stunden gearbeitet_32} und [dateien erstellt_4]

    die zahlen sollen summiert werden und in einer neuen datei gespeichert werden
    z.b:fertigedatei.txt:stunden gearbeitet =42 dateien erstellt=6

    Ich habe leider nicht verstanden, was die Aufgabe ist. Kannst du ein kurzes Beispiel für Eingabedateien und die dazu gesuchte Ausgabe geben?

    jemand eine idee wie ich dies hinbekomme ? oder auch tipps ?

    Ich weiß bei dieser Frage auch nicht, was du konkret wissen möchtest, aber an deinem Programm sind viele Sachen die man mit einfachen Mitteln sehr stark verbessern könnte. Vielleicht löst sich dann schon ein Teil der Schwierigkeiten:

    Zeile 8:
    - Globale Variablen. Warum? Mach Variablen so lokal wie nur möglich, das erspart nervige Fehler durch schwer zu findende, unbedachte Nebeneffekte.
    - Nichtssagende Namen. Selbst mit dem Kommentar habe ich keine Ahnung, was var1-var4 sein sollen. Gib deinen Variablen beschreibende Namen.

    Zeile 14:
    - Wenn du nur lesen möchtest, nimm doch einen ifstream.
    - Falls das f von fin ein Kürzel für den Datentyp sein soll: Es gibt viele Gründe, die in einer Sprache mit komplexen nutzerdefinierten Datentypen dagegen sprechen. Lass das lieber. Wie gesagt: Sprechende Namen. Dann braucht man das auch nicht.

    Zeile 16:
    - Das sieht eher so aus, als wolltest du einen vector oder sind in den Dateien wirklich genau 100 Datensätze? (Falls ja, dann passt dein darauf folgender Code nicht, da du nicht genau 100 einliest)
    - tmp ist auch so ein Namensteil der eigentlich nichts sagt und falls doch, dann meistens, dass die Variable überhaupt gar nicht nötig ist.

    Zeile 18:
    - ⚠ Schwerer Logikfehler! Wo hast du das denn her? Zuerst prüfst du den Stream auf Konsistenz prüfst, dann versuchst du etwas zu lesen, dann das gelesene zu verarbeiten. Aber was ist, bei einem Lesefehler (z.B. Dateiende)? Dann verarbeitest du die letzte Zeile zweimal. Eine Leseschleife sieht in C++ meistens so aus wie while(Leseaktion) verarbeite;
    - Aus der Aufgabenstellung habe ich zumindest mitbekommen, dass Zahlen in den Dateien stehen. Warum dann die ganze Stringverarbeitung?

    Zeile 18-52:
    - Schon einmal etwas von Funktionen gehört? Wenn bei mir in einem Programm zwei Zeilen mehrmals vorkommen fühle ich mich schon immer schuldig. Hier kommen sechs Zeilen 4x vor.

    Zeile 53:
    - Also ist es jetzt auf einmal CSV-Format? Klang in der Aufgabenstellung noch ganz anders. Ich sehe auch nirgendwo ein einziges Komma in der Ausgabe

    Zeile 54-55:
    - Mach die Datei doch direkt im Konstruktor auf, wie vorher schon.

    Zeile 57:
    - Was soll diese Abfrage? Da du auf ein nicht-Öffnen nicht weiter reagierst, in eine nicht-geöffnete Datei aber auch sowieso nicht geschrieben wird, macht diese Abfrage praktisch gar nichts. Nicht blind Code von anderen Abschreiben. Und wenn, dann nur von Leuten, bei denen sich das Abschreiben lohnt (insbesondere deutsche Autoren von C++-Büchern zählen selten dazu, siehe auch den Kommentar zu Zeile 18. Den Fehler habe ich schon in mehreren schlechten Büchern gesehen). Du musst von jedem Zeichen in deinem Programm genau wissen, was es macht und warum du es setzt.

    Zeile 60-63:
    - Nutz doch einen Zeilenumbruch ('\n'), wenn du einen Zeilenumbruch willst. endl macht zwar auch einen Zeilenumbruch, aber auch noch ein flush() hinterher, was du hier (und sonst meistens auch) sicherlich nicht möchtest.

    Zeile 65-70:
    - Komplett sinnlos, wenn die Streams nicht nochmal geöffnet werden und eine Zeile später sowieso aus dem Scope gehen. Sieht wieder wie abgeschrieben aus, aus einem Buch, das besser in einem Mülleimer aufgehoben wäre.



  • Ähm ja danke das du dir die zeit genommen hast 🙂
    auf deine hinweise werde ich achten und das noch mal überarbeiten 🙂
    um die eigendliche aufgabe noch mal zu beschreiben

    ich habe ein ordner in denen mehrer markdown dateien drinne stehen in jeder dieser markdown dateien sind in klammern werte angegeben 🙂
    mein programm soll später die werte auslesen und summieren und dann in eine exel tabelle (csv) gespeichert werden 🙂

    inhalt einer markdowndatei ( # Meeting 1

    [2012-10-04 15:01|hours_worked=1,5] )

    mein programm soll nur die werte in den eckigen klammern nehmen und sie zusammen mit den werten aus den anderen md dateien summieren und zum schluss sollte sowas in einer exel.csv rauskommen :

    day;filescreated;hours_worked
    2012-10-03;4;
    2012-10-04;2,5;11,5

    also auch die reihen folge beachten 🙂 jetzt ein wenig klar was ich meine ?
    sry bin ein totaler neuling ... ich bedanke mich weiterhin für hilfen und tipps trz meiner schlechten kenntnise und beispiele 🙂



  • Datum und Uhrzeit aufsummieren, hä? Am Besten kopierst du mal ein paar Zeilen deiner Dateien hier rein und erklärst dann nochmal was du genau aufsummieren willst.



  • out schrieb:

    Datum und Uhrzeit aufsummieren, hä? Am Besten kopierst du mal ein paar Zeilen deiner Dateien hier rein und erklärst dann nochmal was du genau aufsummieren willst.

    markdowndatei 1 : # Meeting 2

    [2012-10-04 15:01|hours_worked=10]

    that should vie

    markdowndatei 2 😶 Meeting 1

    [2012-10-04 15:01|hours_worked=1,5]

    markdowndatei 3 😶 Day October 3, 2012

    ## Protocol
    Worked till mid day
    [2012-10-03 10:15|filescreated=1]

    [This is a like](http://empuxa.com) - dont' confuse it!!

    and then some more

    [2012-10-03 16:59|filescreated=3]

    that should give 4 as a total for this day
    day;filescreated
    2012-10-03;4

    markdowndatei 4 😶 October 4, 2012

    ## Protocol

    Let's see... Worked till mid day
    [2012-10-04 10:15|filescreated=2]
    [2012-10-04 14:15|filescreated=0,5]

    should give 2,5

    one more value [2012-10-04 17:01|hours_worked=1,25]
    ----------------------------------------------------------------------
    Die werte in den klammern sind ausschlaggebend 🙂
    diese werte sollen ausgelesen werten und in eine exel.csv geseichert werden
    beispiel
    Datum,file_create,hours_worked..
    und darunter in der tabelle die werte aufsummiert also am 4.10.2012 wurde so und soviele stunden gearbeitet und so und so vile dateien erstellt ...
    ---------------------------------------------------------------------
    so ungefähr

    day;filescreated;hours_worked
    2012-10-03;4;
    2012-10-04;2,5;11,5

    mfg cevin


Log in to reply