Die Zeit



  • Ich habe die Aufgabe eine .txt datei auszulesen und bestimmte Zeilen in eine neue Datei zu Schreiben.

    ein beispiel(der Beginn der Zeile ist immer gleich):

    wed apr 19 xx:xx:xx xxxx xxxxxxxx xxxx xxx xxx xxx xxx xx xxx xx
    wed apr 19 xx:xx:xx xxxx xxxxxxxx xxxx xxx xxx xxx xxx xx xxx xx
    thu apr 20 xx:xx:xx xxxx xxxxxxxx xxx xxxx xxx xx xxx xxxx xxxxxxx xxx

    so in etwa sieht das aus, nur halt das da keine x stehen sonder sachen die aber für die Aufgabe direkt nicht wichtig sind.

    ich möchte jetzt aber immer nur den jeweiligen tag in die extra Datei schreiben dh. ich wöllte nur die ersten beiden zeilen aus meinem Beispiel haben (mit xxx...)

    ich hab da schon etwas probiert aber ich kommt mit der time.h irgendwie nicht zurecht. wenn einer eine idee oder einen ansatz hat wie ich das hinkriege wäre ich extrem dankbar (über einen fast fertigen quellcode red ich nicht weil das wäre zu cool um war zu sein)

    danke

    Las_Bushus



  • Las_Bushus schrieb:

    ich möchte jetzt aber immer nur den jeweiligen tag in die extra Datei schreiben dh. ich wöllte nur die ersten beiden zeilen aus meinem Beispiel haben (mit xxx...)

    Was willst du jetzt eigentlich machen?

    ich möchte jetzt aber immer nur den jeweiligen tag in die extra Datei schreiben

    also so

    wed apr 19
    wed apr 19
    thu apr 20
    

    ich wöllte nur die ersten beiden zeilen aus meinem Beispiel haben (mit xxx...)

    oder so?

    wed apr 19 xx:xx:xx xxxx xxxxxxxx xxxx xxx xxx xxx xxx xx xxx xx 
    wed apr 19 xx:xx:xx xxxx xxxxxxxx xxxx xxx xxx xxx xxx xx xxx xx
    


  • 2teres.

    aus

    wed apr 19 xx xxx xxx xxx xx x x xx x
    wed apr 19 xxx xx x x x x x xx
    thu apr 20 xx xx xx x xx x x xx x

    will ich

    wed apr 19 xx xxx xxx xxx xx x x xx x
    wed apr 19 xxx xx x x x x x xx

    rausfiltern (weil heute der 19te april ist, ich will das halt so machen das ich das wenn ich die datei morgen ausführen würde nur thu apr 20 xx xx xx x xx x x xx x
    in der neuen datei stehen würde)



  • Ok, dann noch ein paar Fragen:

    1. Stehen in der Datei für jeden Tag genau zwei Zeilen oder können es auch mehrer oder vielleicht nur eine sein?

    2. In welcher Sprache soll es sein C/C++ ?

    3. Könntest du das was du bis jetzt schon programmiert hast zeigen, dann wäre es auch leichter dir zu helfen.



  • Du könntest die Datei zeilenweise per getline() (C++) bzw. fgets() (C) einlesen und anschließend aus jeder Zeile die Datumsangabe auslesen - wenn das Datum mit "heute" übereinstimmt, verarbeitest du die Zeile weiter, andernfalls geht es direkt zur nächsten Zeile.



  • @EEK:

    1. menge der Zeilen pro tag ist immer unterschiedlich

    2. ja in C/C++ (ob ich da jetzt groß objektorientierung reinknalle glaub ich nicht da es ja kein alzu großes prog werden sollte)

    3. also bis jetzt hab ich noch nix groß was funktioniert^^ ich kann ne komplette datei kopieren (hab ich so in der schule gelernt) aber ansich steht in meiner datei noch nix außer

    #include <stdio.h>
    #include (stdlib.h>
    #include <time.h>
    

    @CStoll das klingt klasse was du da sagst, wie programier ich das?

    ich hab jetzt schon herrausgefunden wie ich die time.h benutzen muss (http://www.galileo-press.de/openbook/c_von_a_bis_z/c_021_000.htm), aber das mit dem zeilenweisen einlesen klingt genial



  • Las_Bushus schrieb:

    @CStoll das klingt klasse was du da sagst, wie programier ich das?

    ich hab jetzt schon herrausgefunden wie ich die time.h benutzen muss (http://www.galileo-press.de/openbook/c_von_a_bis_z/c_021_000.htm), aber das mit dem zeilenweisen einlesen klingt genial

    Also das mit dem Zeilenweise einlesen könntest du in etwas so machen

    ifstream input("AlteDaten.txt");
    	string Data;
    
    	while(!input.eof())
    	{
    		getline(input, Data);
    		Data.erase(10,100);
    	}
    
    	input.close();
    

    Damit hast du dann nur noch das Datum aus deinen Zeilen. Und wie du die time.h benutz weißt du ja.



  • Las_Bushus schrieb:

    @CStoll das klingt klasse was du da sagst, wie programier ich das?

    Wie's in C++ geht, hat EEK ja geschrieben. In ANSI C müsstest du statt der Strings ein ausreichend großes char-Array verwenden und per man: fgets einlesen.

    (übrigens: statt des erase-Aufrufes kannst du dir auch den angekommenen String direkt ansehen und das Datum dort rauslesen (den Monatsnamen würde ich über eine Lookup-Tabelle zuordnen))



  • Mir ist langweilig, hab auch was gebastelt:

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    
    using namespace std;
    
    int main() {
      ifstream ifs("test.txt");
    
      if (!ifs)  //Fehler beim Öffnen?
        return 1;
    
      string s("");
      vector<string> v;
    
      while (ifs.good()) {
        getline(ifs, s);
        //Hier kannst du gleich die Abfrage reinbauen und nur dann in den vector einfügen, wenn's das heutige Datum ist
        //Pseudocode ;)
        if (s.substr(0,10) == heutigesDatum)
          v.push_back(s);
      }
    
      ifs.close();
    
      ofstream ofs("ausgabe.txt");
    
      if (!ofs)
        return 2;
    
      //vector rausschreiben
      copy(v.begin(), v.end(), ostream_iterator<string>(ofs, "\n"));
    
      ofs.close();
      return 0;
    }
    

    MfG

    GPC



  • danke Leute,

    eh ich hab grade auch noch ein problem mein datum in die form zu bringen und dann halt die bedingung richtig zu formulieren.

    @GPC: ich hab wenn ich das so erstmal spaßeshalber compiliert. ich habe 4 fehler (ich sollte vielleicht dazu sagen das ich Microsoft Visual C++ nutze)
    ich weiß das bei heutiges Datum dann mein zeug mit dem Datum auslesen rein soll (wenn ich das dann irgendwann mal in der form hinkriege wie ich mir das wünsche)

    1. 'heutigesDatum' nichtdeklarierter Bezeichner
    2.Binaerer Operator '==' //dieser Fehler tritt in der zeile auf :

    if (s.substr(0,10) == heutigesDatum)
    

    3. 'ostream_iterator' nichtdeklarierter Bezeichner //bei dem ding hab ich nicht mal den auch einer Idee was ein iterator ist !?

    4. "string" ungültige Verwendung dieses Typs als Ausdruck



  • Las_Bushus schrieb:

    1. 'heutigesDatum' nichtdeklarierter Bezeichner
    2.Binaerer Operator '==' //dieser Fehler tritt in der zeile auf :

    if (s.substr(0,10) == heutigesDatum)
    

    Jo ist klar, das ist ja auch Pseudocode, kommentiere einfach die if Zeile aus und er liest alles in den vector rein. Wenn du Probleme mit der Bedingung hast, komm wieder 🙂

    3. 'ostream_iterator' nichtdeklarierter Bezeichner //bei dem ding hab ich nicht mal den auch einer Idee was ein iterator ist !?

    Hier die Erklärung: http://www.sgi.com/tech/stl/ostream_iterator.html

    Mein Fehler, oben fehlt noch ein

    #include <iterator>
    

    4. "string" ungültige Verwendung dieses Typs als Ausdruck

    Das erledigt sich dann von selbst...

    MfG

    GPC



  • ich hab das jetzt soweit fertig, ich danke euch Leute ihr seit so genial!!



  • cat in.txt | grep -i "`date +\"%a %b %d\"`" > out.txt
    

    Das tuts auch 😉



  • wie jetzt? als c++ zeile?? oder jetzt bei linux als komandozeile?

    das ding ist die datei die ich einlese kann ich nicht verändern da sie durch ein anderes programm dauerhaft genutzt wird, sonnst hätt ich ne kurze .bat geschrieben die die datei jeden tag verschiebt, so würde ja nur das vom aktuellen tag drinne stehen und gut wär.

    wenn du mir die zeile vernünftig erklärst versteh ich sie vielleicht auch richtig, ty.



  • Las_Bushus schrieb:

    wie jetzt? als c++ zeile?? oder jetzt bei linux als komandozeile?

    letzteres.



  • ist ein stinke 2003 server -.-



  • tja, dann nimm das c++ programm. 🙂



  • mach ich ja^^ und es geht und ich bin so glücklich, ihr seit einfach klasse Leute.

    nochmal großes DANKE an euch.


Log in to reply