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 .
đệ đ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![]()
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 .
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á
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 ??? ^^
Try this :
File name :C++ Code:
#include <iostream> #include <fstream> #include <limits> #include <string> void clear_buffer(){ } bool open_file(std::fstream& in_out){ std::string filename; in_out.open(filename.c_str(), std::ios::in | std::ios::out); if(in_out.fail()){ return false; } return true; } int main(){ std::fstream infile; if(!open_file(infile)){ return 1; } long offset; long total_bytes; char character; char user_choice; char advanced; infile.seekg(0L, std::ios::end); total_bytes = infile.tellg(); do{ clear_buffer(); if(offset >= total_bytes){ return 1; } else{ infile.seekg(offset, std::ios::beg); infile.get(character); clear_buffer(); if(user_choice == 'y' || user_choice == 'Y'){ infile.seekp(offset, std::ios::beg); char keystroke; infile.put(keystroke); clear_buffer(); } } clear_buffer(); }while(advanced == 'Y' || advanced == 'y'); return 0; }
Code:abcdTfghijklmnoXqrstuvwxyz
thanh huynh nhưng sao dài thế ! có thể đơn giản chút được không huynh
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 :
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:
void clear_buffer(){ }
Dòng này :C++ Code:
bool open_file(std::fstream& in_out){ std::string filename; in_out.open(filename.c_str(), std::ios::in | std::ios::out); if(in_out.fail()){ return false; } return true; }
seekg tức là seek-get, offset là vị trí đọc vào, ios::beg là ở vị trí đầu tiên "begin".C++ Code:
infile.seekg(offset, std::ios::beg);
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 :
Nếu có thì keystroke là kí tự mới mà cậu đưa vào.C++ Code:
Đâ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!
@ 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 !@ RR , bỏ bớt std:: đi cho code dễ đọc .
Đã được chỉnh sửa lần cuối bởi rox_rook : 12-04-2008 lúc 11:55 AM.
đệ 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