ショッパーズ

STL講座

テキストファイルを全て読み込む

iostreamを使わずにAPIベースでテキストファイルを全てを読み込みます。
改行コード '\r\n' で文字列を分割し vector に保存する。
vectorへの項目追加、全件走査、イテレータの使用方法のサンプルです。

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

#include "stdafx.h"

#include <string>
#include <vector>

using namespace std;

// SPLIT処理
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[])
{
    HANDLE  hFile;
    int     FileSize;
    char*   FileData;
    string  FileString;
    unsigned long nRead;

    vector<string> vec;

    int count = 1;

    hFile = CreateFile(
        "dameningen.csv", // CSVファイル指定
        GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0 );

    if (hFile == INVALID_HANDLE_VALUE) {
        printf("ファイルを開けませんでした。");
        return -1;
    }else{
        FileSize = GetFileSize(hFile, 0); // ファイルサイズを取得
        FileData = (char* )VirtualAlloc(NULL, FileSize,
                    MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
        ReadFile(hFile, FileData, FileSize, &nRead, 0);
        FileString = FileData; // stringに変換
        CloseHandle(hFile);
    }

    vec = Split(FileString, "\r\n"); // 改行コード単位で分割

    // 行番号を付けて表示
    for(vector<string>::iterator i = vec.begin(); i != vec.end(); i++){
        printf("[%03d] %s\n", count, i->data());
        count++;
    }

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