void main(int argc, char *argv[])
{
FILE *f = NULL;
char *obrazec = "im";
char *begin = NULL;
char c;
int len_obr = strlen(obrazec);
begin = (char*)malloc(len_obr+1);
f = fopen( argv[1], "r" );
while ( fgets(begin, len_obr+1, f ) != NULL )
{
if ( strcmp(begin, obrazec) == 0 )
{
c = (char)fgetc(f);
while ( c != '\n' && c != '\r' && c != EOF )
{
printf("%c", c);
c = (char)fgetc(f);
}
fclose(f);
return;
}
}
if (f != NULL)
fclose(f);
}
[C] работа с текстовым файлом
Например задана подстрока сhar obrazec[]={"iskat_mena"};
а в текстовом файле она находится в начале какой-то строки и нужно найти ее и вывести символы находящиеся справа от obrazca до перехода на следующую строку, помогите пожалуйста срочно надо.
она находится именно в начале строки или в любом месте строки?
Цитата: BroKeR
она находится именно в начале строки или в любом месте строки?
Да, образец всегда в начале строки.
ну так и в чем проблема?Берешь образец,вычисляешь его длинну,пусть будет l.Потом начинаешь смотреть строки,отрезаешь от строки(в которй ведется поиск)кусок равный l,в конец добавляешь '\0'(конец строки).Потом strcmp(образец,обрезанный кусок)-она возвращает 0,если совпадают.Ну и соответственно если 0,то идем по строке пока не встретим '\n'. и все.
Цитата: BroKeR
ну так и в чем проблема?Берешь образец,вычисляешь его длинну,пусть будет l.Потом начинаешь смотреть строки,отрезаешь от строки(в которй ведется поиск)кусок равный l,в конец добавляешь '\0'(конец строки).Потом strcmp(образец,обрезанный кусок)-она возвращает 0,если совпадают.Ну и соответственно если 0,то идем по строке пока не встретим '\n'. и все.
Со слова "отрезаешь от строки.....", если тебя не затруднит напиши как это будет выглядеть на Си.
ща что нибудь придумаем
Если еще не поздно, то собсна вот код. Я имя файла из командной строки беру - так привычнее.
Код:
#include <string>
#include <fstream>
#include <iostream>
int _tmain(int argc, char* argv[])
{
const std::string expressionWeAreSearchingFor("searchMe");
const int bufferSize = 1024;
char buffer[bufferSize];
std::ifstream file("1.txt");
if (!file)
{
std::cerr << "file error";
return -1;
}
file.getline(buffer, bufferSize - 1);
const std::string line(buffer);
if ( line.empty() )
{
std::cerr << "file is empty !";
return -1;
}
int pos = line.find(expressionWeAreSearchingFor); //ищем первую с начала
//int pos = line.rfind(expressionWeAreSearchingFor); // или первую с конца
if ( pos == std::string::npos )
{
std::cerr << "substring \"" << expressionWeAreSearchingFor << "\" not found in string \"" << line << "\"";
return -1;
}
pos += expressionWeAreSearchingFor.length(); //конец искомой подстроки
std::string result = line.substr(pos, line.length() - pos);
std::cout << "result is \"" << result << "\"" << std::endl;
return 0;
}
#include <fstream>
#include <iostream>
int _tmain(int argc, char* argv[])
{
const std::string expressionWeAreSearchingFor("searchMe");
const int bufferSize = 1024;
char buffer[bufferSize];
std::ifstream file("1.txt");
if (!file)
{
std::cerr << "file error";
return -1;
}
file.getline(buffer, bufferSize - 1);
const std::string line(buffer);
if ( line.empty() )
{
std::cerr << "file is empty !";
return -1;
}
int pos = line.find(expressionWeAreSearchingFor); //ищем первую с начала
//int pos = line.rfind(expressionWeAreSearchingFor); // или первую с конца
if ( pos == std::string::npos )
{
std::cerr << "substring \"" << expressionWeAreSearchingFor << "\" not found in string \"" << line << "\"";
return -1;
}
pos += expressionWeAreSearchingFor.length(); //конец искомой подстроки
std::string result = line.substr(pos, line.length() - pos);
std::cout << "result is \"" << result << "\"" << std::endl;
return 0;
}
Спасибо всем! Выручили!