Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.221.239.148] |
|
Сообщ.
#1
,
|
|
|
Тестовый файл настроек имеет вид:
100; первый параметр программа; второй параметр 13.23; третий параметр В программе #include <string> #include <iostream> #include <fstream> #include <memory.h> #include <stdio.h> using namespace std; int main() { setlocale(LC_ALL, ""); ifstream fileIn("program.ini", ios::in); if(!fileIn) { cout << "Файл настроек не найден!" << endl; system("pause"); exit(EXIT_FAILURE); } const int nArr = 128; char buf[nArr]; while(fileIn) { fileIn.getline(&buf[0], nArr, ';'); cout << buf; } cout << endl; fileIn.close(); system("pause"); } Прикреплённый файлCppStudyCons.zip (2,24 Кбайт, скачиваний: 84) |
Сообщ.
#2
,
|
|
|
Цитата tuchin @ cout << buf; По-моему, забыл здесь поставить std::endl |
Сообщ.
#3
,
|
|
|
Да, действительно забыл. Но все равно, результат не тот, который я хотел достичь. Я хотел бы считывать в строке только символы до точки запятой, а сейчас считывается и часть строки после точки с запятой. Как лучше решить эту задачу?
|
Сообщ.
#4
,
|
|
|
Поставь точку с запятой в конце строки
|
Сообщ.
#5
,
|
|
|
Цитата tuchin @ Как лучше решить эту задачу? std::string line; std::getline(fileIn, line); size_t idx = line.find(';'); if(idx != std::string::npos) line = line.substr(0, idx); |
Сообщ.
#6
,
|
|
|
Да была задумка такая: точка с запятой отделяет значение параметра, а после точки с запятой - пояснение назначения параметра. Хотелось бы считать только значение параметра из строки.
|
Сообщ.
#7
,
|
|
|
Чем мой вариант не устроил?
|
Сообщ.
#8
,
|
|
|
Цитата tuchin @ Да была задумка такая: точка с запятой отделяет значение параметра, а после точки с запятой - пояснение назначения параметра. Хотелось бы считать только значение параметра из строки. Тогда делай getline два раза - первый раз до ';', второй - до '\n'. И проверяй каждый раз !fileIn |
Сообщ.
#9
,
|
|
|
Цитата Олег М @ Тогда делай getline два раза - первый раз до ';', второй - до '\n'. И проверяй каждый раз !fileIn Без дополнительных (и сомнительных) манипуляций с позицией в потоке это работать не будет. |
Сообщ.
#10
,
|
|
|
Там тебе ещё наверное надо будет пробелы убирать. Лучше уж считай всё строку, а потом распарcь её при помощи sscanf. Ну или сам файл сразу начитывай через fscanf
Добавлено Цитата shm @ Без дополнительных(и сомнительных) манипуляций с позицией в потоке это работать не будет. Это каких? |
Сообщ.
#11
,
|
|
|
Цитата Олег М @ Это каких? Ну ты попробуй реализовать свою идею и прогони на любом ini'шнике с комментариями в середине. |
Сообщ.
#12
,
|
|
|
Цитата shm @ Ну ты попробуй реализовать свою идею и прогони на любом ini'шнике с комментариями в середине. Здесь вроде задача не стояла насчёт любого инишника. |
Сообщ.
#13
,
|
|
|
Цитата tuchin @ Хотелось бы считать только значение параметра из строки. Это крайне неудачное решение. Сомневаюсь, что оно реализуемо вообще. --- Все строки в файле следуют одна за другой. Значит, чтобы прочитать последующую строку, надо или прочитать предыдущую целиком, либо читая часть её, потом (как-то ?) определив её размер сдвинуть указатель файла на начало следующей строки. --- Дешевле и понятнее считывать строки целиком, а потом разбирать их содержимое. И ещё вот это: while(fileIn) { ... } Может попробовать как-то так ? while(!fileIn.eof()) { ... } |
Сообщ.
#14
,
|
|
|
Скачал–посмотрел. Не, ну там двух getline на строку, как я писал выше, будет достаточно. Можно даже и без проверок между ними.
|
Сообщ.
#15
,
|
|
|
Мне больше понравился вариант shm. Спасибо всем ответившим.
|