Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: thao tác file text trong c++

  1. #1
    Ngày gia nhập
    04 2008
    Bài viết
    4

    Wink thao tác file text trong c++

    đệ đang có một rắc rối to bằng cục kẹo(khó nuốt quá)
    mong mấy cao thủ giúp dùm
    đệ muốn hỏi mấy huynh có biết đoạn code hay hàm hoặc đoạn lệnh nào(trong C++ 6.0) giúp ghi vào file text nhưng không phải ghi vào cuối file mà muốn ghi vào chỗ nào của file cũng được thì chỉ giúp đệ với ! thank nhiều


    nhanh lên mọi người nhá ! nước ngập đến cổ đệ rồi

  2. #2
    Ngày gia nhập
    12 2007
    Bài viết
    224

    Trong C có hàm fseek có thể di chuyển con trỏ tệp đến 1 chỗ bất kỳ trên tệp mà bạn .

  3. #3
    Ngày gia nhập
    04 2008
    Bài viết
    4

    huynh có thể ví dụ cho đệ không
    ví dụ như thế này tạo một file text có sẵn trong đó có 7 dòng mỗi dòng như sau
    1 a
    2 b
    3 c
    ...
    7..f


    giờ đệ muốn xóa dòng thứ hai đi và sửa dòng thứ ba thành " dep trai khoai to " thì làm thế nào

    (dùng hàm iostream.h , fstream.h .. )
    Đã được chỉnh sửa lần cuối bởi pham_nguyen : 11-04-2008 lúc 08:01 PM. Lý do: giúp đệ nhá

  4. #4
    Ngày gia nhập
    12 2007
    Bài viết
    224

    Trong c++ thì mình ko nhớ các thao tác trên tệp lắm. Có điều trong C thì hàm fseek được khai báo và sử dụng như sau:

    fseek(controtep,sobytecandichuyen,diemxuatphat);

    diemxuatphat=0 nếu muốn đi từ đầu tệp , =1 nếu muốn đi từ vị trí hiện hành của têp , =2 nếu muốn đi từ cuối tệp.

    sobytecandichuyen là dương nếu muốn đi theo chiều từ đầu tệp đến cuối tệp , là âm nếu muốn đi theo chiều từ cuối tệp lên đầu tệp .

    Ví dụ tệp trên của bạn ta muốn di chuyển đến vị trí dòng thứ 3 thì làm như sau:

    fseek(FILE,8,0); // di chuyen 8 byte vi sao ban co biet ko ??? ^^

  5. #5
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Try this :
    C++ Code:
    1. #include <iostream>
    2. #include <fstream>
    3. #include <limits>
    4. #include <string>
    5.  
    6. void clear_buffer(){
    7.    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    8. }
    9.  
    10. bool open_file(std::fstream& in_out){
    11.   std::string filename;
    12.   std::cout << "File name :\n";
    13.   std::getline(std::cin, filename);
    14.  
    15.   in_out.open(filename.c_str(), std::ios::in | std::ios::out);
    16.   if(in_out.fail()){
    17.     std::cerr << "...file not found.\n";
    18.     return false;
    19.   }
    20.   std::cout << "...reading in process.\n";
    21.   return true;
    22. }
    23.  
    24. int main(){
    25.   std::fstream infile;
    26.   if(!open_file(infile)){
    27.     return 1;
    28.   }
    29.  
    30.   long offset;
    31.   long total_bytes;
    32.  
    33.   char character;
    34.   char user_choice;
    35.   char advanced;
    36.  
    37.   infile.seekg(0L, std::ios::end);
    38.   total_bytes = infile.tellg();
    39.   do{
    40.     std::cout << "Your current postion is : " << infile.tellg() << "\n";
    41.     std::cout << "Where do you want to go :\n";
    42.     std::cin >> offset;
    43.     clear_buffer();
    44.     if(offset >= total_bytes){
    45.       std::cerr << "...out of range.\n";
    46.       return 1;
    47.     }
    48.     else{
    49.       infile.seekg(offset, std::ios::beg);
    50.       std::cout << " ..current data : ";
    51.       infile.get(character);
    52.       std::cout << character << "\n\n";
    53.       std::cout << " overwrite it ? [y / n] :\n";
    54.       std::cin >> user_choice;
    55.       clear_buffer();
    56.  
    57.       if(user_choice == 'y' || user_choice == 'Y'){
    58.         infile.seekp(offset, std::ios::beg);
    59.         char keystroke;
    60.         std::cout << "..new data : \n" << std::flush;
    61.         std::cin >> keystroke;
    62.         infile.put(keystroke);
    63.         clear_buffer();
    64.       }
    65.     }
    66.     std::cout << "Continue [y / n] ? \n";
    67.     std::cin >> advanced;
    68.     clear_buffer();
    69.   }while(advanced == 'Y' || advanced == 'y');
    70.   return 0;
    71. }
    File name :
    Code:
    abcdTfghijklmnoXqrstuvwxyz

  6. #6
    Ngày gia nhập
    04 2008
    Bài viết
    4

    Mặc định thao tác file text trong c++

    thanh huynh nhưng sao dài thế ! có thể đơn giản chút được không huynh

  7. #7
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Vấn đề không phải dài, mà muốn test kĩ các trường hợp thì phải như vậy, cậu cảm thấy khó hiểu chỗ nào tui sẽ giải thích, và tui sẽ giải thích 1 số điều cơ bản sau :
    Hàm này dùng để làm sạch bộ đém tránh khi nó bị dính phím enter vào buffer :
    C++ Code:
    1. void clear_buffer(){
    2.    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    3. }
    Hàm này dùng để mở 1 file ở cả trạng thái input và output ( std::ios::in, std::ios::out). Nó nhận vào 1 filename dạng string C++, nhưng khi pass vào hàm open thì phải chuyển nó về cstring "c_str()" vì hàm open không nhận C++ string.
    C++ Code:
    1.  
    2. bool open_file(std::fstream& in_out){
    3.   std::string filename;
    4.   std::cout << "File name :\n";
    5.   std::getline(std::cin, filename);
    6.  
    7.   in_out.open(filename.c_str(), std::ios::in | std::ios::out);
    8.   if(in_out.fail()){
    9.     std::cerr << "...file not found.\n";
    10.     return false;
    11.   }
    12.   std::cout << "...reading in process.\n";
    13.   return true;
    14. }
    Dòng này :
    C++ Code:
    1. infile.seekg(offset, std::ios::beg);
    seekg tức là seek-get, offset là vị trí đọc vào, ios::beg là ở vị trí đầu tiên "begin".
    Và khi cậu nhập vào 1 offset nó sẽ move tới vị trí cậu đang cần chỉnh sữa, tui prompt 1 câu lệnh để hỏi cậu có muốn chỉnh sữa kí tự đó không :
    C++ Code:
    1.  
    2.       if(user_choice == 'y' || user_choice == 'Y'){
    3.         infile.seekp(offset, std::ios::beg);
    4.         char keystroke;
    5.         std::cout << "..new data : \n" << std::flush;
    6.         std::cin >> keystroke;
    7.         infile.put(keystroke);
    8.         clear_buffer();
    9.       }
    Nếu có thì keystroke là kí tự mới mà cậu đưa vào.
    Đây là các thao tác rất cơ bản trên file với C++. Nếu vẫn còn thấy quá xa lạ thì cậu nên đọc thread này :
    Code này không thể ngắn hơn, tui viết vậy đã là quá đơn giản, nếu tui làm đúng sẽ là rất dài.
    Đọc 1 lần có lẽ chưa thông, thử lần thử 5-6 xem !

  8. #8
    Ngày gia nhập
    10 2007
    Nơi ở
    /root
    Bài viết
    318

    @ RR , bỏ bớt std:: đi cho code dễ đọc .

  9. #9
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    @ RR , bỏ bớt std:: đi cho code dễ đọc .
    Cái này do thực sự using namespace std:: rất dễ dẫn đến conflict namespace anh à, em viết template bị rất nhiều, nên em quen viết kiểu này rùi T_T, có gì em sẽ sữa trước khi post lên. Sorry anh nhé T_T !
    Đã được chỉnh sửa lần cuối bởi rox_rook : 12-04-2008 lúc 11:55 AM.

  10. #10
    Ngày gia nhập
    04 2008
    Bài viết
    4

    đệ test thử vào máy nó báo 1 lỗi:huynh có biết đây là lỗi gì không

    f:\c++\vc98\include\ios(9) : fatal error C1083: Cannot open include file: 'streambuf': No such file or directory

Các đề tài tương tự

  1. Cách đọc file text trong C như thế nào?
    Gửi bởi themoont2 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 26-01-2015, 02:27 AM
  2. Lập trình C Cách đọc file text trong C như thế nào ?
    Gửi bởi phucduan trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 14
    Bài viết cuối: 25-12-2010, 02:38 PM
  3. Cách lấy text trong file pdf như thế nào?
    Gửi bởi nguyenhuy trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 22-12-2010, 05:27 PM
  4. Bài tập C đọc file text trong C như thế nào?
    Gửi bởi zero22hero trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 21-12-2010, 06:01 PM
  5. đọc file text trong c# như thế nào
    Gửi bởi thuccoi trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 7
    Bài viết cuối: 25-11-2010, 11:42 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn