Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/16: Рейтинг темы: голосов - 16, средняя оценка - 4.88
4 / 3 / 1
Регистрация: 03.06.2020
Сообщений: 82

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

07.02.2021, 21:12. Показов 3190. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru