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ố 19 kết quả

Đề tài: Các thao tác trên file dành cho newbie trong lập trình C++

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

    Mặc định Các thao tác trên file dành cho newbie trong lập trình C++

    Trong C++ thì ta có 3 loại File stream cơ bản sau :
    ifstream : Dùng cho file nhập vào. Loại này chỉ có thể được dùng để đọc dữ liệu vào file vào bộ nhớ mà thôi.
    ofstream : Dùng cho file xuất ra. Loại này thì có thể dùng để tạo ra files và chép dữ liệu vào chúng.
    fstream : Đây là kênh file.(File stream). Loại này thì có thể vừa tạo file, vừa ghi dữ liệu vào file và đọc dữ dữ liệu từ file vào luôn.

    I.Cách sử dụng fstream :

    Để định nghĩa 1 đối tượng file ta dùng cú pháp sau :
    PHP Code:
    fstream dataFile 
    Ở đây dataFile chỉ là tên do người dùng đặt mà thôi.
    Để mở 1 file ta dùng cú pháp sau :
    PHP Code:
     dataFile.open("info.txt"ios::out); 
    Ở đây hàm open đòi hỏi 2 đối số : đối thứ nhất là 1 chuỗi tên chứa tên file. Đối thứ 2 là 1 flag của file và cái này cho ta biết chế độ nào mà chúng ta dùng để mở file. Ở ví dụ trên thì tên file là info.txt còn flag file ở đây là ios::out. Cái này nó nói cho C++ biết chúng ta mở file ở chế độ xuất ra.
    Chế độ xuất ra cho phép dữ liệu có thể được ghi vào file.
    PHP Code:
     datafile.open("info.txt"ios::in); 
    Còn ở ví dụ này thì tức là ta đang mở file ở chế độ nhập vào, tức là cho phép dữ liệu được đọc vào từ file.
    Chúng ta có 1 số chế độ cơ bản sau đây :
    ios::app Chế độ gắn vào. Nếu file đã được tạo thì nội dung của nó sẽ được gắn vào tận cùng của file. Theo mặc định thì đối với chế độ này thì nếu file chưa được tạo nó sẽ tạo ra 1 file mới.
    ios::ateNếu file đã được tạo, thì chương trình sẽ chạy tới trực tiếp chỗ cuối cùng của file. Xuất ra có thể là được ghi ra bất kì chỗ nào trong file.
    ios::binaryChế độ nhị phân. Khi mà file được mở ra ở chế độ này thì dữ liệu sẽ được đọc hay ghi từ 1 định dạng nguyên thủy nhị phân.
    ios::truncNếu file đã được tạo thì nội dung của nó sẽ bị xóa đi.
    Chúng ta còn có thể sử dụng những chế độ trên chung với nhau và chúng sẽ được kết nối với nhau bằng toán tử |. Ví dụ
    PHP Code:
    dataFile.open("info.txt"ios::in ios::out); 
    Dòng lệnh trên cho phép ta mở file info.txt ở cả 2 chế độ xuất và nhập.
    Chú ý :
    Khi dùng riêng lẻ thì ios::out sẽ xóa nội dung của file nếu file đã được tạo sẵn. Tuy nhiên nếu dùng chung với ios::in, thì nội dung file cũ sẽ được giữ lại. Và nếu file chưa được tạo, nó sẽ tạo ra 1 file mới cho chúng ta luôn.
    Bây h là 1 ví dụ hoàn chỉnh :
    program 1
    PHP Code:
    // This program uses an fstream object to write data to a file.
    #include <iostream>
    #include <fstream>
    using namespace std;

    int main()
    {
       
    fstream dataFile;

       
    cout << "Opening file...\n";
       
    dataFile.open("demofile.txt"ios::out);   // Mở file để ghi vào
       
    cout << "Now writing data to the file.\n";
       
    dataFile << "Jones\n";                     // Ghi dòng thứ 1
       
    dataFile << "Smith\n";                     // Ghi dòng thứ 2
       
    dataFile << "Willis\n";                    // Ghi dòng thứ 3
       
    dataFile << "Davis\n";                   // Ghi dòng thứ 4
       
    dataFile.close();                          // Đóng file
       
    cout << "Done.\n";
       return 
    0;

    Program Output
    Opening file...
    Now writing data to the file.
    Done.
    File Output
    Jones
    Smith
    Willis
    Davis
    Bây h là 1 ví dụ khác, chỉnh sữa lại ví dụ trên 1 tí. Và chúng ta sẽ thêm vào chế độ ios::app. Chúng ta sẽ mở file ra ghi vào 2 tên sau đó đóng lại rồi lại mở ra ghi vào tiếp thêm 2 tên nữa.
    program 2
    PHP Code:
    // This program writes data to a file, closes the file,
    // then reopens the file and appends more data.
    #include <iostream>
    #include <fstream>
    using namespace std;

    int main()
    {
       
    ofstream dataFile;
          
       
    cout << "Opening file...\n";
       
    //Mở file ở chế độ xuất
       
    dataFile.open("demofile.txt"ios::out);
       
    cout << "Now writing data to the file.\n";
       
    dataFile << "Jones\n";                     // Ghi dòng thứ 1
       
    dataFile << "Smith\n";                     // Ghi dòng thứ 2
       
    cout << "Now closing the file.\n";
       
    dataFile.close();                          // Đóng file

       
    cout << "Opening the file again...\n";
       
    // Mở file ở chế độ gắn vào.
       
    dataFile.open("demofile.txt"ios::out ios::app);
       
    cout << "Writing more data to the file.\n";
       
    dataFile << "Willis\n";                    // Ghi dòng thứ 3
       
    dataFile << "Davis\n";                     //Ghi dòng thứ 4
       
    cout << "Now closing the file.\n";
       
    dataFile.close();                          // Đóng file

       
    cout << "Done.\n";
       return 
    0;


    Output File

    Jones
    Smith
    Willis
    Davis
    Ở ví dụ 2 này ta có thể hìng dung như sau :
    Code:
    J O N E S \n S M I T H  H \n <EOF>
    Khi file được đóng lại thì kí tự end-of-file sẽ được tự động ghi vào. Khi file lại được mở ra thì dữ liệu mới lại được gắn vào chỗ end-of-file đó.
    Code:
    J O N E S \n S M I T H  H \n W I L L I S \n D A V I S \n <EOF>
    Chú ý : nếu chúng ta thử bỏ thằng ios::out đứng 1 mình mà không có ios::app thì lần thứ 2 mở file là nội dung đầu sẽ bị xóa hết ( tức là 2 cái tên John và Smith sẽ bị xóa ) Và lần thứ 2 mở ra ghi lại thì cuối cùng ta chỉ còn 2 tên là Willis and Davis.

    Chúng ta đã thấy mặc dù 2 thằng ifstream và ofstream chỉ giới hạn 1 cái được nhập vào và 1 cái xuất ra nhưng nếu sử dụng với những chế độ ios:: khác nhau thì ta có thể vừa xuất vừa nhập như thường.

    II.Kiểm tra file có tồn tại hay không trước khi mở :
    Đôi khi chúng ta sẽ cần quyết định xem file có tồn tại trước khi chúng ta mở nó ra hay không và sau đây là 1 ví dụ.
    PHP Code:
            fstream dataFile;
        
    dataFile.open("value.txt"ios::in);
        if(
    dataFile.fail())
        {
                    
    //Nếu file không tồn tại, thì tạo ra 1 file mới
            
    dataFile.open("value.txt"ios::out);
            
    //...
        
    }
            else
            {
                    
    dataFile.close();
            } 
    III.Định dạng file xuất ra :

    program 3
    PHP Code:
    // This program uses the setprecision and fixed
    // manipulators to format file output.
    #include <iostream>
    #include <iomanip>
    #include <fstream>
    using namespace std;

    int main()
    {
       
    fstream dataFile;
       
    double num 17.816392;

       
    dataFile.open("numfile.txt"ios::out);  

       
    dataFile << fixed;            // Định dạng fixed-point 
       
    dataFile << num << endl;      //Xuất ra num

       
    dataFile << setprecision(4);  // Định dạng 4 phần thập phân sau dấu .
       
    dataFile << num << endl;      //Xuất ra num

       
    dataFile << setprecision(3);  // Định dạng 3 phần thập phân sau dấu .
       
    dataFile << num << endl;      // Xuất ra num

       
    dataFile << setprecision(2);  // 2 phần
       
    dataFile << num << endl;      // xuất ra

       
    dataFile << setprecision(1);  // 1 phần 
       
    dataFile << num << endl;      // xuất ra

       
    cout << "Done.\n";
       
    dataFile.close();             // Đóng file
       
    return 0;

    Output
    17.816392
    17.8164
    17.816
    17.82
    17.8
    program 4
    PHP Code:
    // This program writes three rows of numbers to a file.
    #include <iostream>
    #include <fstream>
    #include <iomanip>
    using namespace std;

    int main()
    {
       const 
    int ROWS 3;   //Dòng 
       
    const int COLS 3;   //Cột
       
    int nums[ROWS][COLS] = { 28975837,
                                
    3471623,
                                
    390345612 };
       
    fstream outFile("table.txt"ios::out);   

       
    //Ghi dữ liệu ra với khoảng cách là 8
       
    for (int row 0row ROWSrow++)
       {
          for (
    int col 0col COLScol++)
          {
             
    outFile << setw(8) << nums[row][col];
          }
          
    outFile << endl;
       }
       
    outFile.close();
       
    cout << "Done.\n";
       return 
    0;

    IV.Cách truyền 1 file name vào hàm :
    Chúng ta khi làm việc với những chương trình thực sự thì đôi khi chúng ta cần phải truyền 1 tên file vào hàm nào đó để tiện cho việc quản lý, nhưng khi truyền phải lưu ý là luôn luôn truyền bằng tham chiếu..

    program 5
    PHP Code:
    #include <iostream>
    #include <fstream>
    #include <string>

    using namespace std;
    bool OpenFile(fstream &filechar *name);
    void ShowContents(fstream &file);

    int main()
    {
        
    fstream dataFile;
        if(!
    OpenFile(dataFile"demo.txt"))
        {
            
    cout << "Error !" << endl;
            return 
    0;
        }
        
    cout << "Successfully.\n";
        
    ShowContents(dataFile);
        
    dataFile.close();
        
        return 
    0;
    }

    bool OpenFile(fstream &filechar *name)
    {
        
    file.open(nameios::in);
        if(
    file.fail())
            return 
    false;
        else
            return 
    true;
    }

    void ShowContents(fstream &file)
    {
        
    string line;
        while(
    getline(fileline)){
            
    cout << line << endl;
        }

    Nội dung file
    wow
    ohlalal 32131
    hehe
    hoho

    Output

    Successfully.
    wow
    ohlalal 32131
    hehe
    hoho
    Press any key to continue . . .
    V.Dùng hàm thành viên để đọc và ghi file :
    Khoảng trắng (Whitespace) là 1 kí tự mà nó là 1 phần của dữ liệu, vấn đề sẽ nảy sinh khi ta đoc vào bằng toán tử >>. Bởi vì toán tử >> nó xem khoảng trắng như 1 kí tự kết thúc (delimiter), vì thế nó sẽ không đọc chúng vào. Xem ví dụ sau :
    program 6
    PHP Code:
    // This program demonstrates how the >> operator should not
    // be used to read data that contains whitespace characters
    // from a file.
    #include <iostream>
    #include <fstream>
    using namespace std;

    int main()
    {
       const 
    int SIZE 81;  // Size của mãng input
       
    char input[SIZE];     // Mãng lưu input
       
    fstream nameFile;     

       
    //Mở file ở chế độ đọc
       
    nameFile.open("murphy.txt"ios::in);
       if (!
    nameFile)
       {
          
    cout << "ERROR: Cannot open file.\n";
          return 
    0;
       }

       
    //Đọc nội dung file.
       
    while (nameFile >> input)
       {
          
    cout << input;
       }
       
       
    nameFile.close();
       return 
    0;


    Nội dung file

    Jayne John
    47 Circle street
    CA 93065

    Output

    JayneJohn47Circle streetCA93065
    Chúng ta sẽ dùng hàm getline để xử lý những trường hợp như vậy.
    program 7
    PHP Code:
    // This program uses the file stream object's getline member
    // function to read a line of data  from the file.
    #include <iostream>
    #include <fstream>
    using namespace std;

    int main()
    {
       const 
    int SIZE 81;  
       
    char input[SIZE];     
       
    fstream nameFile;   

      
       
    nameFile.open("murphy.txt"ios::in);
       if (!
    nameFile)
       {
          
    cout << "ERROR: Cannot open file.\n";
          return 
    0;
       }

       
       
    nameFile.getline(inputSIZE);  //Dùng kí tự mặc định \n như kí tự kết thúc.
       
    while (!nameFile.eof())
       {
          
    cout << input << endl;
          
    nameFile.getline(inputSIZE);  //Chỗ này cũng vậy.
       
    }
       
       
       
    nameFile.close();
       return 
    0;


    Output

    Jayne John
    47 Circle street
    CA 93065
    Hoặc nếu không thích dùng kí tự mặc định '\n' của hàm getline() thì ta có thể dùng 1 kí tự bất kì khác như sau ví dụ :
    program 8
    PHP Code:
    // This file demonstrates the getline function with a user-
    // specified delimiter.
    #include <iostream>
    #include <fstream>
    using namespace std;

    int main()
    {
       const 
    int SIZE 81;  
       
    char input[SIZE];     
       
       
       
    fstream dataFile("names2.txt"ios::in);

       
    // Bây h dùng kí tự $ là kí tự kết thúc.
       
    dataFile.getline(inputSIZE'$');
       while (!
    dataFile.eof())
       {
          
    cout << input << endl;
          
    dataFile.getline(inputSIZE'$');
       }
       
       
       
    dataFile.close();
       return 
    0;


    Nội dung file

    JayneJohn\n$47Circle street\n$CA93065\n$

    Output

    Jayne John
    47 Circle street
    CA 93065
    (còn tiếp)

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

    Phần II..

    I.Hàm get() :
    Hàm get()là 1 hàm rất hữu dụng trong việc thao tác với file. Ví dụ :
    PHP Code:
    inFile.get(ch); 
    Trong ví dụ trên thì ch là 1 biến kiểu char. Một kí tự sẽ được đọc vào từ file và lưu vào ch. Chương trình sau sẽ là 1 demo cho cách dùng get.
    program 1
    PHP Code:
    // This program asks the user for a file name. The file is
    // opened and its contents are displayed on the screen.
    #include <iostream>
    #include <fstream>
    using namespace std;

    int main()
    {
       const 
    int SIZE 51;  // Array size for file name
       
    char fileName[SIZE];  // To hold the file name
       
    char ch;              // To hold a character
       
    fstream file;         // File stream object

       // Get the file name
       
    cout << "Enter a file name: ";
       
    cin >> fileName;
       
       
    // Open the file.
       
    file.open(fileNameios::in);
       if (!
    file)
       {
          
    cout << fileName << " could not be opened.\n";
          return 
    0;
       }
       
       
    // Get each character from the file and display them.
       
    file.get(ch);
       while (!
    file.eof())
       {
          
    cout << ch;
          
    file.get(ch);
       }
       
       
    // Close the file.
       
    file.close();
       return 
    0;

    Chương trình trên sẽ xuất ra nội dung của bất kì file như thế nào. Hàm get() sẽ đọc luôn những kí tự trắng vì thế nội dung file sẽ y chang như nó xuất hiện trong file.

    II.Hàm put()
    Hàm get sẽ ghi 1 kí tự vào file. Ví dụ :
    PHP Code:
     outFile.put(ch); 
    Trong ví dụ trên thì biến ch là kiểu char.
    Ví dụ về cách dùng put()
    program 2
    PHP Code:
    // This program demonstrates the put member function.
    #include <iostream>
    #include <fstream>
    using namespace std;

    int main()
    {
       
    char ch;  // To hold a character

       // Open the file for output.
       
    fstream dataFile("sentence.txt"ios::out);

       
    cout << "Type a sentence and be sure to end it with a ";
       
    cout << "period.\n";

       
    // Get a sentence from the user one character at a time
       // and write each character to the file.
       
    cin.get(ch);
       while (
    ch != '.')
       {
          
    dataFile.put(ch);
          
    cin.get(ch);
       }
       
    dataFile.put(ch); // Write the period.

       // Close the file.
       
    dataFile.close();
       return 
    0;

    III. Các xử lý với nhiều file :
    program 3
    PHP Code:
    // This program demonstrates reading from one file and writing
    // to a second file.
    #include <iostream>
    #include <fstream>
    #include <cctype> // Needed for the toupper function.
    using namespace std;

    int main()
    {
       const 
    int SIZE 51;  // Array size for file name
       
    char fileName[SIZE];  // To hold the file name
       
    char ch;              // To hold a character
       
    ifstream inFile;      // Input file
       
       // Open a file for output.
       
    ofstream outFile("out.txt");

       
    // Get the input file name.
       
    cout << "Enter a file name: ";
       
    cin >> fileName;
       
       
    // Open the file for input.
       
    inFile.open(fileName);
       if (!
    inFile)
       {
          
    cout << "Cannot open " << fileName << endl;
          return 
    0;
       }
       
       
    // Process the files.
       
    inFile.get(ch);              // Get a char from file 1
       
    while (!inFile.eof())        // Test for end of file
       
    {
          
    outFile.put(toupper(ch)); // Write uppercase char to file 2
          
    inFile.get(ch);           // Get another char from file 1
       
    }
       
       
    // Close the files.
       
    inFile.close();
       
    outFile.close();
       
    cout << "File conversion done.\n";
       return 
    0;


    VI.File nhị phân :

    Định nghĩa : File nhị phân là file chứa nội dung không nhất thiết phải là ASCII text.
    Tất cả những file từ đầu tới h chúng ta thao tác đều là tẽt files. Có nghĩa là dữ liệu trong những file này đều đã được định dạng dưới mã ASCII. Thậm chí là số đi chăng nữa khi nó được lưu trong file với toán tử << thì nó đã đc ngầm định chuyển về dạng text. Ví dụ :
    PHP Code:
    ofstream file("num.dat");
    short x 1297;
    file << x
    Dòng lệnh cuối cùng của ví dụ trên sẽ ghi nội dung của x vào file. Và chúng được lưu vào ở dạng kí tự '1', '2', '9', '7'.
    Thực sự là con số 1297 không hề được lưu trong bộ nhớ. Nó đã được định dạng thành 1 số nhị phân, và chiếm 2 byte trong bộ nhớ máy tính.
    Vì x kiểu short nó sẽ được lưu như sau :
    Code:
     00000101 | 00010001
    Và đây chính là dữ liệu nguyên thuỷ được lưu trong bộ nhớ.
    Và để làm được như vậy chúng ta sẽ có cú pháp như sau :
    PHP Code:
    file.open("stuff.dat"ios::out ios::binary); 
    Ghi chú : mặc định của complier thì file sẽ được mở ở định dạng text.
    V. Hàm write và read :
    1.Write
    -Hàm write dùng để ghi 1 file stream ở định dạng nhị nhận. Dạng tổng quát của hàm write như sau :
    PHP Code:
    fileObject.write(addresssize); 
    Ở đây chúng ta có những lưu ý sau :
    -fileObject là tên của đối tượng file stream.
    -address là địa chỉ đầu tiên của 1 vùng nhớ được ghi vào file. Đối số này có thể là địa chỉ của 1 kí tự hoặc là con trỏ tới kiểu char.
    -size là số lượng byte của vùng nhớ mà nó được write. Đối số này bắt buộc phải là kiểu integer( số nguyên dương )
    Chúng ta xét ví dụ sau :
    PHP Code:
     char letter 'A';
    file.write(&lettersizeof(letter)); 
    -Đối thứ nhất ở đây là địa chỉ của biến letter. Và đối này sẽ nói cho hàm write biết rằng dữ liệu được ghi vào file ở đâu trong vùng nhớ.
    -Đối thứ 2 sẽ là kíck thước của biến letter, và đối này sẽ nói cho hàm write biết số lượng byte của dữ liệu sẽ ghi vào file. Bởi vì dữ sẽ được lưu khác nhau trên tuỳ hệ thống khác nhau, nên cách tốt nhất là chúng ta dùng toán tử sizeof để quyết định số bytes được ghi. Và sau khi hàm này được thực hiện, nội dung của biến letter sẽ được khi vào file nhị phân của đối tượng "file"đó.

    Chúng ta xem tiếp 1 ví dụ sau :
    PHP Code:
     char data[] = {'A''B''C''D'};
    file.write(datasizeof(data)); 
    Trong ví dụ này thì đối thứ 1 là tên của mãng (data). Vì khi ta truyền tham số là tên của mãng thì tức là ta đã truyền con trỏ trỏ tới vị trí đầu tiên của mãng. Đối thứ 2 cũng có ý nghĩa tượng tự như ví dụ 1. Và sau khi gặp này thực hiện thì nội dung của mãng sẽ được ghi vào file nhị phân tương ứng với đối tượng file.
    2.Read:
    Hàm read thì sẽ dùng đọc vào số dữ liệu nhị phân từ file vào bộ nhớ máy tính. Dạng tổng quát là :
    fileObject.read(address, size);
    -Ở đây fileObject là tên của đối tượng file stream.
    -address là địa chỉ đầu tiên mà vùng nhớ mà dữ liệu được đọc vào được lưu. Và đối này có thể là địa chỉ của 1 kí tự hay 1 con trỏ tới kiểu char.
    -size cũng là số lượng byte trong bộ nhớ được đọc vào từ file. Và đối này bắt buộc cũng phải là số kiểu integer ( nguyên dương )
    .
    Tương tự hàm read ta cũng có 2 ví dụ sau :
    PHP Code:
     char letter;
    file.read(&lettersizeof(letter)); 
    Và :
    PHP Code:
    char data[4];
    file.read(datasizeof(data)); 
    Chương trình sau sẽ minh hoạ cách sử dụng 2 hàm read and write :
    PHP Code:
    [B]program 4[/B]
    // This program uses the write and read functions.
    #include <iostream>
    #include <fstream>
    using namespace std;

    int main()
    {
       const 
    int SIZE 4;
       
    char data[SIZE] = {'A''B''C''D'};
       
    fstream file;

       
    // Open the file for output in binary mode.
       
    file.open("test.dat"ios::out ios::binary);

       
    // Write the contents of the array to the file.
       
    cout << "Writing the characters to the file.\n";
       
    file.write(datasizeof(data));

       
    // Close the file.
       
    file.close();

       
    // Open the file for input in binary mode.
       
    file.open("test.dat"ios::in ios::binary);

       
    // Read the contents of the file into the array.
       
    cout << "Now reading the data back into memory.\n";
       
    file.read(datasizeof(data));

       
    // Display the contents of the array.
       
    for (int count 0count SIZEcount++)
          
    cout << data[count] << " ";
       
    cout << endl;

       
    // Close the file.
       
    file.close();
       return 
    0;

    Nếu chúng ta muốn ghi các kiểu khác vào file nhị phân thì ta phải dùng cú pháp có 1 tí đặt biệt sau đây.
    PHP Code:
     reinterpret_cast<dataType>(value
    Ở cú pháp trên thì dataType sẽ là kiểu dữ liệu mà chúng ta muốn ép về, và value sẽ là giá trị mà chúng ta muốn ép.
    Ví dụ :
    PHP Code:
    int x 65;
    file.write(reinterpret_cast<char *>(&x), sizeof(x)); 
    Đối với mãng thì :
    PHP Code:
    const int SIZE 10;
    int numbers[SIZE] = {1,2,3,4,5,6,7,8,9,10};
    file.write(reinterpret_cast<charr *>(numbers), sizeof(numbers)); 
    program 5
    PHP Code:
    // This program uses the write and read functions.
    #include <iostream>
    #include <fstream>
    using namespace std;

    int main()
    {
       const 
    int SIZE 10;
       
    fstream file;
       
    int numbers[SIZE] = {1,  2,  3,  4,  56,  7,  8,  9,  10};

       
    // Open the file for output in binary mode.
       
    file.open("numbers.dat"ios::out ios::binary);

       
    // Write the contents of the array to the file.
       
    cout << "Writing the data to the file.\n";
       
    file.write(reinterpret_cast<char *>(numbers), sizeof(numbers));

       
    // Close the file.
       
    file.close();

       
    // Open the file for input in binary mode.
       
    file.open("numbers.dat"ios::in ios::binary);

       
    // Read the contents of the file into the array.
       
    cout << "Now reading the data back into memory.\n";
       
    file.read(reinterpret_cast<char *>(numbers), sizeof(numbers));

       
    // Display the contents of the array.
       
    for (int count 0count SIZEcount++)
          
    cout << numbers[count] << " ";
       
    cout << endl;

       
    // Close the file.
       
    file.close();
       return 
    0;

    Còn tiếp ....

  3. #3
    Ngày gia nhập
    07 2007
    Nơi ở
    Hồ Chí Minh
    Bài viết
    66

    fstream,
    Bạn có thể post lun 1 bài nữa về truy xuất file text dạng UNICODE.
    Mình làm việc với file UNICODE có vẻ rất khó khăn.
    Thèm khát con gái !!
    ......................

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

    sao diễn đàn không tạo thêm tab thank nhỉ

  5. #5
    Ngày gia nhập
    11 2007
    Bài viết
    1

    thanks a lot.

  6. #6
    Ngày gia nhập
    11 2006
    Bài viết
    75

    Mặc định Các thao tác trên file dành cho newbie trong lập trình C++

    Code:
    fstream,
    Bạn có thể post lun 1 bài nữa về truy xuất file text dạng UNICODE.
    Mình làm việc với file UNICODE có vẻ rất khó khăn.
    Bác dùng encoding form gì (UTF8, UTF16 LE/BE, UTF32 LE/BE) ? Thông thường nên dùng UTF-8 để đảm bảo cross platform (tránh đc cái vụ byte order), đồng thời tương thích với ansi (nên bác có thể dùng với fstream).

    Nếu cần encoding form khác, bác có thể dùng GNU libiconv, IBM's ICU ... để convert.

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

    Bác dùng encoding form gì (UTF8, UTF16 LE/BE, UTF32 LE/BE) ? Thông thường nên dùng UTF-8 để đảm bảo cross platform (tránh đc cái vụ byte order), đồng thời tương thích với ansi (nên bác có thể dùng với fstream).

    Nếu cần encoding form khác, bác có thể dùng GNU libiconv, IBM's ICU ... để convert.
    - Chẳng là em cũng chẳng rành sự khác biệt giữa mấy thằng này, theo em biết thì thằng Boost-regex nó cũng có thể thao tác với string rất good. Hoặc dùng locale không biết có đúng không ?
    - Tiện thể nếu được bác có thể giải thích sơ sơ cho em vài cái bác nêu ra ở trên được không ạ T_T. hay bác cho em cái tên để em google tìm hiểu cũng được. Thanks bác nhiều T_T

  8. #8
    Ngày gia nhập
    11 2006
    Bài viết
    75


    Boost.Regex dùng IBM's ICU để đảm bảo full Unicode Support (xem trong documentation của nó) mà bác. Locale chỉ cần nếu bác quan tâm đến Internationalization (Java dùng ICU để xử lý việc này).

    Links:

    http://www.unicode.org/standard/standard.html
    (lastest: 5.1)

    http://www.icu-project.org (IBM's ICU)

    Example (UTF8 - dùng FF, IE, gEdit, Notepad... để check lại nếu bác thích):


    Code:
    #include <iostream>
    #include <fstream>
    #include <iterator>
    #include <string>
    #include <cstdlib>
    
    using std::istreambuf_iterator;
    using std::ifstream;
    using std::ofstream;
    using std::string;
    using std::cout;
    using std::endl;
    
    int main 
    (
        int argc, 
        char* argv[]
    )
    {
        /* Writting to file */
        ofstream utf8Txt ("utf8.txt");
        ofstream utf8Htm ("utf8.htm");
        
        string utf8TxtContent (
            "C\341\273\231ng h\303\262a XHCN Vi\341\273\207t Nam\n"
            "\304\220\341\273\231c l\341\272\255p - T\341\273\261 do - H\341\272\241nh ph\303\272c"
        );
        string utf8HtmContent (
            "<html>"
            "<head>"
            "   <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />"
            "   <title>Vietnamese Slogan</title>"
            "</head>"
            "<body>"
            "   <p>"
            "   C\341\273\231ng h\303\262a XHCN Vi\341\273\207t Nam<br />"
            "   \304\220\341\273\231c l\341\272\255p - T\341\273\261 do - H\341\272\241nh ph\303\272c"
            "   </p>"
            "</body>"
            "</html>"
        );
    
        utf8Txt << utf8TxtContent << endl;
        utf8Htm << utf8HtmContent << endl;
        
        /* Reading from file */
        ifstream inputFile ("utf8.txt");
        istreambuf_iterator<string::value_type> inputBufferBegin (inputFile);
        istreambuf_iterator<string::value_type> inputBufferEnd;
        
        string inputData (
            inputBufferBegin, 
            inputBufferEnd
        );
        
        cout << inputData << endl;
        cout << "Done" << endl;
        return EXIT_SUCCESS;
    }
    
    Our dreams are young and we both know they take us where we want to go...

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

    Thanks bác cplusplus ! Em phải enjoy 2 cái link của bác mới được T_T !

  10. #10
    Ngày gia nhập
    10 2007
    Bài viết
    10

    @ilovecplusplus:

    làm sao bạn có thể chuyển 1 chuỗi sang dạng mà bạn dùng trong đoạn code trên? :

    "C\341\273\231ng h\303\262a XHCN Vi\341\273\207t Nam\n"
    "\304\220\341\273\231c l\341\272\255p - T\341\273\261 do - H\341\272\241nh ph\303\272c"

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

  1. Hàm trong C Biểu Diễn Số Thực Trên C. Newbie, quá khó để hiểu hết.
    Gửi bởi nhlazio trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 02-12-2013, 10:10 PM
  2. Download file ảnh từ trên web xuống trong C# như thế nào ?
    Gửi bởi bplgl trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 08-08-2013, 07:52 AM
  3. Bài tập C Thao tác trên file , vec tơ nhị phân trong lập trình C
    Gửi bởi little_b0y89 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 11-11-2010, 08:23 PM
  4. Thao tác trên File trong lập trình C++?
    Gửi bởi vhp_tt_89 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 16-10-2008, 05:39 PM
  5. Mã nguồn C | Các thao tác trên File trong lập trình C
    Gửi bởi PoPoPoPo trong diễn đàn Thủ thuật, Tutorials và Mã nguồn C/C++/C++0x
    Trả lời: 7
    Bài viết cuối: 27-09-2007, 10:35 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