4 / 3 / 1
Регистрация: 03.06.2020
Сообщений: 82

Перенос информации в txt

07.02.2021, 21:12. Показов 3192. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
void red_mat() {
    int i=1;
    int variant;
    std::string name, redname, redkol, kol;
    std::ifstream file("all.txt");
    std::cout << "Редактирование информации\n";
    std::cout << "Введите номер материала либо 0 чтобы выйти\n";
    std::cin >> variant;
    if (file.is_open()) {
        std::string line;
        while (std::getline(file, line)) {
            if (variant == i) {
                std::cout << i << "." + line << std::endl;
                std::cout << "Введите новое имя:\n";
                std::cin >> name;
                std::cout << "Введите новое кол-во:\n";
                std::cin >> kol;
                break;
            }
            i++;
        }
        file.close();
    }
    redname += name;
    redkol += kol;
    std::ofstream myfile;
    myfile.open("all.txt");
    myfile << redname + " " + redkol;
    
}
Как сделать чтобы вызывая эту функцию и внося новое имя и количество для материала после сохранения эти данные не стирали все что уже было в файле txt
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.02.2021, 21:12
Ответы с готовыми решениями:

Перенос в .txt
Всем привет, столкнулся с заданием где суть задания перенос в .txt файл а я не понимаю как это сделать подскажите Найти в файле f все...

Перенос информации
Здравствуйте, подскажите как сделать чтобы всю инфу из первого DBGrid перенести во вторую?

Вывод информации в txt файл
Доброго времени суток. Помогите с выводом информации в текстовый документ.Программа считает время простоя установки в формате чч:мм:cc,...

31
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.02.2021, 21:28
Лучший ответ Сообщение было отмечено Lemon 1123 как решение

Решение

Цитата Сообщение от Lemon 1123 Посмотреть сообщение
Как сделать чтобы вызывая эту функцию и внося новое имя и количество для материала после сохранения эти данные не стирали все что уже было в файле txt
C++
1
2
std::ofstream myfile;
    myfile.open("all.txt", std::ios::out | std::ios::app);
Либо std::ios::ate

Добавлено через 1 минуту
https://en.cppreference.com/w/... e/openmode
1
4 / 3 / 1
Регистрация: 03.06.2020
Сообщений: 82
07.02.2021, 23:42  [ТС]
созрел другой вопрос а как тогда не читать какую-то строчку?)
судя по всему эта функция должна быть где-то тут,
Цитата Сообщение от Lemon 1123 Посмотреть сообщение
if (variant == i) {
                std::cout << i << "." + line << std::endl;
                std::cout << "Введите новое имя:\n";
                std::cin >> name;
                std::cout << "Введите новое кол-во:\n";
                std::cin >> kol;
                break;
            }
я попробовал trunc но не вышло. Получается что нужно как бы заменить строку
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.02.2021, 23:45
Цитата Сообщение от Lemon 1123 Посмотреть сообщение
созрел другой вопрос а как тогда не читать какую-то строчку?)
Ну, это другой вопрос. Тот-то решился?
0
4 / 3 / 1
Регистрация: 03.06.2020
Сообщений: 82
07.02.2021, 23:45  [ТС]
Даа
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.02.2021, 23:49
Цитата Сообщение от Lemon 1123 Посмотреть сообщение
я попробовал trunc но не вышло. Получается что нужно как бы заменить строку
Здесь тебе придётся смотреть содержимое строки - считываешь строку, проверяешь что она соответствует, если нет - пропускаешь
0
4 / 3 / 1
Регистрация: 03.06.2020
Сообщений: 82
07.02.2021, 23:51  [ТС]
oleg-m1973, если нет то пропускаю а если да то удаляю? А как удалить
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
07.02.2021, 23:53
Цитата Сообщение от Lemon 1123 Посмотреть сообщение
oleg-m1973, если нет то пропускаю а если да то удаляю? А как удалить
Никак. Из такого файла удалить ничего не получится. Только записать в новый файл.
0
4 / 3 / 1
Регистрация: 03.06.2020
Сообщений: 82
08.02.2021, 01:03  [ТС]
2 часа пыхтел так и не вышло все равно
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
08.02.2021, 01:09
Lemon 1123, как удалить строку из файла: читаете файл, строки которые нужны, записываете в новый файл. потом удалите начальный файл, новый переименуйте и всё.
0
4 / 3 / 1
Регистрация: 03.06.2020
Сообщений: 82
08.02.2021, 01:14  [ТС]
Файл читаю, строки записываю, програму запускаю оно то добавляет просто еще 1 пункт то вобще не то делает
0
08.02.2021, 01:16

Не по теме:

Цитата Сообщение от Lemon 1123 Посмотреть сообщение
Файл читаю, строки записываю
показывайте код

0
4 / 3 / 1
Регистрация: 03.06.2020
Сообщений: 82
08.02.2021, 01:28  [ТС]
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
void red_mat() {
    int i=1;
    
    std::string name, redn, redk, kol, variant;
    std::ifstream file("all.txt");
    std::cout << "Редактирование информации\n";
    std::cout << "Введите номер материала либо 0 чтобы выйти\n";
    std::cin >> variant;
    if (file.is_open()) {
        std::string line;
        
            int local_Cnt = 0;
            if (variant == "0") {
                exit(1);
            }
            else {
                std::string finded, replaced;
                finded = variant;
                std::string line;
                std::string name_new;
 
                
                int ext_cnt = 0;
                bool change_name = true;
 
 
                std::ifstream ifs("all.txt");
 
                std::cout << "Введите новое имя и кол-во\n";
                std::cin >> replaced;
                std::getline(std::cin, replaced);
                if (ext_cnt == 0)
                    name_new = replaced;
 
                std::vector<std::string> Vec;
                int cnt = 0;
                if (ifs.is_open()) {
                    std::string tmp;
                    bool name_finded = false;
                    bool again_cnt = false;
                    int cnt = 0;
                    while (std::getline(ifs, tmp)) {
                        //ifs >> tmp;
 
                        if (tmp == finded)
                        {
                            Vec.push_back(tmp);
                            cnt++;
                            continue;
                        }
                        if (cnt == 1)
                        {
                            Vec.push_back(tmp);
                            cnt++;
                            continue;
                        }
                        if (cnt == 2)
                        {
                            tmp = replaced;
                        }
 
                        Vec.push_back(tmp);
                    }
                }
                std::ofstream ofs("all.txt");
 
                for (std::vector<std::string>::const_iterator it = Vec.begin();
                    it != Vec.end(); ++it)
                    ofs << *it << "\n";
                ext_cnt++;
                ofs.close();
                ifs.close();
 
            }
 
    }
 
}
я уже и так и сяк вертел потом впихнул часть с векторами в надежде что заработает и закрыл. Так что первоначальный только вверху
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
08.02.2021, 01:32
Lemon 1123, зачем Вам вектор ? почему не используете режим app ? сформулируйте условие задачи

и приведите пример записи в файле
0
4 / 3 / 1
Регистрация: 03.06.2020
Сообщений: 82
08.02.2021, 01:41  [ТС]
Мне нужно просто чтобы я ввел номер материала (variant) потом новое имя и кол-во для этого материала которое заменит старую информацию. Например есть пункт 1. Гвозди 100 штук. Я ввожу 1 и потом Доски 20 . Вызываю функцию вывода txt и вижу на екране не гвозди а доски
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
08.02.2021, 01:49
Lemon 1123, я правильно Вас понимаю ? в файле all.txt ничего нет. Вы записываете с клавиатуры в файл информацию в виде
// файл all.txt
productA 10
productB 100
productC 5

затем Вы хотите ввести номер строки. например 2, новое название productD 33 и сохранить в файле all.txt
// файл all.txt
productA 10
productD 33
productC 5
0
4 / 3 / 1
Регистрация: 03.06.2020
Сообщений: 82
08.02.2021, 01:53  [ТС]
Да.
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
08.02.2021, 03:39
я так понял, что кроме этого Вы хотите добавлять информацию. для простоты пока будем считать, что название товара - одно слово. организовать добавление и замену "на лету", т.е. не создавая массив можно, но если Вам понадобится потом отсортировать данные ? решать лучше через массив структур. в любом случае Вам понадобятся 3 функции:
C++
1
void Record_data () // запись начальных данных
C++
1
void Add_data () // добавление данных
C++
1
void Replace_data () // замена данных
с функцией Add_data() Вам уже подсказали: открываете файл в режиме дозаписи, проще записать так:
C++
1
2
3
ofstream ofs("all.txt", ios::app);
... // дозапись новой строки
ofs.close();
в функции Replace_data() открываете файл сначала для чтения затем для записи:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int i=0;
ifstream ifs("all.txt");
 
while (ifs >> data[i].product >> data[i].quantity) // чтение в массив структур
{        
    i++;
}
 
ifs.close();
 
ofstream ofs("all.txt");
 
for(int j = 0; j < i; j++)
{
    ... // если j=N-1 - меняете строку
    ... // здесь записываете из массива структур в файл
}
ofs.close();
почитайте тему структура, массив структур
0
4 / 3 / 1
Регистрация: 03.06.2020
Сообщений: 82
09.02.2021, 21:04  [ТС]
Yetty, Вобщем со структурами все надо переделывать а если начну то еще больше проблем наберу решил долбиться в стенку получилось вывести как надо но как теперь сделать чтобы в функции вывода всего списка all_mat тоже считывался новый список ибо оно выводит в редактировании (red_mat) список до конца и стирает все или не сохраняет а потом когда в меню вызываю опять весь список выводит пустоту
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
void all_mat() {
    int i = 1;
    std::ifstream file("all.txt");
    std::cout << "Все материалы: \n";
    if (file.is_open()) {
        std::string line;
        while (std::getline(file, line)) {
            std::cout << i << "." + line << std::endl;
            i++;
        }
        file.close();
    }
    menu();
}
void menu() {
    while (1) {
        int variant;
        std::cout << "Выберите нужное действие :\n1.Планирование доставки \n2.Добавить новые материалы\n3.Редактировать информацию\n4.Просмотреть все материалы\n5.Выход\n";
        std::cin >> variant;
        if (variant == 1) {
            plan();
        }
        else if (variant == 2) {
            add_mat();
        }
        else if (variant == 3) {
            red_mat();
        }
        else if (variant == 5) {
            exit(1);
        }
        else if (variant == 4) {
            all_mat();
        }
        
        else {
            std::cout << "Неверный вариант!";
        }
    }
}
void red_mat() {
    int i = 0;
    int variant;
    std::string name, kol;
    std::ifstream file("all.txt");
    std::cout << "Редактирование информации\n";
    std::cout << "Введите номер материала либо 0 чтобы выйти\n";
    std::cin >> variant;
    std::string line;
    int k=1;
    if (file.is_open()) {
        
        while (std::getline(file, line)) {
            i++;
            k++;
            if (variant == i) {// если цикл попадает на выбраный номер материала 
                std::cout << "Введите новое имя:\n";
                std::cin >> name;
                std::cout << "Введите кол-во:\n";
                std::cin >> kol;
                std::ofstream myfile("all.txt"); 
                myfile.open("all.txt", std::ios_base::app);
                
                line = name + " " + kol + " "; // не уверен что надо но мне так проще
                myfile << line<< std::endl;// сохранил 
                
                std::cout << i << "." + line << std::endl; // вывел
                i++;
                k = 0;
                myfile.close();
            }
            if (k != 0) { // чтобы не выводилась 2 раза строчка после срабатываения предыдущего if
                std::ofstream myfile("all.txt");
                myfile.open("all.txt", std::ios_base::app); // выводит остальной список с новым измененным пунктом
                myfile << line << std::endl;
                std::cout << i << "." + line << std::endl;
                myfile.close();}
            
        }
        file.close();
    }
}
0
7438 / 5030 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
09.02.2021, 22:23
Цитата Сообщение от Lemon 1123 Посмотреть сообщение
со структурами все надо переделывать
я Вам подсказываю как решаются такие задачи - с помощью структуры - рано или поздно Вам добавят подзадачи которые решить без структур будет сложно. именно сейчас, сообщая
Цитата Сообщение от Lemon 1123 Посмотреть сообщение
не уверен что надо но мне так проще
Вы проходите мимо возможности освоить что-то новое. но это дело Ваше. если будут нужны ссылки на решения простейших задач на структурах, сообщите

теперь что непосредственно касается Вашего вопроса. найдите отличие:
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
std::ofstream myfile;
    myfile.open("all.txt", std::ios::out | std::ios::app);
Цитата Сообщение от Lemon 1123 Посмотреть сообщение
std::ofstream myfile("all.txt");
    myfile.open("all.txt", std::ios_base::app);
ещё лучше использовать сокращённую запись:
C++
1
std::ofstream myfile("all.txt", std::ios::app);
следующий вопрос - зачем Вам режим дозаписи app, если Вы просто меняете строку ?

переименуйте функции, как я предлагал выше - потому что непонятно что Ваша функция "редактирования" должна делать. кроме того использовать транслит ( например red ) не рекомендуется

и вынесите открытие файла из цикла
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.02.2021, 22:23
Помогаю со студенческими работами здесь

Перенос информации из txt. в mysql
К сожалению профан я в работе с бд, по этому надеюсь на помощь. Собственно нужен код для обработки лога входящих смс. Лог имеет следующий...

Перенос информации из DataGridView в txt файл
Столкнулся с необходимостью записи строк DGV в txt файл который уже есть (В нём строки DGV) Разделителем слов является символ ╤ ...

Как сделать перенос из отдного txt файла текста в другой txt файл в Turbo C?
Надо сделать с потоками. fopen fgets fputs - с этими функциями

перенос информации с 1с на сайт и создание каталога на основе информации в БД
Всем доброе утро, у меня есть база на 1с, я перенёс информацию о товарах на сайт, в админке у меня есть пункт с названием &quot;1с...

Перенос данных из .txt
Excel 2019 Попробовал тупо открыть .txt (представляет собой список) в excel. На первый взгляд все норм, каждая строка .txt оказалась в...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru