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

Работа с файлами

18.04.2021, 12:07. Показов 5340. Ответов 10

Студворк — интернет-сервис помощи студентам
Добрый день, подскажите, пожалуйста, как изменять строки файлов?

Есть файл, где каждая строка вида: " число, число, число, ". Необходимо вычесть из каждой строки одного файла строки другого такого же и сохранить результат. Количество строк в обоих файлах одинаковое
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.04.2021, 12:07
Ответы с готовыми решениями:

Работа со списками и файлами (Двусвязный список, структуры, работа с файлами)
1. Организовать ввод данных структуры и их вывод на экран. 2. Организовать ввод данных структуры из файла и их выгрузку в файл. 3....

Работа с файлами , хотелось бы с windows system файлами
всем привет, нужна интересная идея по программированию, работа с файлами , хотелось бы с windows system файлами, у вас есть какая-то идея?...

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

10
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
19.04.2021, 09:15
Считаю, что в такого рода задачах педантичность в формулировках не только не вредна, но даже полезна. Чтобы исключить "предполагаемые" варианты. В данном случае не совсем понятно, про "вычесть строки". Есть два списка одинаковой длины, в которых в литеральной форме представлены группы из трех чисел в каждой строке, разделенных запятыми. Не понятно, что из чего вычитать. Математическое вычитание из числа первого списка числа второго списка? и так три раза в каждой строке? Затем результат (по три разности в каждой строчке) перевести из числовой в литеральную форму и сохранить в новый текстовый файл в таком же формате, как и входные файлы?
0
0 / 0 / 0
Регистрация: 02.02.2021
Сообщений: 27
19.04.2021, 10:35  [ТС]
nick42, все верно. Мне бы понять, как хотя бы один столбец изменить.

Пример:
файл1 :
0, 0, 200
0, 10, 150

файл2 :
0, 0, 150
0, 10, 200

в итоговый файл необходимо записать:
0, 0, 50
0, 10, -50
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
19.04.2021, 12:52
Лучший ответ Сообщение было отмечено D1973 как решение

Решение

Вы или ошиблись, или вычитаются только числа в последней - третьей - позиции строки.

Добавлено через 1 час 13 минут
Если без контроля входных данных и вычитание по всем трем позициям, то вот так можно__
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
   std::auto_ptr <TStringList> sL1(new TStringList),
                               sL2(new TStringList),
                               sL3(new TStringList),
                               sL4(new TStringList);
   sL1->LoadFromFile("fajl1.txt");
   sL2->LoadFromFile("fajl2.txt");
   for(int A,B,C,i=0;i<sL1->Count;i++)
  {  sL3->CommaText = sL1->Strings[i];
     A = sL3->Strings[0].ToIntDef(0);
     B = sL3->Strings[1].ToIntDef(0);
     C = sL3->Strings[2].ToIntDef(0);
     sL3->CommaText = sL2->Strings[i];
     A -= sL3->Strings[0].ToIntDef(0);
     B -= sL3->Strings[1].ToIntDef(0);
     C -= sL3->Strings[2].ToIntDef(0);
     sL4->Add(String().sprintf("%d,%d,%d",A,B,C));
  }
   sL4->SaveToFile("result.txt");
1
0 / 0 / 0
Регистрация: 02.02.2021
Сообщений: 27
19.04.2021, 15:25  [ТС]
ошибку выдает
[bcc32c Error] Unit1.cpp(51): cannot initialize a parameter of type 'const wchar_t *' with an lvalue of type 'const char [9]'
ustring.h(62): passing argument to parameter 'format' here
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
19.04.2021, 16:04
Работая с юникодной платформой нужно быть готовым к подобным вывертам...
Добавьте L перед кавычками в строке форматного вывода...
C++
1
sL4->Add(String().sprintf(L"%d,%d,%d",A,B,C));
2
0 / 0 / 0
Регистрация: 02.02.2021
Сообщений: 27
20.04.2021, 11:05  [ТС]
nick42, да, уже разобралась, спасибо)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,906
Записей в блоге: 12
20.04.2021, 13:11
Если вдруг понадобится сделать то же самое не для 3-х, а для большего количества "столбцов" - то я бы переписал код вот так (потому что при 10 столбцах, скажем, будет уже напряжно работать с 10-ю переменными A, B, C, D, E, F, G, H, I, J) :

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
// все используемые в коде хидеры
#include <memory>
#include <algorithm>
#include <functional>
#include <sstream>
#include <iterator>
#include <vector>
 
// Конвертируем строку в std::vector целых чисел (самая большая проблема здесь - 
// разделитель между числами. Для начала заменяем разделитель на пробел, потом конвертируем в вектор)
void getNumbers(String s, std::vector<int> &v)
{
    std::istringstream is(AnsiString(StringReplace(s.c_str(), ",", " ", TReplaceFlags() << rfReplaceAll)).c_str());
    v.assign( std::istream_iterator<int>(is), std::istream_iterator<int>() );
}
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    std::auto_ptr<TStringList>
        f1(new TStringList), // первый файл
        f2(new TStringList), // второй файл
        res(new TStringList); //результат
 
    f1->LoadFromFile("file1.txt");
    f2->LoadFromFile("file2.txt");
    for(int i = 0; i < f1->Count; i++)
    {
        std::vector<int> first, second;
        std::ostringstream oss;
        getNumbers(f1->Strings[i], first);
        getNumbers(f2->Strings[i], second);
        // из каждого элемента первого вектора вычитаем (поэтому std::minus) соответствующий элемент
        // второго вектора, и результат пишем в ostringstream через пробел
        std::transform(first.begin(), first.end(), second.begin(), std::ostream_iterator<int>(oss, " "), std::minus<int>());
        // Ну, а теперь - отсекаем конечный пробел и заменяем назад пробелы на запятые
        res->Add(StringReplace(Trim(oss.str().c_str()), " ", ",", TReplaceFlags() << rfReplaceAll));
    }
    res->SaveToFile("res.txt");
}
Проверено в XE4 - нормально работает. В более новых версиях, возможно, код можно и подсократить... Но у меня нет более новых версий. Если надо - могу попробовать написать код для gcc с использованием фишек C++11/C++14/С++17, но как к нему отнесется Билдер - не знаю...
2
0 / 0 / 0
Регистрация: 02.02.2021
Сообщений: 27
25.04.2021, 16:16  [ТС]
а есть какая-нибудь форма для обязательного выбора файла? (Т.е. программа далее не работает, если файл не выбран)
или через условие проворачивать?
0
Модератор
 Аватар для D1973
9922 / 6458 / 2457
Регистрация: 21.01.2014
Сообщений: 27,409
Записей в блоге: 3
25.04.2021, 17:38
Не совсем понятен вопрос: есть же стандартные диалоги. Вот и проверяем: если диалог не выполнился (файл выбран не был) - просто прерываем обработчик, в котором вызывали диалог...
C++
1
if(!OpenDialog1->Execute()) return;
1
0 / 0 / 0
Регистрация: 02.02.2021
Сообщений: 27
24.05.2021, 14:02  [ТС]
как найти max/min в третьем столбце после вычитания? Сделала так, но считает как-то неправильно
C++
1
2
3
4
5
6
7
8
9
 ...
         if(maxER < C)maxER = C; 
     if(minER > C)minER = C; 
 
     L4->Add(String().sprintf(L"      %d,     %d,     %d,",A,B,C));
  }
    int absMin = abs(minER);
    double Err = (maxER > absMin ? absMin : maxER)/256.0*100.0;
    Memo1->Lines->Add(FloatToStr(Err));
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.05.2021, 14:02
Помогаю со студенческими работами здесь

Работа с файлами. Работа со структурами и файлами Си
Написать программу вычисления стоимости покупки с учетом скидки. Скидка 3% предоставляется в случае, если сумма покупки больше 500 рублей,...

Лабораторная работа №5. Работа с файлами и алгоритмы сортировки
1. Написать функцию Load для считывания из текстового файла (например, Workers.txt) информации о работниках и заработной плате. В первой...

Работа с файлами(Запись,чтение,работа с данными)
Здравствуйте, никак не могу осилить файлы... Для начала вот само задание: В справочной автовокзала хранится расписание движения автобусов....

Работа с файлами, чтение/работа со строкой
Доброго времени суток. Начал работать с C++ Builder 6. Есть текстовый файл .txt с различными строками, как можно производить...

работа с файлами
Здравствуйте. Есть очень много картинок несколько тысяч, имена этих картинок данные, которые нужно занести в программу на java(БД...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru