Zum Inhalt springen

Wozu die Übergabe an die Command Line?


Woodstock

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • Antworten 51
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

@ 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

Link zu diesem Kommentar
Auf anderen Seiten teilen

@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:

:D Als U-Nixe solltest du Fehlermeldungen doch auf stderr schreiben: fputs("Fehler!", stderr); :D

:D ( [f]puts() is glaub ich bei Konstanten schneller ) :D

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

@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. :D

<FONT COLOR="#a62a2a" SIZE="1">[ 23. Oktober 2001 15:59: Beitrag 2 mal editiert, zuletzt von captain haddock ]</font>

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

:D Als U-Nixe solltest du Fehlermeldungen doch auf stderr schreiben: fputs("Fehler!", stderr); :D

:D ( [f]puts() is glaub ich bei Konstanten schneller ) :D

nur nebenbei...

</STRONG>

Link zu diesem Kommentar
Auf anderen Seiten teilen

@ 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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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>

Link zu diesem Kommentar
Auf anderen Seiten teilen

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>

Link zu diesem Kommentar
Auf anderen Seiten teilen

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>

Link zu diesem Kommentar
Auf anderen Seiten teilen

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:

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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