Array auslesen



  • Hallo Forum

    ich habe folgende Aufgabenstellung mit der ich einfach nicht zurecht komme.

    Vorab:
    Ich habe mehrere Dokumente, Wort für Wort, in einen Index bzw. ein Array geschrieben.

    Jetzt möchte ich in eine Suche einen Begriff eingeben.

    Das Ergebnis soll eine Liste sein die auf dem Bildschirm ausgegeben wird.

    Die Liste soll den Begriff enthalten und die Namen der Dokumente (mit fortlaufender Nummer) in dem es enthalten ist ausgeben.

    Also ich suche das Wort Uhr
    Dann soll rauskommen:

    Uhr
    1. Test.txt
    2. Goto.txt
    3. ......usw.

    Wie kann ich das denn am besten anstellen?

    Wäre super wenn einer da was weiß.
    Danke



  • 1.datei-array in einer schleife durchlaufen
    2.bei jedem durchgang:
    - datei öffnen
    - datei einlesen
    - nach wort suchen
    - datei schließen
    wurde dabei das wort erfolgreich in der datei gefunden -> heureka! ausgabe -.-
    pseudocode

    // ...
    suchwort = eingabe();
    // ...
    for(i=0; i<MAX_FILES; ++i) {
        f = oeffne_date(dateien[i]);
        // alternativ kann man sich buf hier sparen und
        // das auslesen in suche_nach_wort(...) anstellen
        buf = lese_datei(f);
        if(suche_nach_wort(buf, suchwort) == true) {
           printf("datei: %s\n", dateien[i]);
        } 
        schliesse_datei(f);
    }
    

    ein schönes misch-masch aus richtigem C und pseudocode...aber wir wollen es hier ja nicht zu einfach machen 😉
    die stringfunktionen sowie die ein- und ausgabe funktionen musst du dir schon selber ansehen 😉



  • Zur Suche selbst:

    http://www.cplusplus.com/reference/clibrary/cstring/strstr.html
    http://www.cplusplus.com/reference/clibrary/cstring/strcmp.html
    Diese beiden Funktionen sollten dir helfen.

    Hast du jedes Wort als einzelnes Element in dem Array (->strcmp())
    oder hast du eine ganze Zeile (->strstr())



  • Hallo und danke für die schnellen antworten.
    Leider bin ich in C noch recht neu.

    Ich habe jedes Wort als einzelnes Element in dem Array.
    Also muss ich strcmp() verwenden.

    Leider steige ich bei dem Mischcode von hey noch nicht richtig durch.
    Kann mir das nochmal näher gebracht werden?



  • Wo genau hackt es den bei dir?
    Im Prinzip musst du ja lediglich den Array durchgehen (->for-Schleife)
    und dann mittels strcmp() (per if-Abfrage) überprüfen ob es der gesuchte
    Begriff ist.
    Falls du noch Probleme hast, stell einfach eine konkrete Frage.



  • Ich verstehe nicht wie diese Liste entsteht die dann nach Zahlen geordnet wird.



  • Das kommt ganz darauf an wie den dein bisheriger Code aussieht.
    Hast du für jede Datei einen eigenen Array, oder hat jede Datei
    eine bestimmte Anzahl von Wörtern, oder wie grenzt du die Dateien voneinander ab?
    Poste den Code vllt. mal. Falls es zu viele Zeichen sind benutzt
    u.U. http://nopaste.info/



  • Was wäre eigentlich besser?
    Die Texte Zeilenweise einlesen oder doch Zeichen für Zeichen?



  • Storm.Xapek.de schrieb:

    Das kommt ganz darauf an wie den dein bisheriger Code aussieht.
    Hast du für jede Datei einen eigenen Array, oder hat jede Datei
    eine bestimmte Anzahl von Wörtern, oder wie grenzt du die Dateien voneinander ab?
    Poste den Code vllt. mal. Falls es zu viele Zeichen sind benutzt
    u.U. http://nopaste.info/

    Also die Texte sollten alle in ein Array.
    Sie sind auch nicht auf die enthaltenen Wörter limitiert.



  • asx02348 schrieb:

    Ich verstehe nicht wie diese Liste entsteht die dann nach Zahlen geordnet wird.

    hi !
    du könntest heys beispiel nehmen und ein bisschen erweitern:

    printf("nr: %d datei: %s\n", i, dateien[i]);
    

    dann hast du deine liste mit nummer 🙂



  • Kann man das gesuchte Wort nicht irgendwie mit strncmp()oder strcmp()finden?



  • Doch kann man, wovon rede ich den deiner Meinung nach in den meinen letzten 3 Posts?
    Ich denke du hast jetzt genug Tipps bekommen, scheinst diese aber nicht umsetzten zu können.
    Lerne vllt. erstmal die Grundlagen und such dir ein gutes Howto.



  • Ok sorry habe ich jetzt gesehen.
    habe ich wohl total überlesen.

    Aber wie mache ich das mit strcmp()?

    Sind beide Strings identisch, gibt diese Funktion 0 zurück. Aber was mache ich wenn sie eben nicht identisch sind?

    Das versteh ich nicht richtig.



  • du hast noch keine einzige zeile quellcode von dir gepostet.
    willst du das theoretisch abhandeln ?

    du kannst eine datei in einen puffer einlesen.
    ist die datei zu groß, liest du nur einen teil der datei in den puffer.

    in dem puffer kannst du dann z.b. mit strstr nach zeichenketten suchen.

    char *strstr( const char *string, const char *strCharSet );
    

    string wäre in dem fall dein puffer mit der textdatei und strCharSet die zeichenkette, die du suchst.



  • Ich wollte das erstmal theoretisch durchdenken.



  • dann hast ja jetzt alle nötigen infos ne ?



  • Ok ich versuch das nachher mal zu schreiben und wenn ich fertig bin poste ich den Code mal hier.

    Wenn ich da nen Fehler gemacht habe könnt ihr mir dann bestimmt helfen.



  • Ok ich muss zugeben das ich es nicht richtig hinbekommen habe.

    Kann mir da nochmal jemand bitte helfen.

    char suchwort;
    int strcmp;
    
    printf("Welches Wort suchen sie?\n\n");
    		scanf ("%s",&suchwort );
    
    for(i=0; i<MAX_FILES; ++i) 
       {
        datei = fopen("dateien[i]", "r"); //hier wird doch das array geöffnet oder?
    
        if(strcmp(const char *dateien[i], const char *&suchwort) == true) {
           printf("nr: %d datei: %s\n", i, dateien[i]);
        }
        fclose("dateien[i]");
    }
    

    Ist bestimmt falsch. Aber man sieht das ich es versucht habe.



  • Aua, das tut meinen Augen ja weh was du da schreibst.
    Bist du sicher das du schonmal ein C Tutorial durchgelsen hast?

    z.B.
    datei = fopen("dateien[i]", "r"); Öffnet eine Datei mit dem Namen "dateien[i]"
    datei = fopen(dateien[i], "r"); Öffnet eine Datei dessen Namen in dem Array dateien mit dem Index i steht.

    char suchwort; Ist ein Speicherplatz für ein einzelnes Zeichen
    char suchwort[255]; Wäre Speicherplatz für einen ganze Zeichenkette mit maximal
    255 Zeichen.

    strcmp(const char *dateien[i], const char *&suchwort)
    😕 Das kompiliert überhaupt nicht!

    Sag mal, hast du überhaupt einen Compiler mit dem du deinen Code testen kannst,
    oder versuchst du den Code einfach frei Hand im Editor zu schreiben?
    Wie schon gesagt, lerne vllt. erstmal die Grundlagen...



  • Ich habe schon in einem Tutorial gelesen. C vom A bis Z

    Ich schreibe in Microsoft Visual Studio 2005
    Leider habe ich nicht mehr so viel Zeit zu lernen. Der Programmteil muss bis MI fertig sein.
    Deshalb habe ich hier stark auf Hilfe gehofft.


Anmelden zum Antworten