Woodstock Geschrieben 9. Januar 2002 Teilen Geschrieben 9. Januar 2002 Hallo, ich habe da eine Frage zwischendurch (also nicht genau zu dem Thema zu dem ich als letztes gepostet habe). Und zwar will ich Dateinamen mit Pfade in eine Datei Schreiben. Jede Datei eine Zeile, jede Datei nur einmal. Dann will ich Wörter in eine andere Datei schreiben, und dahinter (durch ein Tab getrennt) Zahlen die auf Reihen hinweisen sollen aus der ersten Datei, um zu zeigen in welcher Datei das Wort alles steht. Beispiel: Datei xy.txt c:\bla.txt c:\personal\blubb.txt c:\windows\test.txt Datei ab.txt Hallo 1 2 bla 2 blubb 2 3 Test 1 2 3 Dann möchte ich in einem anderen Programm die zweite Textdatei durchsuchen lassen (auf ein oder mehrere Worte hin), und mir dann ausgeben lassen können in welchen Dateien das/die Wort/e stehen. Beispiel: Hallo c:\bla.txt Test c:\bla.txt c:\personal\blubb.txt c:\windows\test.txt Wie kann ich das machen? Also im Moment sieht es so aus das ich die Datei-Datei soweit fertig habe, jede Datei steht in ihrer eigenen Zeile, und auch bloß einmal. Jetzt habe ich die Wörter die in dieses Dateien vorkommen. Hatte ich das Wort noch nicht, soweit kein Problem. Ich schreibe ans Ende der Datei-Datei die Datei mit Pfad, und Das Wort in die andere Datei. Nur wie weiß ich welche Zahl ich dahinter schreiben muss . Oder noch schlimmer, ich hatte das Wort schon mal :eek: (wird in meinem Programm zuerst nach gesehen ob es schon mal da war, und dann darauf hin weiter gearbeitet, endweder so, oder so). Wie kann ich jetzt dahinter schreiben das es auch noch in 'der und der' Datei vorkommt :confused: ? Hier mal mein Quelltext falls das Wort noch nicht vorkam #include "Sabine(1).h" void Schreiben(FILE *FW, FILE *FY, char *szAusgelesenes, long& nScnt, char * { /* Ich bekomme aus der Funktion vorher zwei Dateien geöffnet durch die Pointer *FW und *FY übergeben. In diese beiden Dateien kann ich jeweils ans Ende schreiben. Durch b bekomme ich die Datei die gerade auf Wörter hin durchsuche inkl. Pfad übergeben szAusgelesenes ist das Wort, welche ich aus dieser Datei ausgelesen habe. nScnt (war früher mal ein Integer, derswegen nScnt, und nicht lScnt) ist eine Zählervariable die eine andere Aktion gedacht ist, hierfür aber nicht wichtig. */ int nX, nPos; bool fFound=false; char szBuffer[501]={NULL}; fseek(FY, 0, SEEK_SET); fwrite(szAusgelesenes, sizeof(char), strlen(szAusgelesenes), FW); fwrite("\n", sizeof(char), strlen("\n"), FW); fFound=false; nPos = 0; while(nX != EOF) // Dateiname mit Pfad wird aus der Datei ausgelesen um zu schaun ob die Datei bereits einmal vorkam { fFound = false; nX = fgetc(FY); if(nX!=-1) { if (nX == 10) { if(strlen(szBuffer)>1) { szBuffer[nPos] = '\0'; _strlwr(szBuffer); _strlwr(; nPos = 0; } // if if(strstr(b, szBuffer)!=0) // kam die Datei schon mal vor fFound = true -> derDateiname und Pfad wird nicht { // erneut in die Datei geschrieben fFound = true; cout << "true\n"; } } // if else { szBuffer[nPos] = nX; nPos++; } // else } // if if(fFound == true) break; } // while if(fFound==false) { fwrite(b, sizeof(char), strlen(, FY); // Dateiname wird mit Pfa in die Datei geschrieben, fwrite("\n", sizeof(char), strlen("\n"), FY); // danach ein Zeilenumbruch gemacht } nScnt++; } [/PHP] Tja, wie kann ich denn nun noch die dazugehörige Zahl ans Ende anfügen, und vorallem, wie mache ich es, wenn das Wort schon einmal da war,, ich also nur die Zahl anfügen muss, und mehr nicht? Hiiiiiilfe!!!!!! [color=indigo]Bine[/color] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
paule22 Geschrieben 13. Januar 2002 Teilen Geschrieben 13. Januar 2002 also wenn ich das richtig verstehe, willst Du eine Art Datenbank anlegen, in der alle Wörter aufgesammelt werden, die in irgendwelchen Dateien vorkommen. Ich hätte da einen etwas anderen Lösungsvorschlag. Warum legst Du nicht ganz einfach eine Datenbank an Files an. Für das Wort Hallo die Datei "\data\Hallo.fil" darin kommen alle Dateien die das Wörtchen Hallo beinhalten samt den Zeilennummern, in der das Wort vorkommt. Die Datei "Hallo.fil" könnte dann folgenden Aufbau haben: [Datei_A.txt] 1 2 3 4 [Datei_B.txt] 2 3 4 5 Du ließt dann die Datei aus und brauchst einfach durch eine kleine IF-Anweisung die Zeilennummer anfügen. Dafür musst Du aber eine Zwischendatei anlegen "\tmp\Hallo.fil" in der Du deine Daten abspeicherst. In "\data\Hallo.fil" werden die Daten gelesen und in "\tmp\Hallo.fil" gespeichert. Wenn Du die Änderungen gemacht hast brauchst Du nur noch die in "\tmp" stehende "Hallo.fil" Datei kopieren und fertig isses. Das ist vielleicht nicht die beste Lösung für Dein Problem (ich würde dies nämlich über Struct-Anweisungen machen) aber die wohl am nachvollziehbare Lösung. Gut, die schnellste isses auch nicht gerade aber für einen Anfänger-Programmierer woll nicht schlecht geeignet. Hier mal ein wenig Code zu den was ich gesagt habe: Die Datei Hallo.fil hat folgenden aufbau: [C:\Datei_A.TxT] 1 6 7 8 [C:\Datei_B.TxT] 1 10 33 20 Hier nun der Code: ----- #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char **argv) { char buffer[500]; char datei[300]; char next[500]; bool eingefuegt = false; FILE *data, *tmp; data = fopen("hallo.fil","r"); tmp = fopen("hallo.tmp","w"); if (!data) { printf("Fehler beim â„¢ffnen von 'Hallo.fil'."); exit(1); } fseek(data,0,SEEK_SET); while (fgets(buffer,499,data) != NULL) { int len = strlen(buffer); while (--len >= 0) { if (buffer[len] == '\n') { buffer[len] = 0; continue; } if (buffer[len] == '\r') { buffer[len] = 0; continue; } } if (sscanf(buffer,"[%s]",&datei) == 1) { strcat(buffer,"\n"); fwrite(buffer,strlen(buffer),1,tmp); while(fgets(buffer,499,data) != NULL) { if (!strcmp(buffer,"\n")) continue; if (sscanf(buffer,"[%s]",&datei) == 1) { eingefuegt = false; break; } // ---------------------------------- // ab hier wird eine neue Zeilenummer // eingefÂgt ... // ---------------------------------- int zeilennr = atoi(buffer); int einfuegenr = 4; if (zeilennr > einfuegenr && eingefuegt == false) { char p[200]; sprintf(p,"%d\n",einfuegenr); fwrite(p,strlen(p),1,tmp); eingefuegt = true; fwrite(buffer,strlen(buffer),1,tmp); continue; } fwrite(buffer,strlen(buffer),1,tmp); continue; } } // Rest der Datei schreiben ... strcat(buffer,"\n"); fwrite(buffer,strlen(buffer),1,tmp); } fclose(data); fclose(tmp); system("copy hallo.tmp hallo.fil"); } ------ Die Datei Hallo.tmp müsste nach Aufruf des Programms folgenden Aufbau haben: [C:\Datei_A.TxT] 1 4 6 7 8 [C:\Datei_B.TxT] 1 10 33 20 Dieser Code dient nur als Demonstration was man so alles machen kann. Verfeinert werden muss er auf alle Fälle noch. good luck Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Woodstock Geschrieben 14. Januar 2002 Autor Teilen Geschrieben 14. Januar 2002 @Paule22: Geht nicht, weil das nicht meine Aufgabe ist. Ich soll das Problem auf diese Weise lösen, also muss ich das auch machen. Bine Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
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.