Как указать диапазон поиска строк и ключевых слов в файле

Хочу написать программу, которая бы искала в файле текст по 2 условиям 1)диапозон поиска строк(например 1000-1500) 2) // RVA: -1 Offset: -1 Slot: 3 public abstract bool DGCJIKPLNMI(PhotonPlayer HAAFAPHNKAP - поиск по выделенным словам, и дальше будет выводить offset Таких поисков должно быть несколько , а так же условия должны быть прописаны в программе, а не пользователем

Накидал код

#include <iostream>
#include <string>
#include <fstream>
using namespace std;
 
int main(int argc, char* argv[])
{

cout << "Поместите в эту папку dump.cs для начала работы" << endl;
cout << "Введите что-нибудь для продолжения";
int x;
cin >> x;
char buff[50];
ifstream fin("dump.cs"); 
 
    if (!fin.is_open()) // если файл не открыт
        cout << "Файл не может быть открыт!\n"; // сообщить об этом
    else
    {
    

    }
system("pause");
return 0;
}

Но как реализовать поиск по условиям и сделать объекты , которым будут даны условия для поиска, я не знаю


Ответы (1 шт):

Автор решения: V31R

Условие: 1)диапазон поиска строк(например 1000-1500) требует решения задачи поиска символа \n(конец строки) в файле (см. управляющие символы). В C, да и C++, соответственно, есть возможность указания абсолютной позиции каретки (указателя с которого идёт чтение), но чтобы её указать, нужно знать куда её указать, а для этого необходимо знать точные позиции.

К поиску символов \n в файле:

  1. Можно перебирать файл посимвольно с самого начала и считать количество для левой границы поиска, в вашем примере это 1000, после чего, зная диапазон, можно вычислить размер, то есть 1500 - 1000 = 500, и осуществлять поиск пока не будет встречен 500 символ \n;

  2. Можно считывать файл построчно - пропускать строки, пока не будет достигнута левая граница диапазона, после чего, также зная размер диапазона продолжать читать, пока не будет считана последняя строка в этом диапазоне.

Таким образом можно будет получать строки и понимать, входят они в диапазон или нет. А для того, чтобы найти абсолютную позицию в файле, достаточно знать количество символов в каждой строке и помнить суммарную длину строк (к примеру переменная globalOffset).

Что касается поиска ключевых слов, то для этого нужна строка (см. выше способы получения), в которой будет идти поиск подстроки и сама подстрока. Обычно подобные функции/методы возвращают позицию начала подстроки в строке (допустим переменная substringPosition), что очень хорошо подходит для решения задачи: поиск по выделенным словам, и дальше будет выводить offset. Если найдено необходимое слово в строке, достаточно сложить эти позиции, то есть будет что-то подобное: offset = globalOffset + substringPosition).

Необходимо помнить, что у файла конец, за который нельзя выходить, а также, что в C/C++ при работе с файлами программа считает, что достигла конца файла, только после того, как была произведена попытка чтения.

→ Ссылка