ショッパーズ

STL講座

CSVファイルの内容をVector配列に取り込む

CSVファイルを読み込み、Vector配列に取り込みます。
string型の文字列の指定要素を置換する「replace」関数のサンプル。
文字列を分割してVector配列で返す「split」関数のサンプル。

// stl_test.cpp : コンソール アプリケーション用のエントリ ポイントの定義
//

#include "stdafx.h"

#include <string>
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

// << 文字列置換処理 >>
//
// str 内の sb を sa に置換
void replace(string& str, const string sb, const string sa)
{
    string::size_type n, nb = 0;
    
    while ((n = str.find(sb,nb)) != string::npos)
    {
        str.replace(n, sb.size(), sa);
        nb = n + sa.size();
    }
    
}

// << split処理 >>
//
// 文字列 src を key で分割する。
// vector型 の配列で結果が戻る。
vector<string> split( string &src, string key){
    vector<string> v;
    string str = src;

    int index = 0;
    while(index < (int)str.length()){
        int oldindex = index;
        index = str.find( key, index);
        if(index != string::npos){
            string item = str.substr(oldindex, index - oldindex);
            v.push_back(item);
        }else{
            string item = str.substr(oldindex);
            v.push_back(item);
            break;
        }
        index += key.length();
    }
    return v;

}

int main(int argc, char* argv[])
{
    string  line_string;
    string temp;
    vector<string> vec;
    char line[255];
    int count = 1;
    ifstream ifs;
    CSV_GROUP csvGrp;
    vector<CSV_GROUP> grp_data;

    ifs.open("dameningen.csv", ios::in); // 読み取り専用で開く
    
    while( !ifs.eof() ){
        ifs.getline(line, sizeof(line));
        line_string = line; // string型に変換する。
        vec = split(line_string, ",");

        if (vec.size() == 4) { // 要素数チェック

            temp = vec[0];
            replace(temp, "\"", ""); // ダブルクォーテーションを取り除く
            csvGrp.father_gid = atoi(temp.data());

            temp = vec[1];
            replace(temp, "\"", "");
            csvGrp.son_gid = atoi(temp.data());

            temp = vec[2];
            replace(temp, "\"", "");
            lstrcpy(csvGrp.group_name, temp.data());

            temp = vec[3];
            replace(temp, "\"", "");
            csvGrp.group_order = atoi(temp.data());

            printf("fid = %d, sid = %d, name = %s, grp_order = %d\n",
                    csvGrp.father_gid, csvGrp.son_gid,
                    csvGrp.group_name, csvGrp.group_order);
        }

        count++;
    }

    ifs.close();

    return 0;
}
シェルスクリプト
ajax基礎
技術リンク集 2005年版
技術リンク集 2006年版
技術リンク集 2007年版
技術リンク集 2008年版
技術リンク集 2009年版
技術リンク集 2010年版
[STL] ifstreamの使用方法
[STL] CSVファイルの内容をVector配列に取り込む
[STL] テキストファイルを全て読み込む
[WTL] WTLメモ