[C] *.txt Files durchsuchen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von s1nu, 10. November 2013 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 10. November 2013
    Hallo Leute,

    hab wiedermal ne für mich zu knifflige Herausforderung.

    Ich habe hier ein .txt File mit folgendem Inhalt:

    Code:
    <3> <3>
    1 2 3
    2 3 4
    5 3 0
    <+>
    1 0 0
    0 1 0
    0 0 1
    Dieses soll mit stdin eingelesen werden. Es handelt sich hierbei um 2 3*3 Matrizen, die addiert werden sollen. Das <+> ist als Operator anzusehen. (Es kann hier auch <*> stehen.

    Wie stell ich denn das am besten an?

    Meine Lösungsansätze bis jetzt:
    1.) Zeichenweise einlesen bis zum ersten '\n' für die Größe der Matrix
    2.) Nächste Zeile bis zum '\n' einlesen und die Werte in die erste Reihe der Matrix speichern usw. bis eben zum <+>
    3.) Operator einlesen und speichern
    4.) Wie 2.) und eben bis zum EOF.

    Ist das nicht besser zu handhaben? Die Größe der Matrizen kann sich ändern aber ist maximal 10x10 und die Zahlen in auf den verschiedenen Indizes dürfen maximal 0-10 sein.

    Meinen Code habe ich gerade aus Frust vernichtet^^

    Bin für jede Hilfe dankbar.
     
  2. 11. November 2013
    AW: [C] *.txt Files durchsuchen

    Hallo s1nu!

    Du könntest dir einen endlichen Automaten für die Aufgabe bauen. Der Automat könnte aber nicht herausfinden, ob die Dimension der ersten Matrix mit der Dimension der zweiten Matrix übereinstimmt.

    Der endliche Automat würde recht ähnlich wie von dir beschrieben funktionieren. Die Implementierung ist, wenn man dann einmal das Modell hat, ziemlich einfach und ist dank der Automatenbeschreibung gut dokumentiert und nachvollziehbar.

    Ich weiss nicht, ob man es ohne irgendwelche zusätzlichen Bibliotheken (die Regular Expressions o.ä. anbieten) eleganter lösen kann. C ist, was String-Parsing anbelangt, eher mühsam.

    Mfg,

    Kolazomai
     
    1 Person gefällt das.
  3. 11. November 2013
    Zuletzt bearbeitet: 11. November 2013
    AW: [C] *.txt Files durchsuchen

    Bei einer nicht kontextfreien Grammatik würde sich ein (Rekursiver) Abstieg anbieten:

    Pseudocode:
    (Lexikalische Analyse weg gelassen)

    Code:
    parse_expression() {
     d1 = parse_dimension();
     d2 = parse_dimension();
     expect_token('\n');
     left = parse_matrix(d1, d2);
     op = parse_operator();
    
     // hier ggf je nach `op` noch anpassungen an `d1` und `d2` vornehmen
     right = parse_matrix(d1, d2);
    
     ex = expression(left, op, right);
     return ex;
    }
    
    parse_dimension() {
     expect_token('<')
     d = parse_integer();
     expect_token('>');
     return d;
    }
    
    parse_matrix(d1, d2) {
     mx = matrix(d1, d2);
     
     for (i1 = from 0 to d1) {
     for (i2 = from 0 to d2) {
     mx[i1][i2] = parse_integer();
     }
     expect_token('\n');
     }
    
     return mx;
    }
    
    parse_operator() {
     expect_token('<');
     op = 0;
     switch (lookahead) {
     case '+':
     case '*':
     // ...
     op = lookahead;
     next_token();
     break;
     default:
     error();
     } 
     expect_token('>');
     expect_token('\n');
     return op;
    }
    
    parse_integer() {
     // ... ;-)
    }
    
    main() {
     e = parse_expression();
     evaluate(e);
    }
    Wäre auch recht einfach in C zu implementieren.
    Bei Bedarf kann man auch eine operator precedence Rekursion mit einbauen sollte es jemals legal sein mehrere Operationen in einem Ausdruck zu verarbeiten.

    Am Ende (e = parse_expression()) kannst du dir einen Syntax-Baum erstellen lassen um den Ausdruck auszuwerten:
    Code:
     <+>
     / \ 
    matrix matrix
     
    1 Person gefällt das.
  4. 12. November 2013
    AW: [C] *.txt Files durchsuchen

    Wenn Du faul bist kannst du natürlich auch mit scanf und entsprechenden Formatierungen arbeiten, allerdings müsste die "Eingabe" dann auch in einem entsprechendem Format vorliegen.
     
    1 Person gefällt das.
  5. 16. November 2013
    AW: [C] *.txt Files durchsuchen

    Danke an euch alle, habe das mit scanf lösen können, da die Files immer die gleiche Formatierung haben müssen, war das die "einfachste" Lösung".
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.