Dateinamen Übergabe über die Kommandozeile



  • Servus

    ich stehe vor folgendem problem:

    hab eine aufgabe gelöst, die so aussah, dass ich aus einer datei den inhalt einlesesn sollte, sortieren sollte (alphabetisch) und dann in eine verkettete liste abgespeichert werden soll.

    momentan übergeb ich die datei in der main()

    FILE *fp = fopen("t.txt", "r");				//Datei öffnen und Inhalt an fp übergeben
    
    	fgets(s,100,fp);							//String auslesen
    

    Nun soll die aufgabe erweitert werden und zwar:

    Diese Programm soll so erweitert werden, dass statt “stdin” zwei Dateinamen auf der Kommandozeile ubergeben werden und diese Dateien zu offnen und zu sortieren sind. Beide Sortierergebnisse wieder ausgeben.

    Nun hab ich aber keine ahnung, wie ich das programm erweitern soll, sodass ich z.b. test.txt auf der kommandozeile eingebe, sodass diese dann über das erweiterte programm geöffnet wird. 😕

    Vlt hat ja hier noch jmd ne Idee 🙄

    Grüße



  • Du mußt die Parameter von der main-Funktion abfragen (bzw. erst einmal diese Parameter dem Programm bekannt machen):

    int main(int argc, char *argv[])
    {
    }
    

    In argc steht die Anzahl der übergebenen Parameter.
    In argv[] stehen die einzelnen Parameter, wobei in argv[0] der Programmname (evtl. + Pfad) steht.

    Ansonsten suche mal nach argc und argv, es gibt genügend Threads hierzu.



  • ja mit dem argument counter und vector hab ich schon probiert...

    in argv[0] steht immer der aufruf "./binary "...gut ich teste nochmal bissi rum, wenns nich klappt nerv ich nochmal 🙄



  • rydic2 schrieb:

    FILE *fp = fopen("t.txt", "r");				//Datei öffnen und Inhalt an fp übergeben
    		
    	fgets(s,100,fp);							//String auslesen
    

    uargs - fp kann doch nicht den dateiinhalt speichern... dazu musst do schon ein char array anlegen...



  • ups, falsch gelesen 🙄
    sorri 🤡



  • Ich habe ein grundlegendes verständnis Problem mit argc und *argv[]...

    hab hier jetz mal per suchfunktion einige threads durchgelesen, bin aber noch nicht richtig sicher

    also was ich verstehe ist:... argc = argument counter...zählt wie viele argumente eingegeben werden. diese argumente stehen in argv[]= argument vector. An stelle [0] steht immer etwas, und zwar der aufruf des programms bspsw. "./binary". Im letzten elemnt des vectors steht immer NULL.

    was ich nicht verstehe. wie kann ich denn jetzt über die Kommandozeile in den Vector reinschreiben. Also so, wie beispielsweise automatisch ./binary abgelegt wird. Tippe ich jetzt während dem Programmlauf etwas ein, tut sich nichts bei argc und argv[].

    Also wie kann ich jetzt dort einen String ablegen, sodass ich ihn später im programm weiterverarbeiten kann?... 😕

    Danke für ne kurze Aufklärung 🙄



  • Wenn du dein Programm binary aufrufst in der Form

    binary String1 String2 String3

    so sind String1 String2 String3 die Übergabeparameter an das Programm.

    Im Programm kannst du dann probeweise die Zeichenketten ausgeben:

    printf("%s",argv[1]);  // für String 1 etc...
    

    Zeh Mau



  • ahhhh, das is ja einfach...das hätte mir einnige unnötigen code erspart 😉

    struct files{
    		char filename[10];
    	} names[2];
    
    	for(v=0;v<2;v++){
    	printf("Datei öffnen (mit Endung): ");
    	scanf("%s", names[v].filename);
    	FILE *fp1 = fopen(names[v].filename, "r");
    	fgets(names[v].filename,100,fp1);
    	}
    

    Dank dir!



  • rydic2 schrieb:

    ahhhh, das is ja einfach...das hätte mir einnige unnötigen code erspart

    Das ist genau der Vorteil von Programmübergabeparametern!


Anmelden zum Antworten