Как разобрать файл для блокировки в C ++ - PullRequest
0 голосов
/ 20 января 2011

Я ищу элегантный способ разбить файл на блоки и для каждого блока создать новый файл, например:

оригинальный файл:

line 1
line 2
 line 3

line 4
 line 5
   line 6
line 7

результат:

first file:
line 1

second file:
line 2
 line 3

third file:
line 4
 line 5
   line 6

fourth file:
line 7

спасибо

Ответы [ 3 ]

2 голосов
/ 20 января 2011

Похоже, вы могли бы использовать этот алгоритм:

Подсчитайте количество пробелов в начале каждой строки, если оно меньше или равно количеству пробелов в предыдущей непустой строке, откройте новый файл.

Что вы пробовали до сих пор?

1 голос
/ 20 января 2011

Вы можете использовать scoped_ptr s для изменения выходного файла, когда строка ввода не начинается с пробела:

std::ifstream in("/your/input/file");
boost::scoped_ptr<std::ofstream> out(NULL)
int out_serial = 0;
std::string line;
while(std::getline(in, line))
{
    // test: first character non blank
    if(! line.empty() && (line.at(0) != ' ' && line.at(0) != '\t'))
    {
        std::ostringstream new_output_file;
        new_output_file << "/your/output/file/prefix_" << out_serial++;
        out.reset(new std::ofstream(new_output_file.str()));
    }
    if(out.get() != NULL) (*out) << line << std::endl;
}
0 голосов
/ 20 января 2011

Если ваш код не предназначен должным образом или ваши блоки основаны только на скобках, а не на пробелах, вы можете использовать стек (STL).Нажмите на открывающую скобку и нажмите на закрывающую скобку.Открывайте новый файл каждый раз, когда стек становится пустым

...