user34568 Ответов: 1

В C++ Как выбрать строки в текстовом файле, содержащие определенное ключевое слово, и скопировать их в другой текстовый файл


Привет, у меня есть текстовый файл , который содержит около 2000 записей, я хочу только

скопируйте строки из файла в выходной файл, содержащий определенные ключевые слова, например:

Если файл имеет следующие строки:
Alabama Local Government 

Alabama Local Government 

Bibb County, Alabama Private

Bibb County, Alabama Private 

Blount County, Alabama State Government 

Blount County, Alabama State Government

Blount County, Alabama Local Government

Blount County, Alabama Local Government

Blount County, Alabama Private 

Blount County, Alabama Private 

Bullock County, Alabama State Government 

Bullock County, Alabama State Government 

Bullock County, Alabama Local Government 

Bullock County, Alabama Local Government 

Bullock County, Alabama Private

Bullock County, Alabama Private

Butler County, Alabama State Government 

Butler County, Alabama State Government 

Butler County, Alabama Local Government

Butler County, Alabama Local Government 

Butler County, Alabama Private

Butler County, Alabama Private

Calhoun County, Alabama Federal Government 

Calhoun County, Alabama Federal Government 

Calhoun County, Alabama State Government 

Я только хочу скопировать строки, которые имеют ключевое слово "Private", я не могу понять, что я должен делать? Пожалуйста помочь.

Что я уже пробовал:

Я пытался следовать за ним, но после нескольких часов работы зашел в тупик
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>

bool isWanted(const std::string & line)
{
    // any selection criteria you like
    return (line.find("Private") != std::string::npos);
}
int main() {
    std::ifstream in_file {"input.csv"};
    std::ofstream out_file {"output.csv"};
    if (!in_file.is_open()) {
        std::cerr << "Error opening input file" << std::endl;
        return 1;
    }
     if (!in_file.is_open()) {
        std::cerr << "Error opening input file" << std::endl;
        return 1;
    }
    
    std::string line{};
    int line_number {0};
    while (getline(in_file, line)) {
        if (isWanted(line))
            out_file<<line<<std::endl;
        //if (line == "")
           // out_file << std::endl;
         else
          else 
         out_file << std::endl;
    }
    std::cout << "\nCopy complete" << std::endl;
    in_file.close();
    out_file.close();
    return 0;
}

1 Ответов

Рейтинг:
2

OriginalGriff

Посмотрите на свой код:

while (getline(in_file, line)) {
    if (isWanted(line))
        out_file<<line<<std::endl;
    //if (line == "")
       // out_file << std::endl;
    else {
        ++line_number;
        out_file << std::setw(7) << std::left << line_number
                 << line << std::endl;
    }
Если строка нужна (которая не тестируется на "частный", а тестируется на "общегосударственный"), то вы добавляете ее в выходные данные:
out_file<<line<<std::endl;
Но если он не нужен, то ваш else блок также добавляет его к выходу, завернутому в другие вещи:
out_file << std::setw(7) << std::left << line_number
         << line << std::endl;

Вполне возможно, что когда вы закомментировали тест пустой строки, вы забыли его закомментировать. else блок, так что теперь он приложил себя к if выше этого?


user34568

Спасибо, что обратили на это внимание. Теперь я все исправил. Это был всего лишь случай с 1 словом, что было бы моим лучшим вариантом, если бы я хотел использовать find the multiple words и делать то же самое, когда я копирую их в файл out и игнорирую остальные

OriginalGriff

Передайте слово, которое вы хотите, в качестве второго параметра вашему методу "isWanted".