![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Artiom |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1031 Регистрация: 11.3.2003 Где: Минск\Баку Репутация: нет Всего: 17 |
Подскажите как лучше организовать ввод таких элементов из файла.
Объект -- это число и два индекса к нему. Какую структуру лучше иметь файлу? И как оттуда все прочитать? Хорошо бы пример кода а то я этого воще не знаю. -------------------- Если тебя жизнь трахает, значит, ты ещё живой |
|||
|
||||
Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 5 Всего: 44 |
Возможно вообще много вариантов, все зависит от того для чего ты этот файл в дальнейшем будешь использовать, что сейчас и в какой среде пишешь. Даю пример на вскидку, проверь на ошибки.
#include <iostream.h> #include <fstream.h> class A{ private: double value; int i1; int i2; public: // то да се, конструкторы там всякие, методы friend istream& operator >>(istream& s, A& x);//Для ввода из файла friend ostream& operator <<(ostream& s, A& x);//Для вывода в файл }; istream& A::operator >>(istream& s, A& x) { s>>value; s>>i1; s>>i2; return s; } ostream& A::operator >>(ostream& s, A& x) { s<<setw(20)<<value; s<<setw(10)<<i1; s<<setw(10)<<i2<<endl; return s; } int main() { fstream f; A obj; //Теперь заносим объект в файл f.open("имя и путь файла",ios::out); if(!f) return 1; f<<obj; f. close; //А вот из файла считываем f.open("имя и путь файла",ios::шт); if(!f) return 1; f>>obj; f. close; } А вообще существует много способови много нюансов. Ты бы уточнил. -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 5 Всего: 44 |
Ой.
f.close() - надо со скобочками это ведь функция. Извеняюсь за ошибку -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
Artiom |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1031 Регистрация: 11.3.2003 Где: Минск\Баку Репутация: нет Всего: 17 |
Nastya
Извини если вопрос глупый но что такое
конкретно setw(20). А вообще как раз что-то такое я и хотел и класс похожий на А у меня есть -------------------- Если тебя жизнь трахает, значит, ты ещё живой |
|||
|
||||
Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 5 Всего: 44 |
Я тут перегрузила оператор >> может не самый легкий пть, но им потом весьма удобно польщоваться.
setw(20) - задает ширину выводимого поля. Например если мое value будет 12345, то в файл оно запишется так 12345 - 15 пробелов и 5 цифр - общая ширина 20. Этого можно не делать, но я же не знаю, для чего тебе файл, а эта фишка будет удобнее, если потом в нем указаетль позиционировать. Ты бы подробнее написал, для чего все это, может предложу что получше. Кстати, я еще забыла подключить #include <iomanip.h> - в нем этот setw и много другого полезного. Пощи информацию по потокам ввода вывода и по манипуляторам потоков. Хотя опять повторюсь можно это сделать и по другому. Ты какое приложение пишешь консольное, win32, с MFC или еще какое. -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
Artiom |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1031 Регистрация: 11.3.2003 Где: Минск\Баку Репутация: нет Всего: 17 |
Пишу я обычное консольное приложение. Нужно мне это вот для чего :
написан класс для хранения разреженной матрицы, я храню число--элемент матрицы и его индексы. Теперь мне надо организовать загрузку реальной матрицы из файла. Можно плюс к этому как-то пометить в файле размерность матрицы или нужно какой-то счетчик делать? -------------------- Если тебя жизнь трахает, значит, ты ещё живой |
|||
|
||||
Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 5 Всего: 44 |
В принципе, можно первым делом в файл записывать количество элементов. и первым же делом его считывать.
Можно считывать каждый элемент до тех пор пока не будет достигнут конец файла fstream f; f.open(...... while(f.peek()!=EOF) { считываем элемент ..... } -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
Nastya |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 27.3.2002 Где: Мариуполь Репутация: 5 Всего: 44 |
В принципе, можно первым делом в файл записывать количество элементов. и первым же делом его считывать.
Можно считывать каждый элемент до тех пор пока не будет достигнут конец файла fstream f; f.open(...... while(f.peek()!=EOF) { считываем элемент ..... } -------------------- Что бы понять рекурсию, надо понять рекурсию "Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор |
|||
|
||||
DENNN |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3878 Регистрация: 27.3.2002 Где: Москва Репутация: 1 Всего: 43 |
Почему бы скажем просто не сделать структуру
struct st { double value; UINT index1; UINT index2; } и читать прямо в нее? Тогда нет необходимости перегружать операторы, да и считать можно весь файл сразу в массив (например) . |
|||
|
||||
Step |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
Nastya
а почему бы не сделать твой класс произвольным от объекта, тогда стандартная сериализация будет работать -------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
Artiom |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1031 Регистрация: 11.3.2003 Где: Минск\Баку Репутация: нет Всего: 17 |
К сожалению получил счас конкретный текстовый файл , с которого надо прочитать данные. Выглядит это так:
Как это нормально обработать? Элементы имеют тип Double , я их просто покромсал чтобы на экране помещались -------------------- Если тебя жизнь трахает, значит, ты ещё живой |
|||
|
||||
Gannibal |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 742 Регистрация: 15.4.2003 Где: 010101 Репутация: нет Всего: 17 |
так считаваи по строке а в строке они у тебя пробелами отделены... проблемы невижу...
-------------------- Я родился в этом безумном мире - и Я сделаю всё чтобы в нём выжить! |
|||
|
||||
Fantasist |
|
|||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Так вот, Nastya, самый правильный вариант предложила, на мой взгляд. Переопредели операторы<<,>> для потоков, потом создаешь файловый поток и читаешь. Примерно так:
Только надо у тебя пропустить мусор в начале. -------------------- Волны гасят ветер... |
|||
|
||||
Artiom |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1031 Регистрация: 11.3.2003 Где: Минск\Баку Репутация: нет Всего: 17 |
Чего-то у меня ничего не работает .
Если переопределять оператор с такими параметрами
то компилятор ругается
а если просто
то на любое объявление переменной типа
ругается
Помогите!!!! Не понимаю. -------------------- Если тебя жизнь трахает, значит, ты ещё живой |
||||||||||
|
|||||||||||
comcon1 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
Ты писал:
Попробуй так:
|
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |