読者です 読者をやめる 読者になる 読者になる

はわわーっ

はわわわわっ

[cpp] ファイルを読み込む - その3

cpp

連続した行をひとつのパラグラフとして読み込むようにしてみた。とりあえず動いてるらしい。

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


class Paragraph
{
public:
    void read_line(std::string str);
    void write_line(void);
    void clear_line(void);
    bool is_empty_line(void);

private:
    std::vector<std::string> line;
};

void Paragraph::read_line(std::string str)
{
    line.push_back(str);
}

void Paragraph::write_line(void)
{
    std::vector<std::string>::iterator it = line.begin();
    while (it != line.end()) {
        std::cout << *it << std::endl;
        it++;
    }
}

void Paragraph::clear_line(void)
{
    line.clear();
}

bool Paragraph::is_empty_line(void)
{
    return line.empty();
}


class Document
{
public:
    void read_paragraph(const char* file);
    void write_paragraph(void);

private:
    std::vector<Paragraph> paragraph;
};

void Document::read_paragraph(const char* file)
{
    std::ifstream ifs(file);
    Paragraph paragraph_buf;
    std::string line_buf = "", line_buf_prev = "";

    while (ifs && getline(ifs, line_buf)) {
        if (!line_buf.empty()) {
            paragraph_buf.read_line(line_buf);
        }
        else if (!line_buf_prev.empty()) {
            paragraph.push_back(paragraph_buf);
            paragraph_buf.clear_line();
        }
        line_buf_prev = line_buf;
    }
    if (!paragraph_buf.is_empty_line()) {
        paragraph.push_back(paragraph_buf);
    }
}

void Document::write_paragraph(void)
{
    std::vector<Paragraph>::iterator it = paragraph.begin();
    while (it != paragraph.end()) {
        (*it).write_line();
        it++;
    }
}


int main(int argc, char** argv)
{
    Document doc;

    doc.read_paragraph("test.txt");
    doc.write_paragraph();

    return 0;
}

なんかごちゃごちゃしてきたな。もっと綺麗に書くにはどうしたらいいんだろう。