Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/49: Рейтинг темы: голосов - 49, средняя оценка - 4.88
6 / 6 / 0
Регистрация: 19.12.2010
Сообщений: 43

Cчитывание и запись в файл

24.12.2010, 21:23. Показов 10162. Ответов 75
Метки нет (Все метки)

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

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

необходимо в расчетной проге открыть этот файл, взять от туда каждую площадь, умножить на полученное в программе значение, и записать в этот же файл, через запятую, так же в столбик, рядом с площадью новое полученное выражение.
в книжках я нашла только простые примеры, а как сделать выбор какого-то элемента из списка и записать в уже в существующий "числовик"... такого мне не встречалось(((
если кто знает как это делать-подскажите, пожалуйста. Заранее спасибо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.12.2010, 21:23
Ответы с готовыми решениями:

Cчитывание, сравнивание, поиск из нескольких форм
Здравствуйте у меня проблема целую ночь думаю не могу придумать ничего ((( У меня на первой...

Cчитывание из файла блоками по 8 байт
1.Исходный файл читается блоками по 8 байт 2.Работу с файлами осуществляться в двоичном формате в...

Записать 200 случайных чисел в файл a.txt. В файл b.txt вывести четные, а в файл c.txt нечетные
Записать 200 случайных чисел в файл a.txt. В файл b.txt вывести четные, а в файл c.txt нечетные.

75
6 / 6 / 0
Регистрация: 19.12.2010
Сообщений: 43
29.12.2010, 21:39  [ТС]
Студворк — интернет-сервис помощи студентам
Dycek, давайте сделаем по другому, вот скажем у вас есть строка 0,0,80,3.469352, что вам нужно с ней сделать? Можете визуально показать как она должна будет выглядеть после всех операций?[/QUOTE]

да да.
у меня есть программа, которая считает iz_t:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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));
}
а из строки 0,0,80,3.469352, мне необходимо взять 3.469352*iz_t и записать после суммы.
если предположить, что iz_t=0.2, то получившийся результат должен выглядеть так:
0,0,80,3.469352,0.6938704
надеюсь объяснила понятно...(а то у меня с объяснениями есть небольшие проблемы )
0
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
30.12.2010, 04:06
По теме

C++
1
2
String a = 3.4515;
float result = StrToFloat(a);
result будет равен 3,45149993896484... их(лишние цифры) можно как-нибудь убрать? Или стоит написать свою функцию которая будет парсить float из string-а?
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
30.12.2010, 04:12
C++
1
FormatFloat("0.00",x)
Добавлено через 1 минуту
C++
1
Edit->Text=FormatFloat("0.00",x);
2
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
30.12.2010, 07:05
Супер! LK я вот сделал несколько тестов и получил что FormatFloat не только обрезает по заданной маске, но еще и округляет? Потому что если
C++
1
2
3
String a = 3.4515;
float result = StrToFloat(a);
result = FormatFloat("0.0000",result);
я получу как раз что result равен 3,4515, хотя до форматирования result был равен 3,45149993896484. Это совпадение, или FormatFloat и обрезает и округляет?
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
30.12.2010, 07:35
и обрезает, и округляет, и еще кое-что
C++
1
2
3
4
double x=12345.6789;
ShowMessage(FormatFloat("0.00",x));
ShowMessage(FormatFloat("0,0.00",x));
ShowMessage(FormatFloat("0,0.000",x));
Результат
12345.68
12 345.68
12 345.679
2
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
30.12.2010, 08:03
LK сильно! Спасибо!
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
30.12.2010, 08:53
проставляя таким образом зпт. - вы можете разбивать по три группы любые значения
C++
1
FormatFloat("0,0,0,0.00",x)
2
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
30.12.2010, 08:54
Цитата Сообщение от LK Посмотреть сообщение
не могли бы вы в связи с этим черкнуть Надек8
LK обижаете! Уже скинул от вашего имени письмо. Я вам должен как минимум за советы что вы мне даете и как максимум половина вашего бана как бы моя косвенная заслуга, когда вы посоветовали мне XE edition. Причем последнее оказалось очень сильной мега вещью, так что можете быть уверенны, ваша жертва не была напрасной
0
30.12.2010, 08:56

Не по теме:

Нарушитель - мое перманентное состояние :D , так что не стоит беспокоиться :smoke:.

0
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
01.01.2011, 14:16
LK у меня почему-то перестал работать этот код
C++
1
2
3
String a = 3.4515;
float result = StrToFloat(a);
result = FormatFloat("0.0000",result);
выдается ошибка, что невозможно сконвертировать UnicodeString в float, хотя несколькими постами выше он у меня работал... FormatFloat какой тип переменной после фоматрирования возращает?
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
01.01.2011, 20:57
y_katz, ошибка в первой строке. Кавычки забыли.
1
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
02.01.2011, 03:05
Цитата Сообщение от MikeSoft Посмотреть сообщение
Кавычки забыли.
Добавил кавычки, все равно получаю ошибку Cannot convert 'UnicodeString' to 'float'. А ведь работало, это же я сюда постил этот кусок кода...

Хотя может я там у себя в IDE что переключил? Потому что через ShowMessage отформатированный float показывается, ну и плюс вот так тоже работает
C++
1
result = StrToFloat(FormatFloat("0.000",float x))
т.е. FormatFloat мне возращает стринг...
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
02.01.2011, 03:33
C++
1
2
result = FormatFloat("0.0000",result);
result = StrToFloat(FormatFloat("0.000",float x))
- вдумайтесь, что вы здесь понавыписывали .
C++
1
2
3
double result = 12345.6789;
String str = FormatFloat("0.000",result);
ShowMessage(str);
- подумайте сами, что возвращает FormatFloat ?
1
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
02.01.2011, 03:42
Цитата Сообщение от LK Посмотреть сообщение
подумайте сами, что возвращает FormatFloat ?
стринг возращает...и это обломно, потому я что расчитывал что будет число
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
02.01.2011, 03:47
а смысл - если "число " уже имете - result. хотите изврата - ну и сделайте
C++
1
2
3
4
double result = 12345.6789;
double str = StrToFloat(FormatFloat("0.000",result));
int izvrat = str;
ShowMessage(str);
но это - бред, как Вам уже намекали - только для иллюстрации...
1
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
02.01.2011, 06:58
LK я наверно не совсем правильно задал свой вопрос, но тут я сделал тест и у меня возник вообще другой вопрос, вот тут, в чем прикол? Почему у меня получается разница?

C++
1
2
3
String sResult = "234.254789";
float fResult = StrToFloat(sResult); // fResult = 234.254791259766
double dResult = StrToFloat(sResult); // dResult = 234.254789
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
02.01.2011, 07:24
1. я не знаю, что такое sResult - то, что понятно Вам, как правило, не понятно другим.
2. int хResult = sResult; - вообще выдаст xResult = 234; - думайте.

Добавлено через 8 минут
Гугль в помощь...
Основные типы C++

Основные типы в C++ подразделяются на две группы: целочисленные типы и типы с плавающей точкой (для краткости их будем называть плавающими типами). Это арифметические типы.

В C++ нет жёсткого стандарта на диапазоны значений арифметических типов (в стандарте языка оговариваются лишь минимально допустимые значения). В принципе, эти диапазоны определяются конкретной реализацией. Обычно выбор этих характеристик диктуется эффективностью использования вычислительных возможностей компьютера. Зависимость языка от реализации создаёт определённые проблемы переносимости. C++ остаётся машинно-зависимым языком.

К целочисленным типам относятся типы, представленные следующими именами основных типов:

char
short
int
long

Имена целочисленных типов могут использоваться в сочетании с парой модификаторов типа:

signed
unsigned

Эти модификаторы изменяют формат представления данных, но не влияют на размеры выделяемых областей памяти.

Модификатор типа signed указывает, что переменная может принимать как положительные, так и отрицательные значения. Возможно, что при этом самый левый бит области памяти, выделяемой для хранения значения, используется для представления знака. Если этот бит установлен в 0, то значение переменной считается положительным. Если бит установлен в 1, то значение переменной считается отрицательным.

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

В ряде случаев модификаторы типа можно рассматривать как имена основных типов.

Здесь также многое определяется конкретной реализацией. В версиях Borland C++ данные типов, обозначаемых как signed, short и int в памяти занимают одно и то же количество байтов.

Особое место среди множества основных целочисленных типов занимают перечисления, которые обозначаются ключевым словом enum. Перечисления представляют собой упорядоченные наборы целых значений. Они имеют своеобразный синтаксис и достаточно специфическую область использования. Их изучению будет посвящён специальный раздел.

Здесь также многое зависит от реализации. По крайней мере, для Borland C++ 4.5, основные характеристики целочисленных типов выглядят следующим образом:

Тип данных Байты Биты Min Max
signed char 1 8 - 128 127
unsigned char 1 8 0 255
signed short 2 16 -32768 32767
enum 2 16 -32768 32767
unsigned short 2 16 0 65535
signed int 2 16 -32768 32767
unsigned int 2 16 0 65535
signed long 4 32 -2147483648 2147483647
unsigned long 4 32 0 4294967295

К плавающим типам относятся три типа, представленные следующими именами типов, модификаторов и их сочетаний:

float
double
long double

Как и ранее, модификатор типа входит в число имён основных типов.

Плавающие типы используются для работы с вещественными числами, которые представляются в форме записи с десятичной точкой, так и в "научной нотации". Разница между нотациями становится очевидной из простого примера, который демонстрирует запись одного и того же вещественного числа в различных нотациях.

297.7
2.977*10**2
2.977E2

и ещё один пример…

0.002355
2.355*10**-3
2.355E-3

В научной нотации слева от символа E записывается мантисса, справа - значение экспоненты, которая всегда равняется показателю степени 10.

Для хранения значений плавающих типов в памяти используется специальный формат представления вещественных чисел. Этот формат называется IEEE форматом.

Ниже представлены основные характеристики типов данных с плавающей точкой (опять же для Borland C++ 4.5):

Тип данных Байты Биты Min Max
float 4 32 3.4E-38 3.4E+38
double 8 64 1.7E-308 1.7E+308
long double 10 80 3.4E-4932 3.4E+4932

Подведём итог.

Имена типов данных и их сочетания с модификаторами типов используются для представления данных различных размеров в знаковом и беззнаковом представлении:

char
signed char
unsigned char

short
signed short
unsigned short

signed
unsigned

short int
signed short int
unsigned short int

int
signed int
unsigned int

long
signed long
unsigned long

long int
signed long int
unsigned long int

Все эти типы образуют множество целочисленных типов. К этому множеству также относятся перечисления.

А вот сочетания имён типов и модификаторов для представления чисел с плавающей точкой:

float
double
long double

Вот и всё об основных типах. Помимо основных типов в C++ существуют специальные языковые средства, которые позволяют из элементов основных типов создавать новые, так называемые производные типы.
2
6 / 6 / 0
Регистрация: 19.12.2010
Сообщений: 43
17.01.2011, 12:32  [ТС]
здравствуйте. вот только появилась возможность сесть за программу и продолжить свои мучения: 15-19 строки

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 TStringList *source=new TStringList;
 source->LoadFromFile("С:\\Площади.rtf"); // чтение
 TStringList *list = new TStringList;
list->Delimiter = ',';
for(int i=0; i<source->Count; i++){
  list->DelimitedText = source->Strings[i];
  // теперь каждая строчка будет разбита и будет находится в
  //list->Strings[0] = первое значение
  //list->Strings[1] = второе значение
  //list->Strings[2] = третье значение
  //list->Strings[3] = четвертое значение
 
  // тело основной программы, действия над "площадью",
  rezult=StrToFloat(list->Strings[3])*iz_t;
  result->Strings[4]; //как правильно записать произведение каждой Strings[3] iz_t  
                          //и как правильно вынести полученный rezult в Strings[4]
      // полученный результат записываете назад в source->Strings[i]
 
  list->Clear();
Memo1->Lines->Add("S * iz_t=" +FloatToStr(rezult));
}
source->SaveToFile("C:\\source.txt");
source = NULL;
list = NULL;
}
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
18.01.2011, 08:40
так было же чуток вышее :
C++
1
result->Strings[4] = FormatFloat("0.000",result);
- только при чем здесь result->Strings[4], может list->Strings[4] ?
1
6 / 6 / 0
Регистрация: 19.12.2010
Сообщений: 43
18.01.2011, 11:08  [ТС]
все запускается, выполняет 1ый batton(высчитывает iz_t), а на втором batto'Не стопарится на открытии файла:
C++
1
2
3
4
5
6
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 TStringList *source=new TStringList;
 source->LoadFromFile("С:\\tabl.rtf");// чтение
 TStringList *list = new TStringList;
...
расширение rtf... может ли из-за него возникнуть проблемы, или что-то не так записано?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.01.2011, 11:08

создать файл 1.part и записать в него первые x элементов массива. После чего, создать второй файл 2.part, куда записать оставшиеся в массиве элементы.
Не могу понять почему не работает вот этот кусок текста. ofstream q (&quot;1.part&quot;); for (int...

Сформировать текстовый файл записать в него 20 случайных чисел от-10 до 10 по 1 на строку записать выходной файл умножив
День добрый. Убил день но так и не смог сделать задание так или иначе делаю но получается херня...

Дан файл целых чисел. Создать новый файл, содержащий те же элементы, что и исходный файл, но в обратном порядке
Пожалуйста, помогите решить задачу в C++!!! Дан файл целых чисел. Создать новый файл, содержащий...

Даны натуральное , символьный файл и текстовый файл . Файл содержит 30 слов , каждое из которых будем называть ключевым
Добрый день, помогите пожалуйста сделать вот такую программу. Даны натуральное k , символьный файл...

Файл: Скопировать текст в другой текстовый файл файл, но чётные строки должны быть с большой буквы...
Создать текстовый файл. Скопировать текст в другой текстовый файл файл, но чётные строки должны...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru