Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
AzoSdr
0 / 0 / 0
Регистрация: 27.08.2015
Сообщений: 20
1

Загрузка переменных из текстового файла

05.08.2017, 00:39. Просмотров 878. Ответов 7
Метки нет (Все метки)

всем добрый день!
помогите кто сможет. есть текстовый фаил сохранения настроек *.txt в нем имеется текст
Кликните здесь для просмотра всего текста
Level=1Count=2Target=500Speed=15Time=300
или так
Level=1
Count=2
Target=500
Speed=15
Time=300
или так
Level = 2 Count = 5 Target = 15 Speed = 75 Time = 20

в общем как угодно, но последовательность всегда "параметр" "=" "значение" между ними могут быть, а могут и не быть пробелы или любые другие разделители. Числа могут быть положительные, любой длинны, Time и Speed могут быть с точкой.
В программе есть соответствующие переменные Level Count Target Speed Time, каким образом из текстового файла передать числовые значения для соответствующих переменных?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.08.2017, 00:39
Ответы с готовыми решениями:

Чтение переменных из текстового файла
Раньше с С++ не сталкивался, и вот поставили мне такую задачу: вынуть следующие...

Даны 5 переменных a,b,c,d,e - необходимо каждой из этих переменных присвоить число из текстового документа
Есть у меня текстовый документ, в котором записаны 5 чисел. Каждое число в...

Добавить в конец первого текстового файла содержимое второго текстового файла
Даны два текстовых файла. Добавить в конец первого файла содержимое второго...

Загрузка данных из текстового документа
Здравствуйте, я столкнулся со следующей проблемой: Мне нужно загрузить данные...

Загрузка переменных через #include
Всем честных выборов!) В общем есть программа, в которой больше места...

7
TButton
263 / 61 / 20
Регистрация: 25.01.2016
Сообщений: 465
Записей в блоге: 1
05.08.2017, 01:25 2
Цитата Сообщение от AzoSdr Посмотреть сообщение
фаил сохранения настроек *.txt
Файлы сохранения настроек обычно *.ini и *.inf. Если я не ошибаюсь, есть библиотеки для работы с ini файлами.
В ини файлах ваши настройки выглядят примерно так
[settings]
Level=1
Count=2
Target=500
Speed=15
Time=300
Да, есть библиотека IniFiles.h, правда она идёт с vcl bcb, Но если получится выковырять, то можно считать этот вопрос закрытым
0
Renji
2114 / 1552 / 473
Регистрация: 05.06.2014
Сообщений: 4,505
05.08.2017, 05:42 3
Лучший ответ Сообщение было отмечено AzoSdr как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include<map>
#include<cstdio>
 
int main()
{
    int Level,Count,Target,Speed,Time;
    std::map<std::string,int*> vars{
        {"Level",&Level},
        {"Count",&Count},
        {"Target",&Target},
        {"Speed",&Speed},
        {"Time",&Time}
    };
    FILE*file=fopen("test.txt","r");
    char name[128];
    int value;
    while(fscanf(file," %127[a-zA-Z] = %d",&name,&value)==2)
        *vars[name]=value;
    for(auto&pair:vars)
        std::cout<<pair.first<<" "<<*pair.second<<std::endl;
    return 0;
}
1
Peoples
1352 / 841 / 749
Регистрация: 06.02.2016
Сообщений: 2,244
Записей в блоге: 18
Завершенные тесты: 4
05.08.2017, 10:33 4
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
#include <iostream>
#include <fstream>
#include <unordered_map>
#include <string>
#include <regex>
using namespace std;
int main() {
    
    ifstream ff("tr.txt");
    
    //string s {},txt {};
    //while(getline(ff,s)) txt+=s+" ";
    string txt{istreambuf_iterator<char>(ff),istreambuf_iterator<char>()};
    
    unordered_map<string,double>m;
    
    regex e("(\\w+)\\s*\\=\\s*(\\d+\\.?\\d*)");
    
    for(auto it=sregex_iterator(txt.begin(),txt.end(),e); it!=sregex_iterator(); ++it) {
        m.emplace(it->str(1),stod(it->str(2)));
    }
    
    for(const auto&x:m) {
        cout<<x.first<<" "<<x.second<<endl;
    }
    
    return 0;
}
1
cordfield
44 / 44 / 19
Регистрация: 04.05.2014
Сообщений: 189
05.08.2017, 11:45 5
Если работа происходит в Windows, проще всего для начинающего использовать функцию GetPrivateProfileInt.
0
AzoSdr
0 / 0 / 0
Регистрация: 27.08.2015
Сообщений: 20
05.08.2017, 23:34  [ТС] 6
всем спасибо, что помогаете. с ini проблем нет там своя библия понятная. но задача именно txt.
Renji, на ваш код мой VS2017 матом ругается

Ошибка C4996 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. test2 d:\vc\test2\test2\test2\maain.cpp 49

в препроцессоре прописал _CRT_SECURE_NO_WARNINGS.
заменил fscanf на fscanf_s , а вот fopen на _fsopen не хочет меняться https://msdn.microsoft.com/en-us/library/z5hh6ee9.aspx
Peoples, как прочитать текстовый фаил я понял, а вот как присвоить переменной в программе числовые значения из txt не понимаю.
0
Renji
2114 / 1552 / 473
Регистрация: 05.06.2014
Сообщений: 4,505
06.08.2017, 00:21 7
Цитата Сообщение от AzoSdr Посмотреть сообщение
в препроцессоре прописал _CRT_SECURE_NO_WARNINGS.
заменил fscanf на fscanf_s
Что ни будь одно - или прописывать _CRT_SECURE_NO_WARNINGS, или менять сишные функции на _s. Причем, простого подписывания _s вам не хватит, там еще размер принимающих буферов надо будет явно передавать.
Цитата Сообщение от AzoSdr Посмотреть сообщение
Peoples, как прочитать текстовый фаил я понял, а вот как присвоить переменной в программе числовые значения из txt не понимаю.
Ну так в моем примере же указано:
C++
1
2
3
4
5
6
7
8
    std::map<std::string,int*> vars{
        {"Level",&Level},
        {"Count",&Count},
        {"Target",&Target},
        {"Speed",&Speed},
        {"Time",&Time}
    };
    *vars["Level"]=1234;
0
AzoSdr
0 / 0 / 0
Регистрация: 27.08.2015
Сообщений: 20
06.08.2017, 00:42  [ТС] 8
Renji, понял пробую объединить ваш пример и примерPeoples, надеюсь мозгов у меня хватит утро далеко, а работу в понедельник сдавать.
0
06.08.2017, 00:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.08.2017, 00:42

Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла.
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;locale.h&gt; #include&lt;iomanip&gt;...

Сортировка слов текстового файла путём слияния данных из файла и заданного внутреннего массива
Здравствуйте. Имеется задание, которое я ни в коем случае не прошу за меня...

Указание текстового файла-источника и принимающего файла в cmd
Подскажите, как сделать что б при вводе через cmd надо было указывать...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru