Zum Inhalt springen

fwrite oder etwas anderes?!?!


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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

Geschrieben

@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

Geschrieben

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

Geschrieben

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

Geschrieben

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 ...

Geschrieben

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

Geschrieben

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!

Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...