Страница 1 из 1
Выбирать строки из файла НЕ перебором
Добавлено: 08 май 2010, 02:43
РусНекромант
Ща только начинаю изучать С++ у меня стоит Microsoft Visual Studio 2008 (если это имеет значение). Так вот я раньше писал на VB.6 потом перешел на VB.NET так вот там очень хорошо работалось с текстовыми файлами там есть способ при котором в "правильно" записанном файле можно было написать допустим 44 строчку прочитать и передать переменной. И это все без перебора и прочего что мне предлагают ща учебники С++ для начинающих. Правда и записывать нужно было именно в 44 строку ну тоесть все там круто пишеш что нужно в строки а потом выгребаешь. Так вот в чем вопрос мне что то не верится что в С++ нет чего то подобного насчет ставить сиволы где нада а потом искать и так выделять строку эт конечно круто я смогу но это громоздко и не удобно может есть что то попроще?
P.S. Программа это викторина около 50 вопросов 4 варианта ответа и нада естественно рандомом все это оформить всё в принципе решил осталось только насчёт файла определится тоесть что бы без проблем можно было 5 строк (1 вопрос 4 ответа) считать из файла и подставить. В VB можно было бы цикл с шагом 5 поставить и рандомно начало цикла задать и вот вуаля строки загружены всего 6 строк кода заняло бы. И ещё перейти на VB не предлагать так как у меня условие задания писать на С++
Re: Выбирать строки из файла НЕ перебором
Добавлено: 08 май 2010, 10:32
Romeo
Готового класса для подобных манипуляций в С++ нет. Тебе придётся его реализовать самому, но это не сложно. Предлагаю следующий подход:
- Конструктор принимает строку - путь к файлу. Он открывает файл на чтение, вычитывает из него данные в любой контейнер строк (например в вектор) и закрывает файл.
- Деструктор открывает файл на запись, сохраняет содержимое внутреннего контейнера в файл и закрывает его.
- Класс также должен иметь методы для модицикации (добавить, удалить, редактировать) строк из внутреннего контейнера.
Re: Выбирать строки из файла НЕ перебором
Добавлено: 08 май 2010, 11:16
Decoder
В Borland C++ Builder есть готовый класс TStringList, у которого есть метод LoadFromFile. Далее просто выбираешь любую строку из полученного массива по индексу.
Re: Выбирать строки из файла НЕ перебором
Добавлено: 08 май 2010, 11:35
Romeo
Человек пишет под Visual Studio, так что библиотека VCL недоступна

Re: Выбирать строки из файла НЕ перебором
Добавлено: 08 май 2010, 12:14
WinMain
В проекте на VС++ 2008 легко можно включить опцию поддержки CLR и пользоваться объектами платформы .NET с тем же успехом, что и на VB.NET
Объект System.IO.File содержит статический метод ReadAllLines(), который возвращает готовый массив строк. Потом выбирай любую строку из этого массива.
Re: Выбирать строки из файла НЕ перебором
Добавлено: 08 май 2010, 12:46
РусНекромант
Ну может быть тогда не текстовый файл мне всё равно главное не БД так как он потребует что бы при установке программы был установлен SQL сервер а это ни к чему программка маленькая. Допустим файлы XML удобно ли с ними работать и как это делается?
Re: Выбирать строки из файла НЕ перебором
Добавлено: 08 май 2010, 21:37
WinMain
Можно воспользоваться механизмом сериализации, который реализован в библиотеке MFC. Это способность объектов "самосохраняться" при записи данных в файл и "самовосстанавливаться" при чтении из файла. Класс CStringArray (который является динамическим массивом для текстовых строк) тоже обладает этой способностью, поэтому ничего дополнительно писать не придётся. Для этого в процедуре чтения/записи данных нужно будет добавить объект класса CStringArray в поток сериализации.
Если тебя интересует XML, то можно воспользоваться системными библиотеками MSXML или xmllite. Для небольшого набора данных предпочтительнее xmllite, т.к. он проще в использовании.
Ещё проще воспользоваться старым добрым INI-файлом. Для этого тебе понадобятся всего две функции: WritePrivateProfileString() и GetPrivateProfileString().
Re: Выбирать строки из файла НЕ перебором
Добавлено: 09 май 2010, 13:11
РусНекромант
Попробуем)) а насчет Reedline () почемуто русский текст не понимает прога я не пойму толи шрифт не знает толи кодировку не меняет карочь выводит число норм а вместо русских букв квадратики и подобное. Так что это