Kommandozeilenparameter

hugo96

Grünschnabel
Hallo alle zusammen,

und zwar möchte ich Kommandozeilenparameter einlesen, welche Textdateinamen sind, um diese dann später zu verarbeiten. D.h. es können beliebig viele Textdatein sein. Mein Frage ist nun wie kann ich diese Namen der Datein abspeichern um sie später dann zu öffnen (am besten in einer eigenen Funktion).

Bsp.: ./programm Text1.txt Text2.txt usw.

Vielen Dank im vorraus
 
Hi und Willkommen bei tutorials.de,

C:
int main(int argc, char *argv[])
{
    int i;
    ...
    for(i = 1; i < argc; i++) /*Für alle Namen mach irgendwas */
    {
        /* argv[i] ist einer der Namen */
    }
}
 
Noch kurz wieso sheel's for-Loop bei i=1 anfängt: argv[0] selbst ist der Pfad zum eigenen Programm.
 
danke für die schnelle antwort, aber ich habe ein anderes problem.

dachte mir folgende Vorgehensweise:
ich überprüfe zuerst die Eingabe der Parameter (auf Endung), und will die dannach alle einzelnen Argumente in variablen abspeichern

wie z.B.: file1, file2 .... oder in einem Array ****?

damit ich sie dannach zusammen setzen kann.

Habe noch andere Argumente, welche hier ignoriert werden sollen. Außerdem spielt die Reihenfolge der Argumente auch keine Rolle, deswegen kann ich nicht einfach annehmen das jedes Argument eine Datei ist.
 
Hallo

Die Argumente sind in Variabeln abgespeichert, nämlich in argv (Array).
Du kannst sie per strcpy() umherkopieren und falsche Argumente ignorieren.

Gruss
cwriter
 
Außerdem spielt die Reihenfolge der Argumente auch keine Rolle, deswegen kann ich nicht einfach annehmen das jedes Argument eine Datei ist.
An irgendwas musst du ja aber erkennen, ob es eine Datei ist. z.B. durch einen vorausgehenden Parameter:
myprogram -opt lala -f datei1.txt irgendwas -f datei2.txt
Dann musst du eben überprüfen, ob argv[ i-1 ] gleich "-f".

Oder wenn du einfach auf Dateiendungen schaust, dann musst du eben prüfen, ob argv[ i ] auf ".txt" oder was auch immer endet.
 
Es gibt auch fertige Bibliotheken (Parser) dafür, siehe hier:

http://stackoverflow.com/questions/253556/what-parameter-parser-libraries-are-there-for-c
http://stackoverflow.com/questions/865668/parse-command-line-arguments

@Clund (/off-topic):

Du wirst wahrscheinlich Probleme bekommen, wenn du einen neuen Parameter am Anfang einfügst, so dass alle Zahlen (Indizes) verändert werden müssen.

Übrigens habe ich mir auch deine compiler.cpp angeschaut. Ich würde dir eine Art Pluginsystem empfehlen, sprich du hast eine Liste von Plugins, welche die verschiedenen Befehle übernehmen, und rufst dann statt deiner langen switch-Blöcke einfach das entsprechende Plugin auf.
 
Moin moin,
Ja, boost ist mir auch in den Sinn gekommen, hab ich persönlich allerdings noch nie verwendet.

<offtopic>
Welche Probleme? die Reihenfolge ist bei meinem System ja wurscht ...

Zum Compiler: bis jetzt hab ich nur masm --> iasm umgesetzt ... masm ist noch relativ simpel, die opcodes entsprechen dem ersten zeichen vom code und (bis auf zwei Ausnahmen) werden die Werte einfach hintendrangehängt.

Bei sasm werd ich das warscheinlich per plugin bzw. "jump-liste" machen. Wurd mir auch schon empfohlen, das anders zu machen ;).
Wenn du noch Fragen/Anregungen zu meinem Programm hast, ich bin im IRC.

</offtopic>

Simon
 

Neue Beiträge

Zurück