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

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

24.12.2010, 21:23. Показов 10130. Ответов 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
161 / 101 / 22
Регистрация: 11.05.2009
Сообщений: 628
26.12.2010, 10:29
Dycek, я правильно понял, действия происходят только с площадью?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.12.2010, 21:31
Цитата Сообщение от y_katz Посмотреть сообщение
Не я про динамический массив, когда заранее неизвестно сколько будет элементов. А в вашем случае это уже известно, их 10
C++
1
2
int n = 10;
String *StrList = new String[n];
ну да, ну да... юзайте std::vector .
1
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
26.12.2010, 22:40
Цитата Сообщение от LK Посмотреть сообщение
юзайте std::vector .
а можно пример динамического массива через вектор?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.12.2010, 22:56
C++
1
2
3
4
5
#include <vector>
using namespace std;
vector<vector<int> > v;
v.assign(10,2);
//10 элементов со значением 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <string>
#include <vector>
using namespace std;
 
 
struct Tuple
{
string name;
string alias;
};
 
int main()
{
vector< vector<Tuple> > arr(10, vector<Tuple>(10));
arr[0][0].name = "name1";
arr[0][0].alias = "alias1";
 
return 0;
}
1
6 / 6 / 0
Регистрация: 19.12.2010
Сообщений: 43
28.12.2010, 16:00  [ТС]
Цитата Сообщение от VtaMC Посмотреть сообщение
Dycek, я правильно понял, действия происходят только с площадью?
да. вот только проблема в том, что текстовый файл может меняться, и, соответственно, значения площади будут разные. (записаны они будут так же, через запятую)
0
161 / 101 / 22
Регистрация: 11.05.2009
Сообщений: 628
28.12.2010, 16:04
Цитата Сообщение от Dycek Посмотреть сообщение
да. вот только проблема в том, что текстовый файл может меняться, и, соответственно, значения площади будут разные. (записаны они будут так же, через запятую)
Может я чего-то не понимаю, но где здесь проблема? Ты из строки всегда 4-е число выбираешь и с ним действия какие-то производишь.
1
6 / 6 / 0
Регистрация: 19.12.2010
Сообщений: 43
28.12.2010, 16:16  [ТС]
Цитата Сообщение от y_katz Посмотреть сообщение
LK вот вы где столько времени были? Прочитал, Delimiters оказался весьма полезным методом

to Dycek
В вашем случаеразбив строчки будет происходить вот таким образом
C++
1
2
3
TStringList *list = new TStringList;
list->Delimiter = ',';
list->DelimitedText = "0,0,200,1.427803";
причем каждая разбитая строка будет в Strings[i], т.е.
list->Strings[0] = 0
list->Strings[1] = 0
list->Strings[2] = 200
list->Strings[3] = 1.427803

Нюанс в том что это решение для вашего случая, если же у вас будут строки с пробелами то Delimiters по дефолту будет пробелом, вот сейчас роюсь и пытаюсь найти решение этого нюанса. Если конечно многоуважаемый LK не решит помочь
Во-первых, огромное СПАСИБО, за то, что вы мне помогаете!!!
Во-вторых, мне нужно будет каждую строку записывать в виде: list->DelimitedText = "0,0,200,1.427803";[/CPP]?

Добавлено через 2 минуты
мне очень стыдно за этот вопрос, но чем отличается borland -6 c++, от visual studio?
я сейчас пишу на борланде, тк писала на delphi, и интерфейс знаком.
вот...может лучше все это дело оформить на visual studio? и если да, то какой посоветуете?
0
161 / 101 / 22
Регистрация: 11.05.2009
Сообщений: 628
28.12.2010, 16:19
Visual Studio - среда от Microsoft. Естественно библиотека классов и компонентов там другая. Если начали изучать Borland - изучайте его.
1
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
28.12.2010, 17:07
Цитата Сообщение от Dycek Посмотреть сообщение
Во-вторых, мне нужно будет каждую строку записывать в виде: list->DelimitedText = "0,0,200,1.427803"?
Угу, просто пройдитесь for циклом по всем вашим строкам. Кстати после каждой обработки list-a не забывайте делать list->Clear()


п.с. вот ща у меня точно поедет крыша - оказывается еще есть visual studio...
1
6 / 6 / 0
Регистрация: 19.12.2010
Сообщений: 43
28.12.2010, 22:26  [ТС]
Цитата Сообщение от VtaMC Посмотреть сообщение
Может я чего-то не понимаю, но где здесь проблема? Ты из строки всегда 4-е число выбираешь и с ним действия какие-то производишь.
каким образом?
мне посоветовали сделать так:
C++
1
2
3
TStringList *list = new TStringList;
list->Delimiter = ',';
list->DelimitedText = "0,0,200,1.427803";
причем каждая разбитая строка будет в Strings[i], т.е.
C++
1
2
3
4
list->Strings[0] = 0
list->Strings[1] = 0
list->Strings[2] = 200
list->Strings[3] = 1.427803
но здесь только для конкретного случая, если у меня будут другой файл подобного вида, но с другими данными, мне придется все записывать заново(((
если вы подскажете, каким образом можно еще взять 4е число из строки, буду очень признательна))
0
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
29.12.2010, 01:16
Цитата Сообщение от Dycek Посмотреть сообщение
но здесь только для конкретного случая, если у меня будут другой файл подобного вида, но с другими данными, мне придется все записывать заново
Вот для всего вашего файла

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
TStringList *source = new TStringList;
source->LoadFromFile("C:\\source.txt");
 
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] = четвертое значение
 
  // тело основной программы, действия над "площадью",
  // полученный результат записываете назад в source->Strings[i]
 
  list->Clear();
}
source->SaveToFile("C:\\source.txt");
source = NULL;
list = NULL;
1
29.12.2010, 09:56

Не по теме:

y_katz, не забывайте удалять объекты.
В данном случае, вы обнулили указатели source и list, но не освободили память, выделенную под них.

2
6 / 6 / 0
Регистрация: 19.12.2010
Сообщений: 43
29.12.2010, 15:37  [ТС]
Цитата Сообщение от y_katz Посмотреть сообщение
Вот для всего вашего файла

for(int i=0; i<source->Count; i++){//
я не очень понимаю, что здесь делается(((если iнаше значение, то мне нужно будет брать только list->Strings[3] и результат записывать в source->Strings[4]? а чтобы разделить значения, записываемые в файл: площади и полученного значения запятой, то как нужно написать?
и еще, вышенаписанное по строчкам, а со столбцами? тоже нужно будет загнать в цикл, допустим по j?

Добавлено через 35 минут
и еще вопросик: как умножать?
строковое значение? и как его записать?
такое не проканает:
C++
1
2
S_iz_t:=(list->Strings[3])*iz_t;
  S_iz_t->Strings[4];
((((((((
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.12.2010, 17:17
Цитата Сообщение от Dycek Посмотреть сообщение
и еще вопросик: как умножать?
строковое значение? и как его записать?
такое не проканает:
C++
1
2
S_iz_t:=(list->Strings[3])*iz_t;
  S_iz_t->Strings[4];
((((((((
C++
1
2
int result = StrToInt(list->Strings[3])*StrToInt(iz_t);
// если iz_t имеет тип Int - то просто ...*iz_t;
C++
1
2
// эта строка смысла не имеет, что вы хотели сделать?
S_iz_t->Strings[4];
Pascal
1
S_iz_t:=(list->....
1. Почему здесь object pascal ? копи-пейст ?
2. Давайте переменным более осмысленные имена, вы сам через день забудете, что такое S_iz_t .
1
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
29.12.2010, 17:42
Цитата Сообщение от MikeSoft Посмотреть сообщение

Не по теме:

y_katz, не забывайте удалять объекты.
В данном случае, вы обнулили указатели source и list, но не освободили память, выделенную под них.

MikeSoft, я как раз и думал что обнулением указателя я освобождаю ранее выделенную память...Если не удаление, то каким способом я должен это сделать?
0
6 / 6 / 0
Регистрация: 19.12.2010
Сообщений: 43
29.12.2010, 17:43  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
C++
1
2
3
int result = StrToInt(list->Strings[3])*StrToInt(iz_t);
// если iz_t имеет тип Int - то просто ...*iz_t;
iz_t  double
C++
1
2
// эта строка смысла не имеет, что вы хотели сделать?
S_iz_t->Strings[4];
здесь я хотела величину S_iz_t записать в файл на место Strings[4]

Pascal
1
S_iz_t:=(list->....
1. Почему здесь object pascal ? копи-пейст ?
эт в паскале? мне просто выше написали некоторые строки, я попыталась собрать все воедино(хотя получилось как всегда((((((((((()
2. Давайте переменным более осмысленные имена, вы сам через день забудете, что такое S_iz_t .
да здесь для меня все понятно-это произведение площади S на величину iz_t, которую я вычисляла выше
0
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
29.12.2010, 17:53
Цитата Сообщение от Dycek Посмотреть сообщение
C++
1
for(int i=0; i<source->Count; i++)
я не очень понимаю, что здесь делается
Благодаря этой строчке вы можете пройтись по всему файлу, т.е. если у вас в файле есть строки
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

то
для i = 0 у вас для обработки будет строка 0,0,0,6.092 в source->Strings[0]
для i = 1 у вас для обработки будет строка 0,0,20,1.4278032 в source->Strings[1]
для i = 2 у вас для обработки будет строка 0,0,40,2.4169567 в source->Strings[2]
для i = 3 у вас для обработки будет строка 0,0,60,3.12553 в source->Strings[3]
для i = 4 у вас для обработки будет строка 0,0,80,3.469352 в source->Strings[4]



Dycek, давайте сделаем по другому, вот скажем у вас есть строка 0,0,80,3.469352, что вам нужно с ней сделать? Можете визуально показать как она должна будет выглядеть после всех операций?
1
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
29.12.2010, 17:56
Цитата Сообщение от y_katz Посмотреть сообщение
MikeSoft, я как раз и думал что обнулением указателя я освобождаю ранее выделенную память...Если не удаление, то каким способом я должен это сделать?
Для удаления созданы операторы delete и delete[].
Почитайте вот этот пост: Оператор delete и обнуление указателя.
Думаю, будет полезно
2
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.12.2010, 18:26
да здесь для меня все понятно-это произведение площади S на величину iz_t, которую я вычисляла выше
- я к тому, что традиционно в с , да и не только, S по смыслу - это строка, вот и у вас оно очень хорошо соотносится - S_iz_t=(list->Strings[3])*... - но это дело хозяйское , хотя я бы написал что-то типа iz_t_Square ... по ходу - запамятовал присвоить :
C++
1
2
int result = StrToInt(...;
S_iz_t = result;
1
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
29.12.2010, 19:07
Цитата Сообщение от MikeSoft Посмотреть сообщение
Почитайте вот этот пост:
Прочитал, спасибо как за совет, так и за то что глянули мой код и указали мне на мою ошибку!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.12.2010, 19:07

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов. Сигнатура func Fetch(urls string, maxConcurrent int) Result Пример urls :=. . .
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition) Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru