it-swarm.com.de

Befehlszeilenargumente, eine Datei lesen

Wenn ich in die Kommandozeile eingetreten bin C: myprogram myfile.txt

Wie kann ich myfile in meinem Programm verwenden? Muss ich es scannen oder gibt es eine willkürliche Möglichkeit, darauf zuzugreifen.

Meine Frage ist, wie ich die myfile.txt in meinem Programm verwenden kann. 

int
main(){
    /* So in this area how do I access the myfile.txt 
    to then be able to read from it./*
10
user2440329

Sie können int main(int argc, char **argv) als Ihre Hauptfunktion verwenden.

argc - wird die Anzahl der Eingabeargumente für Ihr Programm sein.
argv - ist ein Zeiger auf alle Eingabeargumente.

Wenn Sie also C:\myprogram myfile.txt Eingegeben haben, um Ihr Programm auszuführen:

  • argc wird 2 sein
  • argv[0] Ist myprogram.
  • argv[1] Wird myfile.txt Sein.

Weitere Details hier zu finden

So lesen Sie die Datei:
FILE *f = fopen(argv[1], "r"); // "r" for read

Zum Öffnen der Datei in anderen Modi lesen Sie dies .

16
srikfreak
  1. Deklarieren Sie Ihre Hauptleitung so

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

    • argc gibt die Anzahl der Argumente an (wenn keine Argumente übergeben werden, ist der Name des Programms gleich 1)

    • argv ist ein Zeiger auf ein Array von Strings (mit mindestens einem Member - dem Namen des Programms)

    • sie würden die Datei folgendermaßen von der Befehlszeile aus lesen: C:\my_program input_file.txt

  2. Richten Sie ein Dateihandle ein:

    File* file_handle;

  3. Öffne das file_handle zum Lesen:

    file_handle = fopen(argv[1], "r");

    • fopen gibt einen Zeiger auf eine Datei oder NULL zurück, wenn die Datei nicht existiert. argv 1 enthält die Datei, die Sie als Argument lesen möchten

    • "r" bedeutet, dass Sie die Datei zum Lesen öffnen (mehr zu den anderen Modi hier )

  4. Lesen Sie den Inhalt zum Beispiel mit fgets :

    fgets (buffer_to_store_data_in , 50 , file_handle);

    • sie benötigen einen char * -Puffer zum Speichern der Daten (z. B. ein Array von Zeichen), das zweite Argument gibt an, wie viel gelesen werden soll, und das dritte ist ein Zeiger auf eine Datei
  5. Zum Schluss den Griff schließen

    fclose(file_handle);

Alles erledigt :)

2
Nobilis

Dies ist der Programmierweg 101. Es braucht eine Menge für selbstverständlich und führt überhaupt keine Fehlerprüfung durch! Aber es wird dich anfangen.

/* this has declarations for fopen(), printf(), etc. */
#include <stdio.h>

/* Arbitrary, just to set the size of the buffer (see below).
   Can be bigger or smaller */
#define BUFSIZE 1000

int main(int argc, char *argv[])
{
    /* the first command-line parameter is in argv[1] 
       (arg[0] is the name of the program) */
    FILE *fp = fopen(argv[1], "r"); /* "r" = open for reading */

    char buff[BUFSIZE]; /* a buffer to hold what you read in */

    /* read in one line, up to BUFSIZE-1 in length */
    while(fgets(buff, BUFSIZE - 1, fp) != NULL) 
    {
        /* buff has one line of the file, do with it what you will... */

        printf ("%s\n", buff); /* ...such as show it on the screen */
    }
    fclose(fp);  /* close the file */ 
}
1
egrunin

Befehlszeilenargumente sind nur reine C-Zeichenfolgen. Sie können mit ihnen machen, was Sie wollen. In Ihrem Fall möchten Sie vielleicht eine Datei öffnen, etwas davon lesen und schließen. 

Diese Frage (und Antwort) könnte nützlich sein.

0
akalenuk

Alle Vorschläge, die Sie zur Verwendung der Befehlszeile erhalten haben, sind korrekt, aber Es klingt für mich auch, dass Sie ein typisches Muster verwenden können, das die stdin-Datei anstelle einer Datei liest, und dann Ihre App durch Pipeing-Vorgänge (z. B. cat) steuert myfile > yourpgm. Sie können dann scanf verwenden, um aus dem Standardeintrag zu lesen . Auf analoge Weise können Sie stdout/stderr verwenden, um die Ausgabe zu erzeugen.

0
Felice Pollano