web-dev-qa-db-fra.com

Arguments en ligne de commande, lecture d'un fichier

Si je suis entré en ligne de commande C: myprogram myfile.txt

Comment utiliser mon fichier dans mon programme? Dois-je le scanner ou existe-t-il un moyen arbitraire d'y accéder?.

Ma question est comment puis-je utiliser le myfile.txt dans mon programme. 

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

Vous pouvez utiliser int main(int argc, char **argv) comme fonction principale.

argc - sera le nombre d'arguments d'entrée de votre programme.
argv - sera un pointeur sur tous les arguments en entrée.

Donc, si vous avez entré C:\myprogram myfile.txt pour exécuter votre programme:

  • argc sera 2
  • argv[0] sera myprogram.
  • argv[1] sera myfile.txt.

Plus de détails peut être trouvé ici

Pour lire le fichier:
FILE *f = fopen(argv[1], "r"); // "r" for read

Pour ouvrir le fichier dans d'autres modes, lisez ceci .

14
srikfreak
  1. Déclarez votre main comme ça

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

    • argc a spécifié le nombre d'arguments (si aucun argument n'est passé, il vaut 1 pour le nom du programme)

    • argv est un pointeur sur un tableau de chaînes (contenant au moins un membre - le nom du programme)

    • vous liriez le fichier à partir de la ligne de commande comme suit: C:\my_program input_file.txt

  2. Mettre en place un handle de fichier:

    File* file_handle;

  3. Ouvrez le file_handle pour lire:

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

    • fopen renvoie un pointeur sur un fichier ou NULL si le fichier n'existe pas. argv 1 , contient le fichier que vous voulez lire en argument

    • "r" signifie que vous ouvrez le fichier en lecture (plus sur les autres modes ici )

  4. Lisez le contenu en utilisant par exemple fgets :

    fgets (buffer_to_store_data_in , 50 , file_handle);

    • vous avez besoin d'un tampon char * pour stocker les données (un tableau de caractères, par exemple), le deuxième argument spécifie le montant à lire et le troisième est un pointeur sur un fichier
  5. Enfin fermez la poignée

    fclose(file_handle);

Terminé :)

2
Nobilis

C'est la manière de programmer 101. Cela prend beaucoup pour acquis, et cela ne fait aucune vérification d'erreur! Mais ça va vous aider à démarrer.

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

Les arguments en ligne de commande sont simplement des C-strings. Vous pouvez faire ce que vous voulez avec eux. Dans votre cas, vous voudrez peut-être ouvrir un fichier, en lire un extrait et le fermer. 

Vous pourriez trouver cette question (et sa réponse) utile.

0
akalenuk

Toutes les suggestions que vous avez reçues concernant l’utilisation de la ligne de commande sont correctes, mais Il me semble que vous pouvez également utiliser un modèle typique qui lit la stdin au lieu d’un fichier, puis pilotez votre application par piping, par exemple cat. myfile > yourpgm. Vous pouvez ensuite utiliser scanf pour lire à partir de stdin . De manière analogue, vous pouvez utiliser stdout/stderr pour générer la sortie.

0
Felice Pollano