Size: 2223
Comment:
|
Size: 3108
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 1: | Line 1: |
== Fragen und Kommentare zur 4. Vorlesung / zum 4. Übungsblatt == | == Fragen und Kommentare zur 7. Vorlesung / zum 7. Übungsblatt == |
Line 3: | Line 3: |
Noch eine Frage: In der .h-Datei steht ja die Definition "VORLESUNGEN_VORLESUNG_4_LISTPROCESSING_H_". Jetzt gibt es hiermit allerdings ein Problem: Je nachdem, auf welchem System/in welchem Ordner die Datei liegt, ist Lint so "freundlich" und "empfiehlt" einem unterschiedliche Namensgebungen, was dazu führt, dass Lint entweder lokal läuft, oder auf Hudson - oder (vermutlich) beim Tutor. Sollen wir hier einfach einen "neutralen" Namen als Definition verwenden, bzw. könnte man nicht gleich MAX_SIZE definieren und als Bedingung beim ifdef verwenden? '''SebastianS 12Mai10 23:03''' | In der Vorlesung wurde gesagt, dass die Parameterwerte mit einem {{{=}}} direkt an ihre Schalter angehaengt werden. {{{ argv[0] = const_cast<char*>(""); argv[1] = const_cast<char*>("--output-file=out.txt"); argv[2] = const_cast<char*>("P"); }}} Sollte dann richtig funktionieren. '''AxelLehmann 10Jun10 11:03''' |
Line 5: | Line 10: |
Guten Abend, dann bring ich mal gleich auch meine Fragen hier rein. Also die Variable MAX_LIST_SIZE kann ich in der .cpp Datei ja nicht nutzen wenn ich die .h nicht include, dies ist ja aber grad, das was nicht passieren soll. Diesen Wert brauch ich ja aber um zuüberprüfen, dass mein i mir nicht zu weit wegläuft, oder? Dann zum AufgabenTeil 2? Soll hier die Funktion diesmal die neue Liste als Ausgabewert haben, oder nehme ich wieder eine Liste, dann als 3. Parameter auf? Da ja die 2 Listen ja schon in der Main aufgeteilt werden, und mir also so schon 2 Parameter liefert? '''JonathanN 12Mai10 22:23''' |
@Martin: Was passiert, wenn Sie in in Ihrem Test schreiben {{{ int argc = 3; char* argv[3]; argv[0] = const_cast<char*>(""); argv[1] = const_cast<char*>("--output-file=out.txt"); argv[2] = const_cast<char*>("P"); }}} Läuft der Test dann durch? '''Hannah 10Jun10 10:39''' |
Line 9: | Line 20: |
Ist es zulässig, dass man die parseListOfIntegers Funktion derartig umbaut, dass sie als Argument alle Argumente des Programms entgegen nimmt, und diese selbst in zwei Listen aufteilt? Weil sonst sehe ich nicht, wie man Aufgabe 1 lösen soll, wo doch die Trennung schon in der ListProcessingMain durchgeführt wird? Weitere Frage: Dürfen wir beim Zusammenführen davon ausgehen, dass bei erreichen eines Elementes mit dem Wert -1 abgebrochen werden darf, da Ende der Liste? Eine Liste die mit -1 beginnt ist ja für uns eine "leere" Liste, oder? '''SebastianS 12Mai10 22:06''' | Bin gerade dabei die parseCommandLineArguments Funktion mit den Optionen input-file und output-file zu testen. Hock' jetzt schon 'ne Weile dran und find' den Fehler nicht. Vielleicht hat jemand gerade mehr Gehirnschmalz, als ich. Hier das Codestück in der Grep.cpp (Ich hoffe, dass ist OK, wenn ich das hier rein Stelle, ist ja nicht wirklich viel mehr als das von der Vorlesung): {{{ // First parse the options. struct option options[] = { {"input-file" , 1, NULL, 'i'}, {"output-file" , 1, NULL, 'o'}, {"case-insensitive-match", 0, NULL, 'c'}, {NULL , 0, NULL, 0 } }; while (true) { int c = getopt_long(argc, argv, "ioc", options, NULL); if (c == -1) break; switch (c) { case 'i': _inputFileName = optarg; break; case 'c': _caseSensitiveMatch = false; break; case 'o': _outputFileName = optarg; break; default: printUsage(); exit(1); } }}} Mein Test: {{{ Grep grep; int argc = 4; char* argv[4]; argv[0] = const_cast<char*>(""); argv[1] = const_cast<char*>("--output-file"); argv[2] = const_cast<char*>("out.txt"); argv[3] = const_cast<char*>("P"); grep.parseCommandLineArguments(argc, argv); ASSERT_EQ(0, grep._inputFileName[0]); ASSERT_EQ('P', grep._pattern[0]); ASSERT_EQ(0, grep._pattern[1]); ASSERT_EQ('o', grep._outputFileName[0]); ASSERT_EQ('u', grep._outputFileName[1]); ASSERT_EQ('t', grep._outputFileName[2]); ASSERT_EQ('.', grep._outputFileName[3]); ASSERT_EQ('t', grep._outputFileName[4]); ASSERT_EQ('x', grep._outputFileName[5]); ASSERT_EQ('t', grep._outputFileName[6]); }}} Fehlermeldung: {{{ Value of: grep._outputFileName[0] Actual: '\0' (0, 0x0) Expected: 'o' Which is: 'o' (111, 0x6F) }}} Den Test für das input file hab' ich im Prinzip analog dazu gemacht. Der funktioniert. '''MartinS 10Jun10 10:34''' |
Line 11: | Line 80: |
[[http://www.gnu.org/software/make/manual/make.html#reference|Hier]] und [[http://www.gnu.org/software/autoconf/manual/make/Automatic-Variables.html|hier]]. Links sind in den Folien der heutigen Vorlesung entnommen. '''SebastianS 12Mai10 19:41''' | @Simson: Indeed, da fehlt ein Punkt, danke für den Hinweis! Habe ihn jetzt gerade noch zugefügt und die neue Version committed. Machen Sie einfach ''svn update'', dann bekommen Sie ihn auch :-) '''Hannah 10Jun10 00:14''' |
Line 13: | Line 82: |
Wo kann man denn den Link zu der Erklärung für den verwendeten Make Syntax finden? '''Daniel 12Mai10 18:43''' | Sollte {{{isMatch("This is just a line", "a..ne$")}}} wirklich wahr zurückgeben? Fehlt da nicht ein {{{.}}} ? '''Simson 10Jun10 00:09''' |
Fragen und Kommentare zur 7. Vorlesung / zum 7. Übungsblatt
In der Vorlesung wurde gesagt, dass die Parameterwerte mit einem = direkt an ihre Schalter angehaengt werden.
argv[0] = const_cast<char*>(""); argv[1] = const_cast<char*>("--output-file=out.txt"); argv[2] = const_cast<char*>("P");
Sollte dann richtig funktionieren. AxelLehmann 10Jun10 11:03
@Martin: Was passiert, wenn Sie in in Ihrem Test schreiben
int argc = 3; char* argv[3]; argv[0] = const_cast<char*>(""); argv[1] = const_cast<char*>("--output-file=out.txt"); argv[2] = const_cast<char*>("P");
Läuft der Test dann durch? Hannah 10Jun10 10:39
Bin gerade dabei die parseCommandLineArguments Funktion mit den Optionen input-file und output-file zu testen. Hock' jetzt schon 'ne Weile dran und find' den Fehler nicht. Vielleicht hat jemand gerade mehr Gehirnschmalz, als ich. Hier das Codestück in der Grep.cpp (Ich hoffe, dass ist OK, wenn ich das hier rein Stelle, ist ja nicht wirklich viel mehr als das von der Vorlesung):
// First parse the options. struct option options[] = { {"input-file" , 1, NULL, 'i'}, {"output-file" , 1, NULL, 'o'}, {"case-insensitive-match", 0, NULL, 'c'}, {NULL , 0, NULL, 0 } }; while (true) { int c = getopt_long(argc, argv, "ioc", options, NULL); if (c == -1) break; switch (c) { case 'i': _inputFileName = optarg; break; case 'c': _caseSensitiveMatch = false; break; case 'o': _outputFileName = optarg; break; default: printUsage(); exit(1); }
Mein Test:
Grep grep; int argc = 4; char* argv[4]; argv[0] = const_cast<char*>(""); argv[1] = const_cast<char*>("--output-file"); argv[2] = const_cast<char*>("out.txt"); argv[3] = const_cast<char*>("P"); grep.parseCommandLineArguments(argc, argv); ASSERT_EQ(0, grep._inputFileName[0]); ASSERT_EQ('P', grep._pattern[0]); ASSERT_EQ(0, grep._pattern[1]); ASSERT_EQ('o', grep._outputFileName[0]); ASSERT_EQ('u', grep._outputFileName[1]); ASSERT_EQ('t', grep._outputFileName[2]); ASSERT_EQ('.', grep._outputFileName[3]); ASSERT_EQ('t', grep._outputFileName[4]); ASSERT_EQ('x', grep._outputFileName[5]); ASSERT_EQ('t', grep._outputFileName[6]);
Fehlermeldung:
Value of: grep._outputFileName[0] Actual: '\0' (0, 0x0) Expected: 'o' Which is: 'o' (111, 0x6F)
Den Test für das input file hab' ich im Prinzip analog dazu gemacht. Der funktioniert. MartinS 10Jun10 10:34
@Simson: Indeed, da fehlt ein Punkt, danke für den Hinweis! Habe ihn jetzt gerade noch zugefügt und die neue Version committed. Machen Sie einfach svn update, dann bekommen Sie ihn auch Hannah 10Jun10 00:14
Sollte isMatch("This is just a line", "a..ne$") wirklich wahr zurückgeben? Fehlt da nicht ein . ? Simson 10Jun10 00:09