| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Как лучше хранить текст в файлах |
| Автор: ZC1989 25.1.2007, 13:14 | ||
| как лучше хранить текст в фалах набранный в прогу... я его после этого сохраняю во внешний файл, на данный момент храню в файле не ток текст но и некоторые параметры, что заставляет прибегать к синтаксису... получется что-то вроде этого в файле
как видно из этого минимального примера, в место пробелов используется андерлайн... просто когда я читалкой прохожучь по файлу получаю "Какое-то_имя_человека" в переменную и заменяю на нормальные пробелы эти подчёркивания... это сразу лишает возможности использовать "_" в тексте, если его даж и набрать, потом он будет заменён... вот как лучше такие файлы организовывать? есть мысля, что не символы просто сохранять, а код этих символов, это как вообще, нормальная идея? |
| Автор: Anikmar 25.1.2007, 13:24 |
| Можно сделать структурами. Первая структура - заголовок файла Потом структура списка людей. При таком подходе - любые символы и служебная информация будут храниться без проблем |
| Автор: ip127001 25.1.2007, 13:41 |
| struct+vector+fstream проблема не совсем ясна... приведи конкредный пример ввода и нужного вывода |
| Автор: ZC1989 25.1.2007, 14:33 |
| ip127001, я хочу теоретически разобрать эту делему... потому что читаю немного разными способами... строка может содеражть не только название (что бы быть уверенным в чтении) но и некоторые параметры пример: загаловок текст параметр1 параметр2 если скжет строка будет иметь вид NAME test 1 0 то тут всё пучком, text будет прочитано в строку, первый и второй паматры расшифруются (к примеру это мой enum) и всё будет работать как положено, но если будет записана строка NAME test bad 1 0 то тот же ifstream передаст в строку только text, в первый паметр bad а во второй 1, последний же параметр вообще пропадёт... для этого и пишу text_bad, что бы текстовая строка не разрывалась на 2 слова яснее объяснил проблем? |
| Автор: Anikmar 25.1.2007, 14:41 |
| Я бы набросал все возможны типы данных, которые необходимо хранить в файле, и уже основываясь на этом списке разрабатывал проект формата файла. Например, в файле могут быть соранены несколько параметров? содержащих имя и два int Затем несколько параметров, содержащих имя и 3 int, неограниченное количество строк. Тогда формат файла можно представить как-нибудь так: int - Количество параметров 1-го типа Массив структур для данных 1-го типа int - Количество параметров 2-го типа Массив структур параметров 2-го типа int - Количество произвольных строк Массив строк Либо универсальная структура, которая может содержать внутри себя все типы параметров (потребует больше памяти) { int Type; int Param1; int Param2; int Param3; char string[250]; } В общем вариантов для раздумий уйма. Например, как лучше хранить строку (т.е. структуры переменного размера) и т.п. |
| Автор: ZC1989 25.1.2007, 14:48 | ||
Anikmar, получается что я должен буду как-то разобрать содержимое в строке, получается не совсем цикл к которому я привык...
могут быть и больше, я пытаюсь универсальное сворганить детище..... может там ещё и дроби нужно будет и всякое такое... просто ед. оптимальным вариантом мне видится перевод символов в их кодировку и уже сохранение этой кодировки... к примеру получилось бы так NAME 2321665361727217836763635623661231832736712 1 0 но в то же время не совсем уверен в правильности... а тот вариант что ты предложил мне кажется не оч практичным, если будет та же ерунда с "text bad" помоему, глюка даст это... |
| Автор: Anikmar 25.1.2007, 14:53 |
| Тяжело что-то советовать не зная постановки задачи. Какие данные надо сохранять? Например, можно воспользоваться готовым ini файлом и забыть про парсинг... |
| Автор: KelTron 25.1.2007, 14:53 | ||||
а можно в файле записать, например, так
и считывать так:
Вряд ли тебе в имени нужно хранить ';' поэтому его удобно использовать в качестве разделителя |
| Автор: Anikmar 25.1.2007, 15:02 |
| Если файл планируется набирать вручную, то можно оставить текстовый формат. А вот если файл создается из программы, то никакого смысла не вижу хранить тот же float в текстовом виде. |
| Автор: Voldemar2004 25.1.2007, 15:08 | ||
Строго не судите:
|
| Автор: Vyacheslav 25.1.2007, 18:39 | ||
|
| Автор: VectorMan 25.1.2007, 18:57 |
| можно использовать xml |
| Автор: Rockie 25.1.2007, 21:31 |
VectorMan, то, что доктор прописал http://ru.wikipedia.org/wiki/XML |
| Автор: ZC1989 25.1.2007, 23:05 |
| Rockie, дайте вам волю вы тут придёте ещё к HTML разметке... проблем в том что во первых я не горю желаением использовать символы для пробелов или разделения каких-то параметров от строк... - это черевато во первх не возможностью использовать этот символ, во вторых не практично просто... тут некоторые сказали что использовать надо в конце ; - а если этот символ будет через пробел написан в тексте... получается ошибочная трактовка читалкой... |
| Автор: bsa 25.1.2007, 23:13 | ||
Ты должен в читалке и писалке это учесть. Например, использовать обратный слеш для указания, что следующий за ним символ надо рассматривать, как символ, а не как конец строки:
Здесь текст будет иметь следующий вид (после декодирования): "this is text; text2 \ end" |
| Автор: ZC1989 25.1.2007, 23:27 |
| bsa, но опять же остаётся возможно шибка... это катит не для всех вариантов... если, скажем, замутить это для хранения имён то да, а если для курсовухи по информатике... |
| Автор: bsa 25.1.2007, 23:38 | ||
в чем проблема? Проблемный пример приведи. |
| Автор: Rockie 26.1.2007, 00:59 | ||||||
Шило на мыло. Получается что пробел нельзя а точку с запятой можно.
ZC1989, так вы постепенно прийдете к xml
заголовок[\n] текст текст текст[\n] параметр1[\n] параметр2[\n] |