Woodstock Geschrieben 23. Oktober 2001 Autor Geschrieben 23. Oktober 2001 Ja, ein wenig. Ich könnte also zum Beispiel (ich lese die Dateien, die untersucht werden wollen, aus einer Text Datei aus, in die der User die vorher einzugeben hat (soll nicht so bleiben, reicht aber ersteinmal)). Diese Datei muss der User jetzt noch eintippen, und das kann ich damit jetzt umgehen, richtig? Und zwar indem ich diese Datei als Parameter mit übergebe, z.B. als argv[1], und ihm bei dem ersten fopen sagen, das er dort argv[1] nehmen soll, ja? Bine Zitieren
Woodstock Geschrieben 23. Oktober 2001 Autor Geschrieben 23. Oktober 2001 @ Poldi: Sorry wenn ich nicht auf Dich eingegangen bin, aber ich habe das noch immer nicht richtig vertanden denke ich, und Deine Hilfe ist im Moment einfach zu komplex, aber es ist nicht so, das ich dafür nicht auch dankbar wäre. Kann ich sicher als nächstes benutzen, wenn ich diesen Schritt verstanden hab Bine Zitieren
haddock Geschrieben 23. Oktober 2001 Geschrieben 23. Oktober 2001 @poldi: Schick, aber ich weiß nicht, ob die ganzen malloc's zur erhellung beitragen ... abgesehen davon vermisse ich die entsprechenden free's, und du reichst die Zeiger ja nicht nach außen weiter :confused: Als U-Nixe solltest du Fehlermeldungen doch auf stderr schreiben: fputs("Fehler!", stderr); ( [f]puts() is glaub ich bei Konstanten schneller ) nur nebenbei... @ Bine: Schreib doch ein kleines prg, das dich beglückwünscht, wenn du's mit dem richtigen Parameter aufrufst - dazu mußt du vergleichen, erstmal im Kleinen - das hebt die Stimmung Zitieren
haddock Geschrieben 23. Oktober 2001 Geschrieben 23. Oktober 2001 @Woodstock: Ja. FILE* f; if(argc > 1) { if( (f = fopen(argv[1]), "r") != 0 ) { // ...tu-was-schoenes, die Datei ist offen! fclose(f); } else cerr << "Kann Datei " << argv[1] <<" nicht oeffnen" << endl; } else { cerr << "Zuwenig Parameter..." << endl; } usw... Natürlich mußt du noch ein bißchen mit den Parametern jonglieren, wenns mehr werden, aber prinzipiell geht's so. <FONT COLOR="#a62a2a" SIZE="1">[ 23. Oktober 2001 15:59: Beitrag 2 mal editiert, zuletzt von captain haddock ]</font> Zitieren
Woodstock Geschrieben 23. Oktober 2001 Autor Geschrieben 23. Oktober 2001 Hmm, also so wie Du das hast, geht es nicht, weil fopen immer zwei Parameter braucht, nämlich was, und wie. Aber wenn ich das beifüge, compilt und linkt er zwar, aber er kann die Datei trotzdem nicht öffnen. Bine PS: Habe bis auf diese Öffnungsaktion (mit einer Ausgabe ob's funktioniert hat oder nicht), aus meinem Programm kommentiert. Daran kann's also nicht liegen. Zitieren
haddock Geschrieben 23. Oktober 2001 Geschrieben 23. Oktober 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Woodstock: <STRONG>Hmm, also so wie Du das hast, geht es nicht, weil fopen immer zwei Parameter braucht, nämlich was, und wie. </STRONG> Zitieren
Poldi Geschrieben 23. Oktober 2001 Geschrieben 23. Oktober 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von captain haddock: <STRONG>@poldi: Schick, aber ich weiß nicht, ob die ganzen malloc's zur erhellung beitragen ... abgesehen davon vermisse ich die entsprechenden free's, und du reichst die Zeiger ja nicht nach außen weiter :confused: Als U-Nixe solltest du Fehlermeldungen doch auf stderr schreiben: fputs("Fehler!", stderr); ( [f]puts() is glaub ich bei Konstanten schneller ) nur nebenbei... </STRONG> Zitieren
Woodstock Geschrieben 24. Oktober 2001 Autor Geschrieben 24. Oktober 2001 @ Poldi: Nee, das würde ich nicht sagen, nur zu komplex, ich brauche einfach ersteinmal die einzelnen Teile, das ist alles, denn ist ja gut geliedert. Und danke das Du mir versuchst zu helfen, es ist ja nicht selbstverständlich. @ captain haddock: Gut, daran hatte ich auch nicht gedacht (vn wegen dem gleichen Verzeichniss, habe die Datei jetzt dort hineingeschoben), klappt aber auch jetzt nicht. Sag mir bitte noch mal genau wie ich das in der Command line einzugeben habe (habe es immer so gemacht: in das Verzeichnis mit der *.exe gewechselt, dann 'test text.txt' eingegeben und Enter gedrückt). Wenn ich doch einen weitere Information gebe, müsste er die doch als argv[1] speichern, oder? Bine Zitieren
haddock Geschrieben 24. Oktober 2001 Geschrieben 24. Oktober 2001 Nun, das ist spannend. Vielleicht hilft ein Griff in die Trick-Kiste: Um sicherzugehen, daß das Prg an der richtigen Stelle die richtigen Daten benutzt, kannst du Ausgaben einbauen. Damit die hinterher nicht stören, packst du sie in einen Block, der nur in der Debug-Version einkompilert wird. MSVC definiert nur in der Debug-Version ein Symbol _DEBUG. Dieses fragst du ab, den Rest macht der Preprozessor. #ifdef _DEBUG cout << "argv[1] ist: " << argv[1] << endl; #endif Auf diese Art spickst du dein Prg mit Kontrollausgaben, dann weißt du immer, was es macht. Das hilft, Fehler einzugrenzen. Zitieren
Woodstock Geschrieben 24. Oktober 2001 Autor Geschrieben 24. Oktober 2001 Hi, also, ich weiß nicht genau warum es jetzt klappt, habe es noch mal geschrieben (ist jedoch genau so wie vorher auch), aber es ist jedenfalls so. Danke! Ich übergebe jetzt die Datei, in der nach den Dateien gesucht wird, die durchsucht werden sollen direkt an/in die/der Command Line. Mit den Suchbegriffen das dürfte jetzt doch auch klappen?!? Bine Zitieren
Crush Geschrieben 24. Oktober 2001 Geschrieben 24. Oktober 2001 Und um mögliche Speicherlöcher rauszufinden, schreibst Du einfach im Header rein: #define new DEBUG_NEW, dann werden malloc und new ersetzt und Speicherlücken können bei Asserts ausfindig gemacht werden - hab ich nur als Anmerkung wegen dem #define von oben dazugefügt. Zitieren
Woodstock Geschrieben 24. Oktober 2001 Autor Geschrieben 24. Oktober 2001 Mal so eine Frage nebenbei (gehört hier glaube ich nicht wirklich hin). Wenn ich eine Datei ausgeben lassen will (z.B. eine Help Datei für mein Programm, wie man es mit der Command Line zu bedienen hat), dann machen ich das mit in dem ich bei einem Hilfe-Befehel mit fopen die Datei öffnen, auslesen und aunzeigen lasse, oder? Ist das der einzige Weg? Bine Zitieren
haddock Geschrieben 24. Oktober 2001 Geschrieben 24. Oktober 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Woodstock: <STRONG>Hi, also, ich weiß nicht genau warum es jetzt klappt, habe es noch mal geschrieben (ist jedoch genau so wie vorher auch), aber es ist jedenfalls so. Danke! Ich übergebe jetzt die Datei, in der nach den Dateien gesucht wird, die durchsucht werden sollen direkt an/in die/der Command Line. Mit den Suchbegriffen das dürfte jetzt doch auch klappen?!? Bine</STRONG> Zitieren
Woodstock Geschrieben 24. Oktober 2001 Autor Geschrieben 24. Oktober 2001 Sorry, aber das geht wieder zu schnell. Ich will ja meine eigene Help-Datei erstellen, wo ich drin beschtreibe, wie man mein Programm benutzen kann, die ich in der Command Line aufrufen lassen kann. Also wie ist das mit dem was Du da beschrieben hast? Bine Zitieren
haddock Geschrieben 24. Oktober 2001 Geschrieben 24. Oktober 2001 Ich glaube, deine Frage war "wie gebe ich eine Datei aus, gibt es nur einen Weg?" . Antwort: Es gibt (wie immer) mehrere Wege. 1. Datei öffnen -> ausgeben (wie auch immer) -> schließen 2. Betriebssystemaufruf mit dem Befehl "system", Beispiel: // x.c - Dateiausgabe: #include <stdlib.h> #include <stdio.h> void main(void) { system("type x.c"); puts("\nhihi..."); // Prg geht weiter... } Delegieren heißt das Zauberwort, speicher das unter "x.c" und laß mal laufen Zitieren
Woodstock Geschrieben 25. Oktober 2001 Autor Geschrieben 25. Oktober 2001 Ok, hier also meine Frage (ich änder das mt den Parametern mal vorher, denn daran liet es nicht): Warum stürzt er bei mir in der Funktion ab? In dem Programm kommt man in die Funktion rein, und kann auch die Suchbegriffe, so viele wie man will, eingeben, aber wenn man dann nur mit Enter bestätigt, um aus der Funktion wieder raus zu kommen, stürzt er ab (was ich daran weiß, das ich die Ausgabe von 'Hallo' eingebaut habe, und diese nicht erfolgt)?!? #include "Sabine(1).h" void Suchbegriffe(char *buffer2, char Eingabe[][1001], int& scnt2) { do { cout << "Bitte das " <<scnt2+1 << ". gesuchte Wort eingeben: "; cin.getline(buffer2, 1000); _strlwr(buffer2); strcpy(Eingabe[scnt2], buffer2); scnt2++; } while (strlen(buffer2) > 0); } Bine PS: An der Include kann es nicht liegen, da sind nur die Standard Includes drin. Außerdem würde er dann ja auch schon vorher meckern. <FONT COLOR="#a62a2a" SIZE="1">[ 25. Oktober 2001 15:35: Beitrag 1 mal editiert, zuletzt von Woodstock ]</font> Zitieren
haddock Geschrieben 25. Oktober 2001 Geschrieben 25. Oktober 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von Woodstock: <STRONG> Warum stürzt er bei mir in der Funktion ab? </STRONG> Zitieren
Woodstock Geschrieben 29. Oktober 2001 Autor Geschrieben 29. Oktober 2001 Ja, er stürzt genau an der Stelle ab, wenn er aus der do-while Schleife kommt. Habe danach die Ausgabe von 'Hallo' gepackt, um es zu kontrollieren, und dieses 'Hallo' gibt er mir schon nicht mehr aus. Mit scnt2 hat er keine Probleme, und wenn ich es mit dem Debugger laufen lasse, kann ich ja auch die Variablen-Wert-Zuweisungen bzw. Stringzuweisungen überprüfen, und da läuft alles so wie es soll. Bine <FONT COLOR="#a62a2a" SIZE="1">[ 29. Oktober 2001 08:29: Beitrag 1 mal editiert, zuletzt von Woodstock ]</font> Zitieren
haddock Geschrieben 29. Oktober 2001 Geschrieben 29. Oktober 2001 Moin Binchen, leider fällt mir nix ein was falsch sein könnte, vielleicht postest du nochmal deien aktuellen Original-Code ? Gruß Zitieren
Woodstock Geschrieben 29. Oktober 2001 Autor Geschrieben 29. Oktober 2001 Ok, also mein 'Main Quelltext' sieht so aus: #include "Sabine(1).h" FILE *fz, *fy; char buffer2[1001]={NULL}, buffer3[1001]={NULL}; char Datei[100][1000], Liste[1001], Eingabe[50][1001]; int j = 0, b; int scnt = 0, scnt2 = 0; void Ueberpruefung (int& scnt2, char Datei[][1000], char Eingabe[][1001], FILE* fz, int& j); void Suchbegriff(char *buffer2, char Eingabe[][1001], int& scnt2); void main(int argc, char *argv[], char *enpv[]) { cout << "\033[2J"; cout << "Mit diesem Programm koennen Sie eine " "beliebige Datei auf einen Suchbegriff hin \nuntersuchen!" " Wollen Sie keine weitere Datei mehr durchsuchen bitte " "<Enter>\ndruecken!\n\n"; fy = fopen (argv[1], "r"); if (fy == NULL) cout << "Feler - List-Datei nicht gefunden!\n"; else { Suchbegriff(buffer2, Eingabe, scnt2); while ((fgets (buffer3, 1000, fy))!= 0) { _strlwr(buffer3); strcpy(Datei[scnt], buffer3); b=0; do { if (Datei[scnt][b] == '\n') { Datei[scnt][b] = '\0'; } b++; } while(Datei[scnt][b] != 0); scnt++; fz = fopen (Datei[j], "r"); if (fz==NULL) cout << "Fehler - Datei nicht gefunden!\n"; else { Ueberpruefung (scnt2, Datei, Eingabe, fz, j); } // else j++; } // while } // else fclose (fz); fclose (fy); } // main die Funktion Suchbegriff steht in dem Quelltext 'Suchbe': #include "Sabine(1).h" void Suchbegriff(char *buffer2, char Eingabe[][1001], int& scnt2) { do { cout << "Bitte das " <<scnt2+1 << ". gesuchte Wort eingeben: "; cin.getline(buffer2, 1000); _strlwr(buffer2); strcpy(Eingabe[scnt2], buffer2); scnt2++; } while (strlen(buffer2) > 0); cout << "Hallo\n\n"; } Also, wie schon gesagt, er geht bis in die Abfrage nach den Suchbegriffen, und liest diese auch ein, aber wenn er aus der Schleife rauskommt, bricht er ab (weiß ich, weil er das 'Hallo' nicht mehr ausgibt). Bine <FONT COLOR="#a62a2a" SIZE="1">[ 29. Oktober 2001 09:20: Beitrag 2 mal editiert, zuletzt von Woodstock ]</font> Zitieren
haddock Geschrieben 29. Oktober 2001 Geschrieben 29. Oktober 2001 Hi Bine, sieht ja eigentlich gut aus :confused: Ich kann leider weder in der Funktion noch im Aufruf was finden, was einen Absturz rechtfertigt. Ich kann dir nur empfehlen, jede Anweisung mit einer Kontrollausgabe zu versehen, vielleicht läuft ja doch irgendeine Sache aus dem Ruder. Deklarier die Funktion versuchshalber mal name(char*, char**, int&) :confused: Zitieren
Woodstock Geschrieben 29. Oktober 2001 Autor Geschrieben 29. Oktober 2001 Daran kann es aber doch nicht liegen, weil ich ja soweit komme das ich die Suchbegriffe eingeben kann. Nur wenn ich dann die Schleife wieder verlasse, weil die Enbedingung erfüllt ist, dann stürzt er ab. So eine scheiße... Bine Zitieren
Woodstock Geschrieben 29. Oktober 2001 Autor Geschrieben 29. Oktober 2001 Wollte nur eben bescheid sagen das alles klappt. Hab den Fehler wohl gefunden (auch wenn ich es nicht wirklich habe, aber jetzt geht's). Bine Zitieren
haddock Geschrieben 29. Oktober 2001 Geschrieben 29. Oktober 2001 Hätte mich auch gewundert, wenns so *nicht* geklappt hätte <FONT COLOR="#a62a2a" SIZE="1">[ 29. Oktober 2001 13:17: Beitrag 1 mal editiert, zuletzt von captain haddock ]</font> Zitieren
Woodstock Geschrieben 30. Oktober 2001 Autor Geschrieben 30. Oktober 2001 Morgen, also, ich habe da noch mal eine Frage. Ich möchte in meinem Programm eine Hilfe zu einer Hilfedatei schreiben, die dann aufgerufen wird, wenn der User über die Command Line versucht das Programm zu starten in dem er lediglich die *.exe aufruft. Das soll dafür da sein, das dann kurz erklärt wird, was das Programm macht, und im weiteren dazu auffordert, das wenn man nicht weiß wie das Programm zu Bedienen ist, die Hilfe zu dem Programm zu starten (mit dem Hinweis wie dies funktioniert). Nun, das er bei '/?' oder bei '/h' die Hilfe aufruft, klappt, nur nicht der Vorhinweis, dass und wie man die Hilfe aufrufen kann. Wie muss ich das schreiben? Sieht bei mir so aus: void main(int argc, char *argv[], char *envp[]) { if (strlen(argv[1]) == NULL) { cout << "\033[2J"; cout << "Mit diesem Programm koennen Sie eine " "beliebige Datei auf einen Suchbegriff hin \nuntersuchen!" cout << "Brauchen Sie Hilfe zur Benutzung des Programms, " "rufen Sie das Programm mit dem\nParameter '/?' oder '/h' auf!"; } else { if (strstr(argv[1], "/?")) { cout << "\033[2J"; fy = fopen("help.txt", "r"); while ((fgets (buffer3, 1000, fy))!= 0) { cout << buffer3 << "\n"; } } else { cout << "\033[2J"; fy = fopen (argv[1], "r"); if (fy == NULL) cout << "Feler - List-Datei nicht gefunden!\n"; else { Programmausführung } } } klappt aber mal wieder nicht. Ich muss die Bedinung der ersten 'if' Überprüfung umschreiben, weiß aber noch nicht wie. Könnt Ihr mir helfen? Bine 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.