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

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

24.12.2010, 21:23. Показов 9959. Ответов 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
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
25.12.2010, 13:49
поставьте себя "по ту сторону экрана" и попробуйте понять, что вы написАли...
- если есть "прожка" - выкладывайте сюда и говорите, что конкретно не получается - в коде, а не ля-ля-ля...
- там упоминается одна, или две разные "прожки" ? из какого списка ? что такое "числовик"?
- если вам никто не отвечает, подумайте, может, они не так уж и виноваты....
0
161 / 101 / 22
Регистрация: 11.05.2009
Сообщений: 628
25.12.2010, 18:35
Задача описана туманно, но вот что то такое наверно должно быть:

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
TStringList * lst = new TStringList();
 
double detect(String str, int pos)
{
    String buf = str;
    pos = pos - 2;
    for(int i = 0; i < pos; i++)
        if(i - 1 < pos)
            buf.Delete(buf.Pos(","), 1);
 
    buf.Delete(1, buf.Pos(","));
 
    if(buf.Pos(","))
        buf.Delete(buf.Pos(","), buf.Length());
 
    if(buf.Pos("."))
    {
        int p = buf.Pos(".");
        buf.Delete(p, 1);
        buf.Insert(",", p);
    }
 
    try
    {
        return StrToFloat(buf);
    }
    catch(...)
    {
        return 0;
    }
}
 
void __fastcall TForm23::Button1Click(TObject *Sender)
{
    lst->LoadFromFile("example.txt");
    double * arr = new double[lst->Count];
 
    for(int i = 0; i < lst->Count; i++)
        arr[i] = detect(lst->Strings[i], 4);
 
    /*
    *Какие-то действия с массивом
    */
 
    for(int i = 0; i < lst->Count; i++)
        lst->Strings[i] = lst->Strings[i] + "," + FloatToStr(arr[i]);
    lst->SaveToFile("example.txt");
}
//---------------------------------------------------------------------------
1
0 / 0 / 0
Регистрация: 23.12.2010
Сообщений: 6
25.12.2010, 20:28
VtaMC, Добрый день или вечер могу с Вами пообщаться на тему с++. Буду признателен
0
6 / 6 / 0
Регистрация: 19.12.2010
Сообщений: 43
25.12.2010, 20:57  [ТС]
извините за постановку задачи.
вот программа:
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));
}
она выдает значение 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ым после запятой, и записывать его рядом...такого я не нашла(((((
вроде объяснила более понятно... кто может подсказать...пожалуйста...
помогите, пожалуйста разобраться
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.12.2010, 00:02
перечитала много книжек, ... а такого, чтобы брать из файла значение, кот стоит 4ым после запятой, и записывать его рядом...такого я не нашла(((((
- почитайте еще пр StringList, Delimiters и конкатенацию строк
2
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
26.12.2010, 02:32
Цитата Сообщение от LK Посмотреть сообщение
- почитайте еще пр StringList, Delimiters
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 не решит помочь
2
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.12.2010, 02:45
http://www.delphisources.ru/pa... t.php.html
2
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
26.12.2010, 03:00
Не, не работает
C++
1
2
3
TStringList *list = new TStringList;
list->QuoteChar='|';
list->DelimitedText="Sampl1|S ample2";
Получаю
list->Strings[0] = "Sampl1|S";
list->Strings[1] = "ample2";
Все равно разбивается по пробелам, не конечно есть вариант перед разбивкой пробелы заменить на какой-нибудь спец. символ, а после заменить обратно на пробел...
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.12.2010, 03:09
не помню источник
Два варианта. Перед разбиением заменить пробел например на '#', и после разбиения вернуть все обратно. Или разбить на отдельные строк вручную:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void splitSentence(TStringList *slist, String &str, char delim)
{
  char *fst = str.c_str();
  while(*fst!=0)
  {
    char *lst = strchr(fst, delim);
    if(lst==NULL)
    {
      slist->Add(fst);
      break;
    }
    *lst = 0;
    slist->Add(fst);
    *lst = delim;
    fst = lst + 1;
  }
}
2
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.12.2010, 03:09
не помню источник
Два варианта. Перед разбиением заменить пробел например на '#', и после разбиения вернуть все обратно. Или разбить на отдельные строк вручную:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void splitSentence(TStringList *slist, String &str, char delim)
{
  char *fst = str.c_str();
  while(*fst!=0)
  {
    char *lst = strchr(fst, delim);
    if(lst==NULL)
    {
      slist->Add(fst);
      break;
    }
    *lst = 0;
    slist->Add(fst);
    *lst = delim;
    fst = lst + 1;
  }
}
0
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
26.12.2010, 03:22
ИМХО заменить пробелы, разбить, а после вернуть пробелы назад мне кажется менее гиморнее...
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.12.2010, 04:25
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <memory>
// ...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  std::auto_ptr<TStringList> list(new TStringList);
  UnicodeString string = "0, 0,   0,    6.092";
//  ShowMessage("Начальная строка: "+string);
  Memo1->Lines->Add("Начальная строка: "+string);
  string = StringReplace(string, " ", "", TReplaceFlags()<<rfReplaceAll);
  list->Delimiter = ',';
  list->DelimitedText = string;
//  ShowMessage("Строка без пробелов: "+string);
  Memo1->Lines->Add("Строка без пробелов: "+string);
  for (int i = 0; 0<list->Count; i++) {
    if (list->Count==-1) {return;}
//  ShowMessage("Разделенная строка #"+IntToStr(i+1)+": "+list->Strings[i]);
    Memo1->Lines->Add("Разделенная строка #"+IntToStr(i+1)+": "+list->Strings[i]);
    string = string+". Добавлено: "+list->Strings[i]+" ,";
//  ShowMessage(string);
    Memo1->Lines->Add(string);
  }
}
2
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
26.12.2010, 06:18
LK я смотрю вы запостили весьма интересный кусок кода, я все хотел начать разбор конструкции
C++
1
std::auto_ptr<TStringList> list(new TStringList);
и все откладывал, (вы такую строку уже постили ответом на мой вопрос), а сейчас уже придется



to Dycek, я думаю для вашей задачи у вас уже есть все элементы кода, ну наверно можно еще добавить считывание и запись в файл
C++
1
2
3
TStringList *s=new TStringList;
s->LoadFromFile("С:\\sample.txt"); // чтение
s->SaveToFile("С:\\sample.txtt"); // запись
Я бы и сам написал бы вам весь код, ваша задача выглядит весьма легко, но все равно я не могу понять в нюансах что вам нужно сделать. Может вы на примере одной строчки сделаете операции вручную и покажете как конкретная строчка после всех операций должна будет выглядеть
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.12.2010, 06:28
что получилось ?

Добавлено через 4 минуты
Цитата Сообщение от y_katz Посмотреть сообщение
хотел начать разбор конструкции
C++
1
std::auto_ptr<TStringList> list(new TStringList);
- разбирать там нечего - используется, если StringList не будет использоваться за пределами текущей функции, поэтому нет необходимости при закрытии приложения вручную удалять StringList
C++
1
delete StringList;
. Не будет работать, если забыть про
C++
1
#include <memory>
Добавлено через 1 минуту
auto_ptr - так называемый "умный укзатель/smart pointer" .
2
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
26.12.2010, 07:15
Т.е. вы хотите сказать что эти две строчки эквивалентны?
C++
1
2
3
std::auto_ptr<TStringList> list(new TStringList);
 
TStringList * list = new TStringList;
а при этом auto_ptr принадлежит std который не будет работать если не подключить <memory> верно?



Кстати, а вот такая конструкция верна? Я чисто принцип уловить хочу
C++
1
String *StrList = new String[amount]
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.12.2010, 08:05
Цитата Сообщение от y_katz Посмотреть сообщение
Т.е. вы хотите сказать что эти две строчки эквивалентны?
C++
1
std::auto_ptr<TStringList> list(new TStringList);
- типа того , только auto_ptr<TStringList> нельзя объявить глобально, имхо .
Цитата Сообщение от y_katz Посмотреть сообщение
C++
1
TStringList * list = new TStringList;
а при этом auto_ptr принадлежит std который не будет работать если не подключить <memory> верно?
- типа того .
Цитата Сообщение от y_katz Посмотреть сообщение
Кстати, а вот такая конструкция верна? Я чисто принцип уловить хочу
C++
1
String *StrList = new String[amount]
- это есть в Borland C++ Builder ?
2
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
26.12.2010, 08:10
Цитата Сообщение от LK Посмотреть сообщение
- это есть в Borland C++ Builder ?
угу, с самого начала динамические массивы я таким способом как раз и делал, а потом уже перешел на Memo и StringList
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
26.12.2010, 08:20
Вы, кажись, про это
C++
1
String *StrList = new String[10];
? а чем оно лучшее
C++
1
String StrList[10];
? я то начал вспоминать reserved word anount .

Добавлено через 2 минуты
Ошибка очистки динамической памяти
2
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
26.12.2010, 08:44
Не я про динамический массив, когда заранее неизвестно сколько будет элементов. А в вашем случае это уже известно, их 10
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.12.2010, 08:44
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru