web-dev-qa-db-ja.com

コマンドライン引数、ファイルの読み取り

コマンドラインCに入力した場合:myprogram myfile.txt

プログラムでmyfileを使用するにはどうすればよいですか。それをスキャンする必要がありますか、それともアクセスする任意の方法がありますか?.

私の質問は、プログラムでmyfile.txtを使用する方法です。

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

int main(int argc, char **argv)をメイン関数として使用できます。

argc-プログラムへの入力引数の数になります。
argv-すべての入力引数へのポインターになります。

したがって、プログラムを実行するために_C:\myprogram myfile.txt_と入力した場合:

  • argcは2になります
  • _argv[0]_はmyprogramになります。
  • _argv[1]_は_myfile.txt_になります。

詳細 ここにあります

ファイルを読むには:
FILE *f = fopen(argv[1], "r"); // "r" for read

他のモードでファイルを開くには、 これを読んでください

16
srikfreak
  1. メインをこのように宣言します

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

    • argcは引数の数を指定しました(引数が渡されない場合、プログラムの名前は1になります)

    • argvは文字列の配列へのポインターです(少なくとも1つのメンバー-プログラムの名前を含む)

    • 次のようにコマンドラインからファイルを読み取ります:_C:\my_program input_file.txt_

  2. ファイルハンドルを設定します。

    _File* file_handle;_

  3. 読み取り用にfile_handleを開きます。

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

    • fopenは、ファイルへのポインター、またはファイルが存在しない場合はNULLを返します。 argv 1 、引数として読み込むファイルが含まれています

    • 「r」は、読み取り用にファイルを開くことを意味します(他のモードの詳細 here

  4. たとえば fgets を使用して内容を読み取ります。

    fgets (buffer_to_store_data_in , 50 , file_handle);

    • データを格納するための_char *_バッファ(charsの配列など)が必要です。2番目の引数は読み込む量を指定し、3番目はファイルへのポインタです
  5. 最後にハンドルを閉じます

    fclose(file_handle);

全部できた :)

2
Nobilis

これがプログラミング101の方法です。当然のことですが、エラーチェックは一切行われません。しかし、それはあなたを始めさせます。

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

コマンドライン引数は単なるC文字列です。あなたは彼らとあなたがやりたいことができます。あなたの場合、ファイルを開き、そこから何かを読んで、それを閉じたいかもしれません。

あなたはこれを見つけるかもしれません 質問 (そして答え)便利です。

0
akalenuk

コマンドラインの使用に関して受け取った提案はすべて正しいですが、ファイルの代わりにstdinを読み取る典型的なパターンを使用し、パイプでアプリを駆動することを検討することもできます例cat myfile > yourpgm。その後、scanfを使用してstdinから読み取ることができます。同様の方法で、stdout/stderrを使用して出力を生成できます。

0
Felice Pollano