2013-06-01 62 views
9

Nếu tôi nhập vào dòng lệnh C: myprogram myfile.txtĐối số dòng lệnh, đọc một tập tin

Làm cách nào để sử dụng myfile trong chương trình của mình. Tôi có phải scanf nó trong hoặc là có một cách tùy ý để truy cập nó.

Câu hỏi của tôi là làm thế nào tôi có thể sử dụng myfile.txt trong chương trình của mình.

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

Bạn mở nó bằng 'fopen()' hoặc 'open()'. – Barmar

+0

Câu hỏi của bạn về cách đọc tệp hay cách lấy tên tệp từ danh sách đối số? – Barmar

+0

Lưu ý rằng nếu bạn đang sử dụng hệ thống giống Unix, bạn có thể chạy chương trình của mình dưới dạng 'myprogram

Trả lời

11

Bạn có thể sử dụng int main(int argc, char **argv) làm chức năng chính của mình.

argc - sẽ là số đối số đầu vào cho chương trình của bạn.
argv - sẽ là con trỏ tới tất cả các đối số đầu vào.

Vì vậy, nếu bạn cho vào C:\myprogram myfile.txt để chạy chương trình của bạn:

  • argc sẽ là 2
  • argv[0] sẽ myprogram.
  • argv[1] sẽ là myfile.txt.

Chi tiết can be found here

Để đọc các file:
FILE *f = fopen(argv[1], "r"); // "r" for read

Đối mở tập tin trong chế độ khác, read this.

+0

Làm cách nào để chuyển tên tệp 'txt' sang một hàm khác, không phải cho' main'? – Sigur

0

Đối số dòng lệnh chỉ đơn giản là C-strings. Bạn có thể làm bất cứ điều gì bạn muốn với họ. Trong trường hợp của bạn, bạn có thể muốn mở một tập tin, đọc một cái gì đó từ nó và đóng nó lại.

Bạn có thể tìm thấy điều này question (và câu trả lời) hữu ích.

2
  1. Khai báo chính của bạn như

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

    • argc này quy định số lượng đối số (nếu không có đối số được truyền nó bằng 1 cho tên của chương trình)

    • argv là một con trỏ tới một chuỗi các chuỗi (chứa ít nhất một thành viên - tên của chương trình)

    • bạn sẽ đọc các tập tin từ dòng lệnh như sau: C:\my_program input_file.txt

  2. Thiết lập một tập tin xử lý:

    File* file_handle;

  3. Mở file_handle cho việc đọc:

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

    • fopen trả về một con trỏ tới một tệp hoặc NULL nếu tệp không tồn tại. argv 1, chứa các tập tin mà bạn muốn đọc như một cuộc tranh cãi

    • "r" có nghĩa là bạn mở file để đọc (nhiều hơn về các chế độ khác here)

  4. Đọc nội dung sử dụng cho Ví dụ fgets:

    fgets (buffer_to_store_data_in , 50 , file_handle);

    • bạn cần một bộ đệm char * để lưu trữ dữ liệu trong (ví dụ như một loạt các ký tự), đối số thứ hai xác định bao nhiêu để đọc và thứ ba là một con trỏ đến một tập tin
  5. Cuối cùng đóng tay cầm

    fclose(file_handle);

Đã xong :)

0

Tất cả các đề nghị bạn nhận về việc sử dụng dòng lệnh là chính xác, nhưng nghe có vẻ với tôi bạn cũng có thể xem xét sử dụng một ty mẫu pical được đọc stdin thay vì tệp, sau đó thúc đẩy ứng dụng của bạn bằng đường ống, ví dụ: cat myfile > yourpgm. Sau đó, bạn có thể sử dụng scanf để đọc từ stdin. Theo cách tương tự, bạn có thể sử dụng stdout/stderr để tạo đầu ra.

1

Đây là cách lập trình 101. Phải mất rất nhiều thời gian, và nó không làm bất kỳ kiểm tra lỗi nào cả! Nhưng nó sẽ giúp bạn bắt đầu.

/* 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 */ 
} 
Các vấn đề liên quan