Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2010, 18:14   #1
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию чтение определенной строки из файла.

Добрый день. Вопрос заключается в :"Имеется файл с содержимым.например с описанием функции , заданием переменных:
Код:
class A{
private:
int a;
int b;
float k;
public:
char s;
int getS(float);
int setS(float);
}
и есть программа которая вводит значения, вопрос заключается в том какой функцией можно например прочитатб из всего файла строчку int getS(float) и прочитать тип переменной в кавычках?

Насколько я понимаю первым делом надо открыть файл для чтения :
Код:
ifstream input_file("D:\const.h"); //задаем название файла, который будем выводить на экран
	char name[255];
	/*считываем файл до конца*/
	while(!input_file.eof())
	{
	input_file.getline(name,sizeof(name));
	
	}
а что делать дальше?
Serjuk вне форума Ответить с цитированием
Старый 18.05.2010, 21:07   #2
ev_tea
 
Регистрация: 18.05.2010
Сообщений: 7
По умолчанию

Если по номеру строки то так:
Код:
int c;
	cin>>c;
	/*считываем файл до конца*/
	while(!input_file.eof())
	{
	input_file.getline(name,sizeof(name));
	 c--;
	 if(c==0)break;
	}
    cout<<name;
	return 0;
Иначе сравнивай полученную строку с образцом.
C++ не Ruby и даже не Python
ev_tea вне форума Ответить с цитированием
Старый 18.05.2010, 21:19   #3
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

а как сравнивать с образцом ?
ведь конкретного образца нету..может быть int getM ( float) и int getM(int)..
тут заключается в том, что прочитать строчку и если в ней встретится "(" то считывать слово - float,int,char.
Serjuk вне форума Ответить с цитированием
Старый 18.05.2010, 21:24   #4
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

Опережу немного время
задача в том что вводим значения для функции которую считаем из файла и на выходе вместо типа должно быть то значение которое вводим
например
На входе файл с функцией :
...
public :
int getM ( float);

С экрана вводим значение 1.4
на выходе получаем новый файл,в котором будет
...
public:
int getM (1.4);

а тип мы должны знать, для того чтобы сделать исключение по набранному значению
Serjuk вне форума Ответить с цитированием
Старый 18.05.2010, 21:29   #5
ev_tea
 
Регистрация: 18.05.2010
Сообщений: 7
По умолчанию

Почитай про регулярные выражения, навскидку тут
ev_tea вне форума Ответить с цитированием
Старый 18.05.2010, 21:40   #6
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

Код:
#using <system.dll>

using namespace System;
using namespace System::Text::RegularExpressions;

int main( )
{
   int words = 0;
   String^ pattern = "[a-zA-Z]*";
   Console::WriteLine( "pattern : '{0}'", pattern );
   Regex^ regex = gcnew Regex( pattern );

   String^ line = "one\ttwo three:four,five six  seven";   
   Console::WriteLine( "text : '{0}'", line );
   for( Match^ match = regex->Match( line ); 
        match->Success; match = match->NextMatch( ) ) 
   {
      if( match->Value->Length > 0 )
      {
         words++;
         Console::WriteLine( "{0}", match->Value );
      }
   }
   Console::WriteLine( "Number of Words : {0}", words );

   return 0;
}
что-то ничего не понятно...
Serjuk вне форума Ответить с цитированием
Старый 18.05.2010, 21:47   #7
ev_tea
 
Регистрация: 18.05.2010
Сообщений: 7
Хорошо

регулярные выражения помогут найти строку. А вот для замены фрагмента придется копировать строку посимвольно в другую
ev_tea вне форума Ответить с цитированием
Старый 18.05.2010, 21:50   #8
Serjuk
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 136
По умолчанию

а можешь это код прокомментировать,а то я че то не понимаю,что к чему там
Serjuk вне форума Ответить с цитированием
Старый 18.05.2010, 22:05   #9
ev_tea
 
Регистрация: 18.05.2010
Сообщений: 7
Хорошо

String^ pattern = "[a-zA-Z]*"; //шаблон строки маленькие и большие буквы латинского
Console::WriteLine( "pattern : '{0}'", pattern );
Regex^ regex = gcnew Regex( pattern ); // создание (компиляция) регулярного выражения)

String^ line = "one\ttwo three:four,five six seven"; строка для анализа
Console::WriteLine( "text : '{0}'", line );
for( Match^ match = regex->Match( line );
match->Success; match = match->NextMatch( ) ) использование объекта проверки регулярного выражения (инициализация, условие окончания, инкремент)
{
if( match->Value->Length > 0 )
{
words++;
Console::WriteLine( "{0}", match->Value );//вывод того, что удовлетворяет условию регулярного выражения
}
}
Console::WriteLine( "Number of Words : {0}", words ); вывод общего количества совпадений.
ev_tea вне форума Ответить с цитированием
Старый 18.05.2010, 22:10   #10
ev_tea
 
Регистрация: 18.05.2010
Сообщений: 7
По умолчанию

еще посмотри здесь
ev_tea вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подстановка символов при выборе определенной строки в ComboBox konsul_81 Помощь студентам 2 17.05.2010 22:57
Чтение строки из файла kroŧ Общие вопросы Delphi 4 14.05.2010 15:42
Как найти область Rect определенной строки в ListBox? Artik Компоненты Delphi 0 11.06.2009 19:16
Чтение строки limon Помощь студентам 3 08.09.2008 14:36
Чтение строки... prizrak1390 Общие вопросы Delphi 2 28.02.2008 11:18