Zum Inhalt springen

Woodstock

Mitglieder
  • Gesamte Inhalte

    1677
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von Woodstock

  1. Hmm, also muss ich den ganzen Code kommentieren, ja? Dann mache ich das heute abend bei mir zu Hause. Wenn Du aber die Änderungen vorminnst (z.B. aus dem 'c:\index.txt' wieder ein 'c:\\index.txt' machst (so wie es vor der benutzung von den Dingern war, und die beiden 'int& k' aus der Parameterliste in der Header Datei nimmst müsste es aber compilierbar sein. Zumindest klappt es bei mir. Und ich habe Euch alle Quelltexte des Programms gepostet. Bine
  2. Und was hat das mit C / C++ zu tun? Bine
  3. Also es gibt eine Funktion die nennt sich strtok. Da gibst Du den String an, ein Trennzeichen und er nimmt Deinen String auseinander. Hier mal den Hilfetext dazu: strtok, wcstok, _mbstok Find the next token in a string. char *strtok( char *strToken, const char *strDelimit ); wchar_t *wcstok( wchar_t *strToken, const wchar_t *strDelimit ); unsigned char *_mbstok( unsigned char*strToken, const unsigned char *strDelimit ); Routine Required Header Compatibility strtok <string.h> ANSI, Win 95, Win NT wcstok <string.h> or <wchar.h> ANSI, Win 95, Win NT _mbstok <mbstring.h> Win 95, Win NT For additional compatibility information, see Compatibility in the Introduction. Libraries LIBC.LIB Single thread static library, retail version LIBCMT.LIB Multithread static library, retail version MSVCRT.LIB Import library for MSVCRT.DLL, retail version Return Value All of these functions return a pointer to the next token found in strToken. They return NULL when no more tokens are found. Each call modifies strToken by substituting a NULL character for each delimiter that is encountered. Parameters strToken String containing token(s) strDelimit Set of delimiter characters Remarks The strtok function finds the next token in strToken. The set of characters in strDelimit specifies possible delimiters of the token to be found in strToken on the current call. wcstok and _mbstok are wide-character and multibyte-character versions of strtok. The arguments and return value of wcstok are wide-character strings; those of _mbstok are multibyte-character strings. These three functions behave identically otherwise. Generic-Text Routine Mappings TCHAR.H Routine _UNICODE & _MBCS Not Defined _MBCS Defined _UNICODE Defined _tcstok strtok _mbstok wcstok On the first call to strtok, the function skips leading delimiters and returns a pointer to the first token in strToken, terminating the token with a null character. More tokens can be broken out of the remainder of strToken by a series of calls to strtok. Each call to strtok modifies strToken by inserting a null character after the token returned by that call. To read the next token from strToken, call strtok with a NULL value for the strToken argument. The NULL strToken argument causes strtok to search for the next token in the modified strToken. The strDelimit argument can take any value from one call to the next so that the set of delimiters may vary. Warning Each of these functions uses a static variable for parsing the string into tokens. If multiple or simultaneous calls are made to the same function, a high potential for data corruption and inaccurate results exists. Therefore, do not attempt to call the same function simultaneously for different strings and be aware of calling one of these function from within a loop where another routine may be called that uses the same function. However, calling this function simultaneously from multiple threads does not have undesirable effects. Example /* STRTOK.C: In this program, a loop uses strtok * to print all the tokens (separated by commas * or blanks) in the string named "string". */ #include <string.h> #include <stdio.h> char string[] = "A string\tof ,,tokens\nand some more tokens"; char seps[] = " ,\t\n"; char *token; void main( void ) { printf( "%s\n\nTokens:\n", string ); /* Establish string and get the first token: */ token = strtok( string, seps ); while( token != NULL ) { /* While there are tokens in "string" */ printf( " %s\n", token ); /* Get next token: */ token = strtok( NULL, seps ); } } Output A string of ,,tokens and some more tokens Tokens: A string of tokens and some more tokens [/PHP] Bine
  4. Sorry, da habe ich wohl nach dem letzten laufen lassen noch was verändern wollen und sollte dann aber wohl erst einmal weiterlernen. Also, wenn Du in der SabineIndex.h (ja, es war ein Schreibfehler) die beiden Parameter aus der Deklaration rausnimmst (beides mal 'int& k'), dann läuft es bei mir. Ich habe an dieser Stelle wo Du das szAusgelesenes[nPosition] = ' '; hast die Zeile szAusgelesenes[nPosition] = '\0';! Keine Ahnung warum er dass nicht mitkopiert hat. Und in meinem Quellcode ist auch das char szIndex[]={"c:\Index.txt"} nicht so, sondern wie Du schreibst mit char szIndex[]={"c:\\Index.txt"}. Genau so dann auch bei den anderen. Und dann läuft es auch. Bine PS: Ich glaube er macht das durch das
  5. Es geht ihm um ein Spiel welches er nachprogrammiert haben möchte. Bine
  6. Hallo! Ich habe da ein Problem, was etwas größeren Umfangs ist. Und zwar habe ich ein Programm geschrieben welches alle Textdateien auf der Festplatte oder in einem Ordner sucht (je nach dem was der User eingibt) und alle Wörter da raus in eine andere Textdatei schreibt. Hinter den Wörtern (die jeweils nur einmal vorkommen) werden Zahlen geschrieben. Diese Zahlen stehen für Zeilen aus eine dritten Textdatei wo die gefunden Dateien mit Pfadangabe rein geschrieben werden. Das Prinzip ist also: Wort wird gefunden -> Wort wird in Index Datei geschrieben -> Zahl der Zeile wird dahinter geschrieben -> Datei mit Pfad wird in die Pfaddatei geschrieben. Pro Zeile steht nur ein Wort und in der Pfaddatei steht nur eine Datei mit Pfad pro Zeile. Kein Wort ist doppelt, keine Datei doppelt. Kommt ein Wort in einer weiteren Datei vor, wird nur die Zahl der Datei an die Zeile des Wortes angehängt. Beispiel: Index Datei: Wort 1 2 5 Hallo 2 3 4 5 Ja 3 5 Pfad Datei: c:\bla.txt c:\windows\registry.txt c:\windows\log.txt c:\personal\Test.txt c:\programme\liesmich.txt Daran sieht man dann dass das Wort Wort in c:\bla.txt, c:\windows\registry.txt und c:\programme\liesmich.txt vorkommt usw. Soweit so gut. Wenn ich nur einen Ordner durchsuchen lasse, dann klappt es wunderbar. Wenn ich aber die ganze Festplatte durchsuchen lasse, dann schreibt er mir die Wörter insgesamt drei Mal in die Index Datei, also so: Wort 1 2 5 Hallo 2 3 4 5 Ja 3 5 Wort 1 2 5 Hallo 2 3 4 5 Ja 3 5 Wort 1 2 5 Hallo 2 3 4 5 Ja 3 5 Und ich weiß einfach nicht wieso. Anbei meine Quelltexte: Sabine.h #include <stdio.h> #include <iostream.h> #include <string.h> #include <io.h> #include <math.h> #include <stdlib.h> void FileSearch(const char* pszPfad1, char *szBuffer3, long& lLineNumber); void GetWords(char *b, long& lLineNumber, int &k); void Ueberpruefung(char *pszWort, long lDateinummer, int &k); void WritePath(char *b, long &lLineNumber, bool &fFound); void Linenumber(long &lLineNumber); [/PHP] [PHP] Index.cpp #include "SabineIndex.h" void main(int argc, char *argv[], char *envp[]) { FILE *FY; char szBuffer3[1001]={NULL}; char szIndex[]={"c:\\Index.txt"}, szIndexTemp[]={"c:\\IndexTemp.txt"}, szPfad[]={"c:\\Pfad.txt"}, szPfadTemp[]={"c:\\PfadTemp.txt"}; int nA = 1; long lLineNumber=1; char Pfad[500]={NULL}; FILE *Pfad1, *Index; cout << argc << "\n"; if (argc == 1) { cout << "\033[2J"; cout << "\n\n"; cout << "Dieses Programm erstellt eine Datei welche alle Woerter die in Dateien auf Ihrer Festplatte\n" "vorhanden sind enthaelt. Zusaetzlich werden die Dateien in denen die Woerter vorkommen mit\n" "angegeben\n"; cout << "Brauchen Sie Hilfe zur Benutzung des Programms, rufen Sie das Programm mit dem\n" "Parameter '/?' oder '/h' auf!\n\n\n"; nA = 0; } if (!nA) exit(1); if ((strcmp(argv[1], "/?") == 0) || (strcmp(argv[1], "/h") == 0)) { cout << "\033[2J"; FY = fopen("help.txt", "r"); while ((fgets (szBuffer3, 1000, FY))!= 0) { cout << szBuffer3; } nA = 0; } if (!nA) exit(1); cout << "\033[2J"; strcpy(Pfad, argv[1]); Linenumber(lLineNumber); if(argc == 2) { cout << "\n" << "Die Woerter aus folgenden Dateien wurden gefunden:\n\n"; FileSearch(Pfad, szBuffer3, lLineNumber); } remove(szIndexTemp); remove(szPfadTemp); cout << "\n"; } // main LineNumber.cpp #include "SabineIndex.h" void Linenumber(long &lLineNumber) { char Buffer[1000]={NULL}; FILE *Open; if((Open=fopen("c:\\Pfad.txt", "r"))!=NULL) { while(fgets(Buffer, 999, Open)!=0) { lLineNumber++; } } fclose(Open); } [/PHP] [PHP] GetWords.cpp #include "SabineIndex.h" void GetWords(char *b, long& lLineNumber) { int nCharacter, nA, nPosition = 0, nI; char szAusgelesenes[1000]={NULL}; bool fFound=false; FILE *Uebergabedatei; WritePath(b, lLineNumber, fFound); nA = 0; Uebergabedatei = fopen(b, "r"); nCharacter = fgetc (Uebergabedatei); while (nCharacter != EOF) { if(nCharacter != -1) { if ((nCharacter<'A'||nCharacter>'z')||(nCharacter>'Z'&&nCharacter<'a')) { szAusgelesenes[nPosition] = '\0'; _strlwr(szAusgelesenes); if(strlen(szAusgelesenes)>1) { if(fFound==false) Ueberpruefung(szAusgelesenes, lLineNumber); } // if nPosition = 0; for(nI=0; nI<50; nI++) szAusgelesenes[nI] = NULL; } // if else { szAusgelesenes[nPosition] = nCharacter; nPosition++; } // else } // if nCharacter = fgetc (Uebergabedatei); } // while if(fFound==false) lLineNumber++; fclose(Uebergabedatei); } // Auslesen Ueberpruefung.cpp #include "SabineIndex.h" #define Tab '\t' char gszIndex[]={"c:\\Index.txt"}; void Ueberpruefung(char *pszWort, long lDateinummer) { // Name der Indexdatei ist global Konstante FILE *Index, *IndexTemp; char szWort[1000]={NULL}, szBuffer[1000]={NULL}, szIndexTemp[]={"c:\\IndexTemp.txt"}, szToken[]="\t", *Token, *Token2, szBufferCopy[500]={NULL}, szBufferCopy2[500]={NULL}; long lLength, lLength1, lNumber=0; bool fFound=false, fFound2=false, fFound3=false; strcpy(szWort, pszWort); Index=fopen(gszIndex, "r"); IndexTemp=fopen(szIndexTemp, "a+"); // Wort wird in der Indexdatei gesucht // wenn pszWort in der Indexdatei vorhanden ist // dann ggf. lDateinummer in dieser Zeile anhängen // sonst pszWort + lDateinummer am Ende der Datei anhängen while(fgets(szBuffer, 1000, Index)!=0) { strcpy(szBufferCopy2, szBuffer); Token2 = strtok(szBufferCopy2, szToken); while(Token2!=NULL) { if(strcmp(Token2, pszWort)==0) fFound3=true; Token2 = strtok(NULL, szToken); } if(fFound3==true) { strcpy(szBufferCopy, szBuffer); Token = strtok(szBufferCopy, szToken); while(Token!=NULL) { lNumber = atoi(Token); if(lNumber==lDateinummer) fFound2=true; Token = strtok(NULL, szToken); } fFound=true; if(fFound2!=true) { lLength = strlen(szBuffer)-1; if(szBuffer[lLength]=='\n') { szBuffer[lLength]=Tab; } if(szBuffer[lLength]==0) { szBuffer[lLength+1]=Tab; } fwrite(szBuffer, sizeof(char), strlen(szBuffer), IndexTemp); fprintf(IndexTemp, "%d", lDateinummer); fwrite("\n", sizeof(char), strlen("\n"), IndexTemp); } if(fFound2==true) fwrite(szBuffer, sizeof(char), strlen(szBuffer), IndexTemp); } // if(strstr(szBuffer, pszWort)!=0) else { fwrite(szBuffer, sizeof(char), strlen(szBuffer), IndexTemp); } // else fFound3=false; } // while(fgets(szBuffer, 1000, Index)!=0) if(fFound==false) { lLength1=strlen(szWort); szWort[lLength1]=Tab; szWort[lLength1+1]='\0'; fwrite(szWort, sizeof(char), strlen(szWort), IndexTemp); fprintf(IndexTemp, "%d", lDateinummer); fwrite("\n", sizeof(char), strlen("\n"), IndexTemp); } // if fclose(Index); fclose(IndexTemp); remove(gszIndex); rename(szIndexTemp, gszIndex); } // void PruefeWort [/PHP] [PHP] WritePath.cpp #include "SabineIndex.h" char gszPfad[]={"c:\\Pfad.txt"}; void WritePath(char *b, long &lLineNumber, bool &fFound) { int nCharacter, nPosition; bool fFound2=false; char szBuffer[1000]={NULL}, szPfadTemp[]={"c:\\PfadTemp.txt"}, szBuffer2[1000]={NULL}; FILE *Pfad, *PfadTemp; PfadTemp = fopen(szPfadTemp, "a+"); Pfad = fopen(gszPfad, "r"); fFound2=false; nPosition = 0; nCharacter = 2; while(nCharacter != EOF) // Dateiname mit Pfad wird aus der Datei ausgelesen um zu schaun ob die Datei bereits einmal vorkam { fFound2 = false; nCharacter = fgetc(Pfad); if(nCharacter!=-1) { if (nCharacter == 10) { if(strlen(szBuffer)>1) { szBuffer[nPosition] = '\0'; _strlwr(szBuffer); _strlwr(; nPosition = 0; } // if if(strstr(b, szBuffer)!=0) // kam die Datei schon mal vor fFound2 = true -> der Dateiname und Pfad wird nicht { // erneut in die Datei geschrieben fFound2 = true; fFound = true; } if(strstr(b, szBuffer)==0) { fwrite(szBuffer, sizeof(char), strlen(szBuffer), PfadTemp); fwrite("\n", sizeof(char), strlen("\n"), PfadTemp); } } // if else { szBuffer[nPosition] = nCharacter; nPosition++; } // else } // if } // while if(fFound2==false) { fwrite(b, sizeof(char), strlen(, PfadTemp); // Dateiname wird mit Pfa in die Datei geschrieben, fwrite("\n", sizeof(char), strlen("\n"), PfadTemp); // danach ein Zeilenumbruch gemacht } fclose(PfadTemp); fclose(Pfad); remove(gszPfad); rename(szPfadTemp, gszPfad); } So, sagt jetzt bitte nicht das es zu wenig kommentiert ist, das weiß ich, ich hatte nur keine Zeit mehr das jetzt noch nachzukommentieren (hatte es schon mal kommentiert, habe dann was verändert und es da nicht mehr gemacht, sorry!) Das Programm läuft, nur mit diesem Fehler. Ich hoffe es kann mir wer was dazu sagen. Ach so, ich erstelle meine Programme mit Visual C++ 6.0 (ist glaube ich für die includes wichtig). Danke Euch das Ihr Euch die Mühe macht es schon mal durchzusehen (weil es schon was mehr ist). Bine
  7. Nee, Nero ist ganz neu. Auf XP läuft ja nur die ganz neue Version. Funktioniert aber auch mit WinOnCD nicht. So was doofes. Bine
  8. Auf der Karte steht nVidia Geforce2 MX100! Ich kann noch lesen. Den Treiber von nVidia habe ich schon runter geldaen aber noch nicht bei meinem Bekannten getestet. Mache das am Monatg. Bine
  9. Kann mir einer von Euch sagen wie genau diese Registry heißt? Ich finde unter der Suchfunktion keine Registry die auch nur annähernd etwas in diese Richtung enthält und ich habe auch das Problem das mein Computer sich nicht mehr ausschaltet. Bine
  10. Hallo, suche dringend einen Treiber für die oben genannte Grafikkarte und eine Anleitung wie ich den TV Out in Gang bekomme. Alle hier beschriebenen Schritte (über die Nutzung des TV Out's) klappen nicht. Hiiilfe! Bine
  11. Also mit Nero klappt es nicht. Ich stelle es so ein wie Du sagst, und es steht auch in der Beschreibung meines Brenners das er es unterstützt, aber er sagt dann am Anfang wo er brennen soll 'Auf dem Medium ist nicht genügen Speicherplatz vorhanden' und ich kann nur auf abbrechen gehen. Bine
  12. Danke, ich schaue mal. Ich meine aber das ich das schon eingestellt habe. Aber wenn ich was brennen will was z.B. 703MB groß ist und auf der CD aber maximal 702MB drauf sind, dann sagt er mir ich hätte nicht genug Speicherplatz frei. Weißt Du ob der Brenner 800MB Rohlinge lesen und schreiben kann? Bine
  13. Woodstock

    Übungsaufgaben?

    Sorry, habe Deine eine Mail erst gestern Abend gesehen (ich haba Donnerstags Schule und war danach noch mit meinem Schatz essen). Also, Montags und Donnerstags, Samstags und Sonntagss und nach 16 Uhr besser an die web.de Adresse (weil ich da häufig gar nicht ins Büro komme). Sonst ins Büro. Wenn ich da bin schaue ich nach denen im anderen Postfach häufig gar nicht. Aber das mache ich jetzt mal eben. Bine PS. Gerade eben ist Deine Mail angekommen.
  14. Woodstock

    Übungsaufgaben?

    Melde Dich mal wieder bei mir... Bine
  15. Wollte fragen ob das möglich ist und wenn ja wie, also was ich wo einstellen muss (entweder Nero oder WinOnCD 5.0). Danke Euch schon mal... Bine
  16. Also, die Treiber will er nicht. Habe alles probiert! Habt ihr noch einen Tip? Bine
  17. Woodstock

    VC++ und getch()

    Hmm, hab's gerade hier noch mal ausprobiert, und bei der simplen Funtkion funktioniert es. Weiß auch nicht warum damals nicht. Bine
  18. Woodstock

    VC++ und getch()

    Doch, ich weiß wir haben es probiert und es hat trotzdem nicht geklappt. Bine
  19. Ich denke ich kann froh sein wenn der bekannte von mir mit einem Programm klar kommt. Obwohl ich zum schneiden von avi Files nicht VirtualDub sondern NanDub nehme. Kann ich damit auch 'aufnehmen'? Bine
  20. Woodstock

    VC++ und getch()

    Das ';' am ende der Zeile 'cout << "Hallo";' bewirkt das gleiche wie endl! Aber wir hatten das Problem auch und haben es nicht gelöst bekommen. Wäre gut wenn da jemand was zu wüßte. Bine
  21. Das heißt ich kann in VirtualDub einfach sagen das er das was da jetzt über die TV Karte rein kommt aufnehmen soll? Bine
  22. Hallo!!! Also, ein Bekannter von mir möchte seine Videos auf der Festplatte speichern. Er besitzt eine TV-Karte womit das einspeisen des Videos soweit kein Problem sein dürfte. Meine Frage ist nur welches Programm ihr da zum 'aufnehmen' des Filmes empfehlen würdet. Danke Euch schon mal im Voraus! Bine
  23. Das ist doch wohl nicht Dein kompletter Quelltext, oder? Bine
  24. Poste mal was Quelltext sonst wird Dir keiner helfen können... Bine
  25. Woodstock

    Übungsaufgaben?

    Also ich denke das ist für Scav schon zu kompliziert. Er hat gerade erst mit C++ angefangen (weiß ich aus einem anderen Thread wo er gefragt hat ob er C++ oder PHP machen soll). Und das mit den Button und Fenstern geht schon ziemlich weit. Ich lerne seit Anfang der Ausbildung C++ und kann noch keine Buttons und Fenster proggen. Alles reine CommandLine Anwendungen. @Scav: Melde Dich mal per E-Mail bei mir wenn Du was haben willst. Bine

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