Pemrosesan File CSV di C++

Pemrosesan File CSV di C++

Pemrosesan file CSV di C++ biasanya melibatkan membaca atau menulis file teks yang datanya dipisahkan dengan tanda koma (,). C++ menyediakan kemampuan untuk bekerja dengan file menggunakan library standar seperti <fstream>.

Berikut adalah langkah-langkah untuk membaca dan menulis file CSV di C++.

1. Membaca File CSV

Kode berikut menunjukkan cara membaca file CSV dan menyimpan datanya ke dalam struktur seperti vector.

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
using namespace std;

int main() {
    string namaFile = "data.csv";
    ifstream file(namaFile);

    if (!file.is_open()) {
        cerr << "Tidak dapat membuka file: " << namaFile << endl;
        return 1;
    }

    vector<vector<string>> data; // Menyimpan data CSV
    string baris;

    // Membaca baris demi baris
    while (getline(file, baris)) {
        stringstream ss(baris);
        string sel; // Untuk menyimpan sel individual
        vector<string> barisData;

        // Memisahkan elemen berdasarkan koma
        while (getline(ss, sel, ',')) {
            barisData.push_back(sel);
        }

        data.push_back(barisData);
    }

    file.close();

    // Menampilkan data yang telah dibaca
    cout << "Data dalam file CSV:\n";
    for (const auto& baris : data) {
        for (const auto& sel : baris) {
            cout << sel << "\t";
        }
        cout << endl;
    }

    return 0;
}

Penjelasan:

  • ifstream file(namaFile): Membuka file untuk dibaca.
  • getline(file, baris): Membaca satu baris data dari file.
  • stringstream: Memproses baris untuk memisahkan data menggunakan tanda koma.

2. Menulis File CSV

Kode berikut menunjukkan cara menulis data ke file CSV.

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;

int main() {
    string namaFile = "output.csv";
    ofstream file(namaFile);

    if (!file.is_open()) {
        cerr << "Tidak dapat membuka file: " << namaFile << endl;
        return 1;
    }

    // Data untuk ditulis ke file
    vector<vector<string>> data = {
        {"Nama", "Umur", "Kota"},
        {"Alice", "30", "Jakarta"},
        {"Bob", "25", "Bandung"},
        {"Charlie", "35", "Surabaya"}
    };

    // Menulis data ke file CSV
    for (const auto& baris : data) {
        for (size_t i = 0; i < baris.size(); ++i) {
            file << baris[i];
            if (i < baris.size() - 1) file << ","; // Tambahkan koma kecuali di akhir baris
        }
        file << endl; // Baris baru setelah setiap baris data
    }

    file.close();
    cout << "Data berhasil ditulis ke " << namaFile << endl;

    return 0;
}

Penjelasan:

  • ofstream file(namaFile): Membuka file untuk menulis.
  • Loop digunakan untuk menulis setiap baris data ke file, dengan elemen dipisahkan oleh koma.

3. Membaca dan Menulis Secara Bersamaan

Jika Anda perlu membaca data dari satu file CSV, memprosesnya, dan menulis hasilnya ke file lain, gabungkan kedua kode di atas. Misalnya:

#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
using namespace std;

int main() {
    // Membaca file CSV
    string inputFile = "data.csv";
    string outputFile = "output.csv";

    ifstream fileIn(inputFile);
    ofstream fileOut(outputFile);

    if (!fileIn.is_open() || !fileOut.is_open()) {
        cerr << "Tidak dapat membuka file.\n";
        return 1;
    }

    string baris;

    while (getline(fileIn, baris)) {
        stringstream ss(baris);
        string sel;
        vector<string> barisData;

        while (getline(ss, sel, ',')) {
            barisData.push_back(sel);
        }

        // Memproses data (contoh: menambahkan string "Processed")
        for (size_t i = 0; i < barisData.size(); ++i) {
            barisData[i] += "_Processed";
        }

        // Menulis data ke file output
        for (size_t i = 0; i < barisData.size(); ++i) {
            fileOut << barisData[i];
            if (i < barisData.size() - 1) fileOut << ",";
        }
        fileOut << endl;
    }

    fileIn.close();
    fileOut.close();

    cout << "Data berhasil diproses dan ditulis ke " << outputFile << endl;
    return 0;
}

Contoh File Input dan Output

Input (data.csv):

Nama,Umur,Kota
Alice,30,Jakarta
Bob,25,Bandung
Charlie,35,Surabaya

Output (output.csv):

Nama_Processed,Umur_Processed,Kota_Processed
Alice_Processed,30_Processed,Jakarta_Processed
Bob_Processed,25_Processed,Bandung_Processed
Charlie_Processed,35_Processed,Surabaya_Processed

Tips Tambahan

  1. Error Handling:
    • Selalu periksa apakah file berhasil dibuka sebelum membaca atau menulis.
  2. Delimeter Lain:
    • Untuk CSV dengan pembatas selain koma (misalnya ;), ubah parameter getline(ss, sel, ',') menjadi karakter pembatas lain.
  3. String dengan Koma:
    • Jika data Anda memiliki koma di dalam string, gunakan tanda kutip (") untuk menanganinya.

Jika Anda memiliki kebutuhan khusus terkait CSV, beri tahu saya! 😊

Leave a Reply

Your email address will not be published. Required fields are marked *