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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2010, 21:25   #1
Dycek
 
Регистрация: 19.12.2010
Сообщений: 6
По умолчанию чтение из файла и запись в него

здравствуйте!
есть прожка на с++ билдер, расчетная, которая выдает одно значение, и есть файл rtf, следующего вида:

угол А, угол Б, длина С м, площадь S мм^2
0,0,3.34,3.45
0,0,45,89
...
45,90,567,17

необходимо в расчетной проге открыть этот файл, взять от туда каждую площадь, умножить на полученное в программе значение, и записать в этот же файл, через запятую, так же в столбик, рядом с площадью новое полученное выражение.
в книжках я нашла только простые примеры, а как сделать выбор какого-то элемента из списка и записать в уже в существующий "числовик"... такого мне не встречалось(((
если кто знает как это делать-подскажите, пожалуйста.
Dycek вне форума Ответить с цитированием
Старый 24.12.2010, 22:38   #2
Syuf
Форумчанин
 
Аватар для Syuf
 
Регистрация: 02.02.2010
Сообщений: 599
По умолчанию

Я не совсем понял зачем тут rtf-файл, попробуйте реализовать как-то так:
Код:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;


#define MNOJ 10 // Собственно, множитель


int main()
{
	fstream finout("G:\\file.rtf");
	if(!finout)
	{
		cout << "Can't open the file." << endl;
		return 1;
	}

	vector<string> result;
	string str;
	string::size_type pos;
	ostringstream strout;
	double val = 0.0;

	while(finout.good())
	{
		getline(finout, str);
		if(!finout)
			break;

		result.push_back(str);
		replace(str.begin(), str.end(), ',', ' ');

		istringstream strin(str);
		strin >> val >> val >> val >> val;
		val *= MNOJ;

		if((pos = str.find_last_of(" ")) != string::npos)
		{
			strout.str("");
			str.clear();
			strout.setf(ios::fixed);
			strout << val;
			str = strout.str();
			result.back().resize(pos + str.size() + 1);
			copy(str.begin(), str.end(), result.back().begin() + pos + 1);
		}
		replace(result.back().begin(), result.back().end(), ' ', ',');
	}
	finout.clear();

	finout.seekp(0);
	for(unsigned u = 0U; u<result.size(); u++)
	{
		finout << result[u];
		if(u != result.size()-1)
			finout << endl;
		if(!finout)
		{
			cout << "The file error was found." << endl;
			return 1;
		}
	}

	finout.close();
	if(!finout)
	{
		cout << "The file error was found." << endl;
		return 1;
	}

	return 0;
}
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Syuf вне форума Ответить с цитированием
Старый 24.12.2010, 22:44   #3
Dycek
 
Регистрация: 19.12.2010
Сообщений: 6
По умолчанию

огромное, человесеское спасибо!!!
щас буду разбираться.
коментариев бы еще... (эт канешна совсем наверна наглость)
Dycek вне форума Ответить с цитированием
Старый 25.12.2010, 21:02   #4
Dycek
 
Регистрация: 19.12.2010
Сообщений: 6
По умолчанию

извините меня, но я полный чайник в с++, и не особо разобралась((((
попробую более детально поставить задачу:

вот есть программа:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
t = Edit1->Text.ToDouble();
ln = Edit2->Text.ToDouble();
lk = Edit3->Text.ToDouble();
dl = Edit4->Text.ToDouble();
iz_t=0;
iz_t_l1=0;
l1=ln;
l2=ln;
const
double konst1 = 1.191e4;
double konst2 = 1.439e4;
while (((l2-lk)*(l1-lk)>=0) && (l1<lk)) {
iz_t_l2=konst1/(pow(l2,5))/(exp(konst2/l2/t)-1);
iz_t=iz_t+(iz_t_l2+iz_t_l1)/2*(l2-l1);
iz_t_l1=iz_t_l2;
l1=l2;
l2=l2+dl;
}
Memo1->Lines->Add("iz_t=" +FloatToStr(iz_t));
}

она выдает значение iz_t, и есть еще текстовый файл вида:

угол а,угол в,угол с,площадь s
0,0,0,6.092
0,0,20,1.4278032
0,0,40,2.4169567
0,0,60,3.12553
0,0,80,3.469352
0,0,90,3.490805
0,0,100,3.420797
0,0,120, 2.90899
0,0,140, 2.045971
0,0,160,1.056
0,0,180,6.09209
0,0,200,1.427803
0,0,220,2.4169
0,0,240,3.125539
0,0,260,3.469
0,0,270,3.49080
0,0,280,3.420797
0,0,300, 2.908
0,0,320, 2.045
0,0,340,1.05
0,0,360,6.05660995e+01
где значения углов и площади записаны в столбец, через запятую(первый столбец угол а, второй в, третий с и столбец площади). мне нужно чтобы значение iz_t, выдаваемое программой, умножалось на каждую площадь(в данном случае последний столбец), и, через запятую записывалось в столбец рядом.(углы "отдыхают", с ними делать ничего не нужно)
я в с++ вообще никак, перечитала много книжек, но там везде простые примеры чтения и записи в файл, а такого, чтобы брать из файла значение, кот стоит 4ым после запятой, и записывать его рядом...такого я не нашла(((((
вроде объяснила более понятно...
попробовала вставить тот кусок, кот мне дали, только вместо mnoj-iz_t, программа работает как и работала, но в файл не записывает. подскажите еще чуть чуть: что я сделала ни так?
извиняюсь за глупый вопрос, но хочу повториться: я, видимо, полный чайник...
Dycek вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение из файла в запись THX35 Фриланс 8 19.03.2010 22:41
чтение\запись из файла Skrip Общие вопросы C/C++ 3 23.09.2009 19:05
Запись/чтение из файла (С++) alexov Общие вопросы C/C++ 15 18.01.2009 17:35
Запись в файл и чтение из него. Swool Общие вопросы C/C++ 8 26.08.2008 16:39
Запись и чтение файла... Altera Общие вопросы Delphi 5 06.05.2008 20:22