Woodstock Geschrieben 29. November 2001 Geschrieben 29. November 2001 Also ich habe folgendes Problem: Für diejenigen die das hier lesen und mich und mein Programm welches ich schreibe noch nicht kennen, ich schreibe einen Algorythmus mit dem ich Datei die auf meiner Festplatte sind (Typ kann angegeben werden) auf Suchworte hin surchsuchen lassen kann (auch mit und oder Verknüfung). Soweit so gut. Klappt auch eigentlich, und nicht nur eigentlich, nur dauert das durchscannen der Festplatte um nach den Dateien zu suchen lange (naja, eben zu lange, meint mein Chef), wegen rekursivem durchsuchen der Ordner. Deshalb soll ich das Prgramm jetzt noch dahin verändern, das die Dateien die Frage kommen beim ersten Mal gesucht werden, und dann der Inhalt in einer einzigen Textdatei gespeichert wird, Wort für Wort, mit der Angabe vom Pfad. Das würde soweit auch klappen, habe ich mich fwrite gelöst. Nur wenn ein Wort zum zweiten Mal in einer Datei vorkommt, dann brauch er es mir ja auch nicht mehr auflisten. Das würde ich sicher auch noch hin bekommen, nur weiß ich nicht was ich machen soll, wenn das Wort in einer anderen Datei vorkommt, und ich jetzt nur die Pfadangabe sozusagen ergänzen will, also sage, das Wort 'blablabla' kommt in der Datei 'balblabla' und 'blubb' vor. Wie kann ich das machen? Ich weiß da einfach mal wieder nicht weiter. Bine Zitieren
Bubble Geschrieben 29. November 2001 Geschrieben 29. November 2001 Du willst vermutlich ganze Verzeichnishierarchien indizieren und dann erst einmal nur im Index suchen. Aber was passiert, wenn sich der Inhalt der Dateien verändert? Da Du nur in einer Kopie suchen willst, würdest Du Veränderungen am Orginal nicht mitbekommen. Du mußt einen Mechanismus finden, dieses trotzdem mitzubekommen, oder eben doch wieder eine relativ zeitaufwendige Volltextsuche über alle Dateien machen. Bubble Zitieren
Woodstock Geschrieben 3. Dezember 2001 Autor Geschrieben 3. Dezember 2001 Es soll so laufen das Dateien die seit der letzen Suche neu hinzugekommen sind dann noch durchsucht werden. Bine Zitieren
Kristian Geschrieben 3. Dezember 2001 Geschrieben 3. Dezember 2001 @Bubble: Man könnte auch zwei Programme schreiben, eins was den Index erstellt und einmal am Tag/in der Woche/Monat/Jahr... ausgeführt wird, und eines, was die Suchfunktion durchführt. (Und evtl direkt den Indizierer startet, wenn kein ergebnis gefunden wurde, oder zumindest die Option ihn zu starten anbietet oder irgenddwie so. Vielleicht auch das gleiche Programm mit Kommandozeilen-Option Zitieren
Woodstock Geschrieben 3. Dezember 2001 Autor Geschrieben 3. Dezember 2001 Könnt Ihr mir denn auch helfen? Bine Zitieren
Bubble Geschrieben 4. Dezember 2001 Geschrieben 4. Dezember 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR> Könnt Ihr mir denn auch helfen? Zitieren
Poldi Geschrieben 5. Dezember 2001 Geschrieben 5. Dezember 2001 hallo, ich denke du müßtest deine datei ein bischen umbauen, und zwar so daß am anfang immer das wort steht und dahinter eine liste von dateien, in denen es vorkommt. außerdem würde ich dann auch noch eine zweite datei machen, in der die durchsuchten dateien und ein index gelistet sind. erste Datei: wort | dateiliste -------------------------------------------- affe ; 342; 345; 233; 122; ... blaubär ; 233; 123; 454; 122; ... ... zweite Datei: Index | dateiname/pfad ----------------------------------------- 232 ; c:\\text\\bla.txt 654 ; c:\\dateien\\nocheinedatei.txt .... natürlich wäre die datein dann ohne ´überschriften etc. pp. so könntest du in dem ersten teil des programmes die dateien hinzufügen und dir die indizes dieser dateien merken, und diese dann hinterher durchsuchen und die wortdatei ergänzen. cheers, poldi Zitieren
Woodstock Geschrieben 5. Dezember 2001 Autor Geschrieben 5. Dezember 2001 Das ist in etwa das was ich machen soll. Bisher probiere ich in eine Datei das Ausgelesene Wort zu schreiben, und in eine andere Datei den dazu gehörigen Pfad. Aber nicht mal das klappt. Sieht im Moment so aus: while (nC != EOF) { nC = fgetc (FZ); if ((nC<'A'||nC>'z')||(nC>'Z'&&nC<'a')) { fFound2 = false; szAusgelesenes[nPos] = '\0'; _strlwr(szAusgelesenes); if(nScnt>0) { while((fgets(szBuffer, 500, FW))!=0) { _strlwr(szBuffer); for(nD=0; nD<nScnt; nD++) { if(strstr(szBuffer, szAusgelesenes)) { fFound2 = true; break; } else { fFound2 = false; } } } } if(fFound2 == false) { fwrite(szAusgelesenes, sizeof(char), strlen(szAusgelesenes), FW); fwrite("\n", sizeof(char), strlen("\n"), FW); fwrite(b, sizeof(char), strlen(, FY); fwrite("\n", sizeof(char), strlen("\n"), FY); nScnt++; } nA = 0; //Ueberpruefen(szAusgelesenes, nPos, nA, nAnSuchw, szEingabe, afPruefung); nPos = 0; } // if else { szAusgelesenes[nPos] = nC; nPos++; } } // while [/code] Die Dateien in die ich schreibe werden vorher geöffnet. Ich versuche also das Wort welches ich ausgelesen haben in eine Datei zu schreiben. Das klappt auch. Nun hab ich aber ja noch den Teil damit reingebracht, das er jedes Wort nur einmal aufnimmt, egal wie oft es ausgelesen wird (erstmal ohne Hinsicht auf den Pfad, der hier einfach abhanden kommt, da ich ihn in dem Fall das ein Wort schon mal vorkam einfach nicht weiter verwende). Er stürzt in der while Schleife aber immer ab. Warum? nScnt war ein int Wert, habe ich in einen long Wert umgeschrieben, daran kann es also doch nicht liegen. :confused: Bine Zitieren
Poldi Geschrieben 6. Dezember 2001 Geschrieben 6. Dezember 2001 wo setzt du denn die variable nScnt? versuch doch mal die for schleife innerhalb der while schleife auszukommentieren, ob die dann durchläuft. wenn ja, liegt es an den inneren abbruchbedingungen. bei fehlern immer alles auskommentieren und dann stück für stück wieder reinholen und durchlaufen lassen, so tastest du dich immer mehr an die wurzel des bösen heran ... Zitieren
Woodstock Geschrieben 6. Dezember 2001 Autor Geschrieben 6. Dezember 2001 Also nScnt definiere ich ganz am Anfang. Bekommt da auch den Wert 0 zugewiesen (weil es ja immer weiter steigen soll). Die for Schliefe habe ich schon auskommentiert, aber es läuft trotzdem nicht. Muss also an der do while Schleife liegen. Oder wie ist das mit dem öffnen. Ich öffne ja die eine Datei, welche ich dann FW zuweise, bzw. FW als Pointer auf diese Datei agieren lasse, um daraus zu lesen, und darein zu schreiben. Kann es da Probleme geben? Weil wenn ich nur eins von beidem versuche, dann klappt es. Nicht aber wenn ich sie zwischendurch schließe und dann wieder öffne. Bine Zitieren
Poldi Geschrieben 6. Dezember 2001 Geschrieben 6. Dezember 2001 eigentlich sollte es da keine probleme geben, ich frage mich allerdings, warum du nicht ganz am anfang alle dateien aufmachst, die du brauchst, und erst ganz am ende wieder schließt. das ständige auf- und zumachen ist ja unnötig. wenn du irgendwann den file handler wieder auf die anfangsposition der datei setzen willst, kannst du das auch einfacher haben: guck dir mal den befehl rewind() an! Zitieren
Woodstock Geschrieben 6. Dezember 2001 Autor Geschrieben 6. Dezember 2001 Das mit dem auf und zumachen in dem Quelltext liegt daran das ich nicht noch mehr Parameter übergeben will. Also öffne ich sie wenn ich in die Funktion (=Quelltext) komme, und schließe sie am Ende wieder. Einen anderen Grund gibt es dafür nicht. rewind() schaue ich mir gleich mal an, melde mich aber wohl erst morgen wieder. Danke schon mal. Bine Zitieren
e@sy Geschrieben 6. Dezember 2001 Geschrieben 6. Dezember 2001 @Bubble Bitte ändere deine e-Mail Adresse. Du hast hier e-Mail Benachrichtigung angeklickt, doch die Mail's kommen alle als unzustellbar zurück. Zitieren
Bubble Geschrieben 6. Dezember 2001 Geschrieben 6. Dezember 2001 @easy Die E-Mail Adresse sollte aber funktionieren. Habe sie gerade extra noch einmal getestet und Mails kommen an! Bubble Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.