Как указать диапазон поиска строк и ключевых слов в файле
Хочу написать программу, которая бы искала в файле текст по 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 шт):
Условие: 1)диапазон поиска строк(например 1000-1500) требует решения задачи поиска символа \n(конец строки) в файле (см. управляющие символы). В C, да и C++, соответственно, есть возможность указания абсолютной позиции каретки (указателя с которого идёт чтение), но чтобы её указать, нужно знать куда её указать, а для этого необходимо знать точные позиции.
К поиску символов \n в файле:
Можно перебирать файл посимвольно с самого начала и считать количество для левой границы поиска, в вашем примере это 1000, после чего, зная диапазон, можно вычислить размер, то есть 1500 - 1000 = 500, и осуществлять поиск пока не будет встречен 500 символ
\n;Можно считывать файл построчно - пропускать строки, пока не будет достигнута левая граница диапазона, после чего, также зная размер диапазона продолжать читать, пока не будет считана последняя строка в этом диапазоне.
Таким образом можно будет получать строки и понимать, входят они в диапазон или нет.
А для того, чтобы найти абсолютную позицию в файле, достаточно знать количество символов в каждой строке и помнить суммарную длину строк (к примеру переменная globalOffset).
Что касается поиска ключевых слов, то для этого нужна строка (см. выше способы получения), в которой будет идти поиск подстроки и сама подстрока. Обычно подобные функции/методы возвращают позицию начала подстроки в строке (допустим переменная substringPosition), что очень хорошо подходит для решения задачи: поиск по выделенным словам, и дальше будет выводить offset. Если найдено необходимое слово в строке, достаточно сложить эти позиции, то есть будет что-то подобное: offset = globalOffset + substringPosition).
Необходимо помнить, что у файла конец, за который нельзя выходить, а также, что в C/C++ при работе с файлами программа считает, что достигла конца файла, только после того, как была произведена попытка чтения.