Textdatei Einlesen und Formatieren!



  • Klar kannst du das:

    string browser_id="...";
    if(browser_id.find("Firefox")!=string::npos)
      cout<<"Hier haben wir einen (möglicherweise) Firefox";
    //...
    

    Problem ist wie gesagt - du benötigst eine klare Definition, was von den Informationen relevant ist und wie sich welcher Browser melden könnte (bzw wonach du suchen mußt, um einen Browser zu identifizieren).



  • Hm, das lässt sich sicherlich einrichten ^^ denk ich mal.

    und wie mach ich das dann nun, dass es "gekürzt" in eine neue datei geschrieben wird? ich hab bisher zum einlesen:

    #include <cstdlib>
    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        char fileName[80];
        char buffer[255];
    
        cout << "Dateiname: "; // Eingabe Welche Datei gelesen werden soll
        cin >> fileName;       // Variable für den Dateiname
    
        ifstream fin(fileName);
        cout << "\n";
        char ch;
        while (fin.get(ch))
    
        cout << ch;
    
        cout << "\n\n*** Ende des Inhaltes.***\n";
    
        fin.close();
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    


  • in etwa so:

    ifstream fin("eingabe.txt");
    ofstream fout("ausgabe.txt");
    string zeile;
    while(getline(fin,zeile))//zeilenweise einlesen
    {
      verarbeite(zeile);//hier kannst du dich austoben ;)
      fout<<zeile<<endl;
    }
    

    (ofstreams dienen zur Ausgabe in eine Datei - und können genauso einfach verwendet werden wie cout)



  • hmhm jo gut ich werd ma bissl rumbasteln wenn ichs net pack musst mir weiter helfen :D!



  • Hm irgendwie will des net hab zwar die ausgabe.txt aber nicht wirklich was drin xD

    Hm, wärs umständlich wenn du evlt. nen kleinens beispiel mit ner IF abfrage und fürs ausgeben machst 😕 😞



  • OK, nur ein Fragment - deine Eingaben richtig parsen mußt du schon selber:

    ifstream fin("eingabe.txt");
    ofstream fout("ausgabe.txt");
    string zeile;
    while(getline(fin,zeile))//zeilenweise einlesen
    {
      int sp_pos=zeile.find(' ');
      string nummer=zeile.substr(0,sp_pos);//erster Abschnitt, z.B. "195"
      zeile.erase(0,sp_pos+1);             //Restzeile, z.B. "Mozilla/5.0 (Macintosh; U; PPC ..."
      if(zeile.find("Firefox")!=string::npos)
        zeile="Firefox";
      else if(zeile.find("MSIE")!=string::npos)
        zeile="Internet Explorer";
      else if(...)
        ...
      else
        zeile="unbekannt";
    
      fout<<nummer<<' '<<zeile<<endl;
    }
    


  • ...bin zu ploed irgendwas peil ich da net 😕 ... will dich aber auch net nerven ... hm 😕 ich prob noch bissl



  • Hi, ich nochmal sry fün doppelpost ;)!

    Hab immer noch net geblickt wiesos net funzt :/!

    Wenn mir jemand schreiben könnte wo ich was ersetzen muss an dem code (evlt. hab ich ja was vergessen oO) wär cool 🤡



  • Wenn du dazuschreibst, was du schon hast und was für einen Fehler du bekommst, hilft das sicher weiter - ich bin nicht besonders gut darin, das zu erraten 😉

    Aber ich würde mal vermuten, anstelle der "if()...else if()..." Kaskade in dem oberen Fragment benötigst du deine eigenen Auswertungs-Anweisungen zum Überprüfen des Eingabestrings (dort steht nach dem erase() der Zeileninhalt beginnend mit "Mozilla/x.y bis zum Ende drin).



  • und wie mach ich das mit den auswertungen? :> hab ja gesagt bin noob und wiess noch net wirklich wie ich wann wo welche funktion einsetze usw. ... :{



  • Hm es wird jetzt eine 2te datei geschrieben aber nicht so wie sie sollte! Also keine verkürzung 😕



  • dogeye schrieb:

    und wie mach ich das mit den auswertungen? :> hab ja gesagt bin noob und wiess noch net wirklich wie ich wann wo welche funktion einsetze usw. ... :{

    Dazu mußt du wissen, wie deine Strings ursprünglich aufgebaut sind. Zur Hilfe findest du hier einige hilfreiche Suchfunktionen:
    * zeile.find(wert) gibt die Position zurück, an der der Inhalt von wert in Zeile auftaucht (oder npos*)
    * zeile.find_first_of(menge) gibt den ersten Fundort eines Zeichens aus menge in zeile zurück (oder npos)
    * zeile.substr(start,len) gibt (maximal) len Zeichen beginnend ab start aus zeile zurück
    * zeile==wert fragt ab, ob in zeile und wert (EXAKT) das selbe drinsteht
    * ...

    * string::npos ist ein ungültiger Index und bedeutet "nicht gefunden" - deshalb dürften die Suchfunktionen mit "if(zeile....!=string::npos)..." getestet werden.



  • Wenn du Dir das Parsen wirklich Sparen willst ...

    Auf excel kommst durchaus auch mit C++ drauf ... (muss nich mal VC++ sein)
    Das zauberwort heisst automatisierungsschnittstelle und Active X.

    Du kannst excel als ActiveX Server starten, und dann die Daten natuerlich lesen ...
    Wenn du dich ohnehin mit ActiveX beschaeftigen willst, dann versuchs so ^^
    Erspart Dir auch den Zwischenschritt ueber den Textimport (dauert in der Praxis ca 3 tage bis findige "anwender" perverse Excel makros schreiben die Dir auch das mehr oder weniger umstaendlich automatisieren ^^ )

    Ansonsten musst selber entscheiden ob es dir den Aufwand wert ist, sich mit IDispatch OLEDatentypen und ulkigen VARIANT's rumzuaergern ^^
    Der Einarbeitungsaufwand iss nicht ohne ....

    Naja nebeneffekt waere, dass Dir spaeter mal directX leichter fallen wuerde ^^

    Vielleicht solltest dir mal .Net anschauen, da soll angeblich ne gute ActiveX anbindung bei sein ... zumindest einfacher als mit MFC und ATL und erst recht mit Plain C (ja Active X - Schnittstellen sind C-Schnittstellen ! ^^ )

    Ciao ...



  • lol ^^ zwar kein plan von dem was du geredet hast aber ich werd mich über das aX informieren ^^!

    thx



  • Hm ich hab jetzt die datei geöffnet ... meine abfrage durchlaufen lassen und es wurde ne neue datei ausgespuckt.

    ABER!?!?!? ^^

    Die Datei is irgendwie nicht formatiert worden, zumindest sieht es so aus! Da sind jetzt die Angaben der Brwoser aber auch nen dutzend von kontainern []

    😕 irgendwie komisch! Das kann doch net so komply sein son programm zu schreiben manmanman :/!


Anmelden zum Antworten