Wie kann mann eine txt-Datei über die Kommandozeile in C-Programm einbinden

Davicito

Erfahrenes Mitglied
Ich möchte eine "doppelt verkettete Liste" erstellen und dazu anfangen eine vorbereitete Textdatei (txt), mit den entsprechenden Befehlen einzulesen. Es soll also eine Textdatei eingelesen werden, wenn mann über die Kommandozeile (in Ubuntu) eine *.txt an das C-Programm übergibt.

Mit welchen Befehlen lässt sich das realisieren?

Liebe Grüße.
 
Hi

meinst du das Einlesen selber, oder wie du die übergebene Txt-Datei bekommst?

Letzteres:
Statt
C++:
int main()
sowas nehmen
C++:
int main(int argc,char *argv[])
In argc findest du die Anzahl der übergebenen Parameter, in argv ist ein Array aus String mit diesen.
Der erste Parameter ist der Programmname, der Txt-Dateiname ist dann also (wenn sonst nichts übergeben wird) argv[1].
Zuerst solltest du aber überprüfen, ob überhaupt ein Parameter vorhanden ist.
C++:
if(argc<2)
{
    //Fehler
}

Gruß
 
Du bekommst sie dadurch dass der User sie in der Kommandozeile angibt.

Die beiden Parameter argc und argv (wenn du sie so nennst) der Main-Funktion kannst du dann verwenden um die übergebenen Parameter in der Kommandozeile zu erhalten. Wo ist momentan denn (detailliert und mit deinen Versuchscodes illustriert) dein Problem?
 
Du gibst die Sachen in der Kommandozeile folgend ein:

Rufe die Eingabeaufforderung (ist normalerweise unter Start->Programme->Zubehör) auf. Dann gib dort den Pfad der *.exe Datei an und mache eine Leerzeile und dann kannst du die weiteren Kommandozeilenparameter angeben.

Also z.B.:

c:\users\...\datei.exe c:\users\...\text.txt

Somit wird die Datei datei.exe ausgeführt und hat die Datei text.txt als Kommandozeilenparameter.
 
Das ist, was sheel und Muepe32 gesagt haben. Soweit ich weiss, geht das, was du willst folgendermassen:

C:
int main(int argc,char *argv[])
{
char str[256];
FILE* f;
f = fopen(argv[1],"r");
if(f == NULL) printf("Keine Datei vorhanden.\n");
while(fgets(str,256,f) != NULL) printf("%s\n",str);

fclose(f);
system("PAUSE");
return 0;
}

Wie gesagt kann ich mich auch irren.
cwriter
 
Zuletzt bearbeitet:
Genau.
Das argv[1] im fopen ist hier das Elementare.

Etwas fehlt allerdings noch: Prüfen, ob es argv[1] überhaupt gibt (Wie man das macht, hab ich oben schon beschrieben).
Was ist, wenn der Benutzer einfach keinen Parameter mitgibt und keine Prüfung drin ist?
Richtig. Absturz oder ähnliches Problem.

Gruß
 
@sheel

Tue ich das nicht schon per
C:
if(f == NULL) printf("Keine Datei vorhanden.\n");
?
Also 2 Abfragen zu machen wäre ja unnötig, oder? Das ist aber auch eine Möglichkeit:
C:
if(argv[1] == NULL) printf("Keine Datei ausgewaehlt.\n");

Gruss
cwriter
 
Hi.
@sheel

Tue ich das nicht schon per
C:
if(f == NULL) printf("Keine Datei vorhanden.\n");
?
Nein.
Also 2 Abfragen zu machen wäre ja unnötig, oder?
Nein. Du mußt 2 Abfragen machen. Du darfst nicht auf argv[1] zugreifen, wenn kein Wert (bzw. dann NULL) drin steht.

Und du mußt prüfen ob die Datei geöffnet werden konnte.

Das sind zwei verschiedene Paar Schuhe.
Das ist aber auch eine Möglichkeit:
C:
if(argv[1] == NULL) printf("Keine Datei ausgewaehlt.\n");
Dann darfst du aber nicht weitermachen und mußt das Programm mit einem Fehler beenden.

Gruß
 
Zurück