Realisierbarkeit eines Projekts



  • Hallo,

    wir haben folgendes Problem:

    Wir sollen als Projekt für eine bekannte deutsche Firma ein Programm entwerfen, welches aus einer Textdatei Daten entnimmt, interpretiert und umwandelt und an bestimmte Stellen einer xml-Datei einfügt. Wir sind uns weder klar ob das überhaupt so möglich ist, noch wie man
    die Lösung anlegen könnte.

    Die Ursprungsdatei sieht folgendermaßen aus (Beispielzeilen)
    ^W03 U09:00 K 02501 S01
    ^W07 U10:30 G 02190 S02

    Das Problem ist, daß leider einige Zeilen leicht anders aufgebaut sind, z.B. so:

    ^W03 U08:00 K 02501 ; 02730 ; 02331 S01

    Da wir nur C und etwas C++ beherschen(eher nur Grundlagen) wäre für uns wichtig zu wissen,
    ob so ein Programm mit diesen Sprachen überhaupt realisierbar wäre.

    Grüsse
    FST-OBM



  • Na klar wieso sollte das nicht möglich sein. Für mich hat die Datei doch einen einheitlichen Aufbau. Ich weis ja nun nicht was daraus werden soll aber meiner Meinung nach sollte das kein Problem sein. Hier auf Arbeit werten wir ständig Log-Files von irgendwelchen Programmen aus und schreiben diese in eine Tabelle o.ä.
    Wo kommst du denn mit deinem Denkansatz nicht weiter?

    schirrmie



  • Also, wir schaffen es bis jetzt, daß die Datein eingelesen und angezeigt werden.
    Als nächstes sollen sie zeilenweise bearbeitet werden..
    Und da hängen wir grade.



  • Zeilenweise einlesen geht mit fgets()* - anschließend kannst du die jeweilige Zeile nach Belieben auseinandernehmen (ich hab' keine Ahnung, was die einzelnen Felder bedeuten, aber die Struktur sieht einheitlich aus - für das letzte Beispiel mußt du halt die Semikolons suchen und die dazwischenliegenden Teile auswerten).

    * in C++ wäre es getline()



  • liess die zeilen am besten in strings und zerlege die strings wiederum in strings mit trennzeichen und wörtern

    string delimeters = " ;" // DAS LEERZEICHEN IST WICHTIG
    vector<string> lines;
    map<int, string> words;
    string line;
    string word;
    line = lines.begin();
    word = lines.substr(0, lines.find_first_of(delimeters)-1);
    words.push_back(word);
    

    das nur ne idee von mir

    wieder ein auszug aus der hilfe

    size_type find(const basic_string& right,
    size_type off = 0) const;
    size_type find(const value_type *ptr, size_type off,
    size_type count) const;
    size_type find(const value_type *ptr,
    size_type off = 0) const;
    size_type find(value_type ch, size_type off = 0) const;
    size_type rfind(const basic_string& right,
    size_type off = npos) const;
    size_type rfind(const value_type *ptr, size_type off,
    size_type count = npos) const;
    size_type rfind(const value_type *ptr,
    size_type off = npos) const;
    size_type rfind(value_type ch,
    size_type off = npos) const;
    size_type find_first_of(const basic_string& right,
    size_type off = 0) const;
    size_type find_first_of(const value_type *ptr,
    size_type off, size_type count) const;
    size_type find_first_of(const value_type *ptr,
    size_type off = 0) const;
    size_type find_first_of(value_type ch,
    size_type off = 0) const;
    size_type find_last_of(const basic_string& right,
    size_type off = npos) const;
    size_type find_last_of(const value_type *ptr,
    size_type off, size_type count = npos) const;
    size_type find_last_of(const value_type *ptr,
    size_type off = npos) const;
    size_type find_last_of(value_type ch,
    size_type off = npos) const;
    size_type find_first_not_of(const basic_string& right,
    size_type off = 0) const;
    size_type find_first_not_of(const value_type *ptr,
    size_type off, size_type count) const;
    size_type find_first_not_of(const value_type *ptr,
    size_type off = 0) const;
    size_type find_first_not_of(value_type ch,
    size_type off = 0) const;
    size_type find_last_not_of(const basic_string& right,
    size_type off = npos) const;
    size_type find_last_not_of(const value_type *ptr,
    size_type off, size_type count) const;
    size_type find_last_not_of(const value_type *ptr,
    size_type off = npos) const;
    size_type find_last_not_of(value_type ch,
    size_type off = npos) const;
    basic_string substr(size_type off = 0,
    size_type count = npos) const;



  • jepp wie gesagt.. schreibt das ganze in C++, liest die einzelnen zeilen in einen std::string und scant/parst diesen



  • sind das nicht delimiters anstatt delimeters?



  • schreibfehler sind stilmittel und erwüscht, wer einen findet kann ihn behalten :p sorry



  • So wir sind mittlerweile in der Lage eine Probezeile umsetzen zu lassen.
    Beendet wird die Zeile mit einem Semikolon. Jetzt ist nach einer Funktion gefragt, die nach einem Semikolon in die nächste Zeile springen lässt.
    Für Ideen wäre ich dankbar.



  • Hallo mal wieder,

    das Programm ist erfreulicherweise fertig und funktioniert voll und ganz.
    Bis auf eine klitzekleine Sache. Der Benutzer wird während des Programmablaufs aufgefordert einen Städtenamen einzugeben. Das bringt natürlich das Problem mit sich, daß sobald der Name einen Umlaut enthält dieser nicht richtig übernommen wird. Leider ist es wichtig, daß er auch als Bsp. Köln eintippt und dieses so weiter in die XML datei ausgegeben wird und nicht hilfsweise Koeln.
    Was kann man da machen?

    Grüsse
    FST-OBM


Anmelden zum Antworten