2013-06-01 17 views
9

Gdybym weszła w wierszu poleceń C: myprogram myfile.txtargumenty wiersza poleceń, czytania pliku

Jak mogę wykorzystać myfile w moim programie. Czy muszę go zeskanować, czy istnieje arbitralny sposób dostępu do niego.

Moje pytanie brzmi: w jaki sposób mogę użyć pliku myfile.txt w moim programie.

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

Otwiera się go za pomocą 'fopen()' lub 'open()'. – Barmar

+0

Czy masz pytanie dotyczące sposobu odczytywania plików lub jak uzyskać nazwę pliku z listy argumentów? – Barmar

+0

Zauważ, że jeśli używasz systemu podobnego do uniksowego, możesz uruchomić swój program jako 'myprogram

Odpowiedz

11

Możesz użyć int main(int argc, char **argv) jako swojej głównej funkcji.

argc - będzie liczbą argumentów wejściowych do twojego programu.
argv - będzie wskaźnikiem do wszystkich argumentów wejściowych.

Tak więc, jeśli wszedł C:\myprogram myfile.txt aby uruchomić program:

  • argc będzie 2
  • argv[0] będzie myprogram.
  • argv[1] będzie myfile.txt.

Więcej szczegółów can be found here

Aby odczytać plik:
FILE *f = fopen(argv[1], "r"); // "r" for read

Do otwarcia pliku w innych trybach, read this.

+0

Jak przekazać nazwę pliku 'txt' do innej funkcji, a nie do' głównego'? – Sigur

0

Argumenty wiersza poleceń są po prostu ciągami C-owymi. Możesz robić z nimi, co chcesz. W twoim przypadku możesz chcieć otworzyć plik, przeczytać coś z niego i zamknąć go.

Może się przydać ta question (i odpowiedź).

2
  1. zadeklarować swój główny tak

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

    • argc podano liczbę argumentów (jeśli żadne argumenty są przekazywane jest równa 1 dla nazwy programu)

    • argv to wskaźnik do tablicy ciągów znaków (zawierającej co najmniej jeden element członkowski - nazwa programu)

    • byś odczytać pliku z wiersza poleceń tak: C:\my_program input_file.txt

  2. Skonfiguruj uchwyt pliku:

    File* file_handle;

  3. Otwórz file_handle do odczytu:

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

    • fopen zwraca wskaźnik do pliku lub NULL, jeśli plik nie istnieje. argv 1 zawiera plik, który chcesz czytać jako argument

    • „r” oznacza, że ​​otwarcie pliku do odczytu (więcej o innych trybach here)

  4. Czytaj zawartość użyciem przykładem fgets:

    fgets (buffer_to_store_data_in , 50 , file_handle);

    • trzeba char * bufor do przechowywać dane (takie jak tablica znaków), drugi argument określa ile czytać, a trzeci jest wskaźnikiem do pliku
  5. końcu zamknąć rączkę

    fclose(file_handle);

Wszystko zrobione :)

0

Wszystko sugestia otrzymaniu o użyciu wiersza polecenia są poprawne, ale to brzmi dla mnie można również rozważyć użycie tY wzór pufowy, który jest odczytywany jako plik stdin, a następnie steruj aplikacją przez rurociąg, na przykład cat myfile > yourpgm. Następnie można użyć scanf do odczytu ze standardowego wejścia. W analogiczny sposób można użyć stdout/stderr, aby uzyskać wyjście.

1

To jest sposób programowania 101. Trzeba wiele rzeczy oczywistych i wcale nie sprawdza błędów! Ale to cię zacznie.

/* 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 */ 
} 
Powiązane problemy